项目结构图:

步骤一: 添加maven 依赖包

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cfx.ws</groupId>
<artifactId>ws-cfx-core</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>ws-cfx-core</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<cxf.version>2.7.1</cxf.version>
<junit.version>4.8.1</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-security</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-policy</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle-jaxrs</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
</dependency> <dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies> <build>
<finalName>ws-cxf-core</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**</include>
</includes>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
<contextPath>/</contextPath>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>9000</port>
</connector>
</connectors>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build> </project>

这里使用maven-jetty插件.

步骤二:编写service接口

package com.ws.cfx.welc;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService; import com.ws.cfx.welc.model.WorkInfo;
/*
* ws 接口
*/
@WebService
public interface WelcomeWS { @WebMethod
@WebResult String welcomeMessage(@WebParam String message); @WebMethod
@WebResult WorkInfo workInfoNode(Long id);
}

接口实现

package com.ws.cfx.welc.impl;

import java.util.Date;

import com.ws.cfx.welc.WelcomeWS;
import com.ws.cfx.welc.model.WorkInfo;
/**
*
* @author dennisit@163.com
*
*/
public class WelcomeWSImpl implements WelcomeWS{ @Override
public String welcomeMessage(String message) {
return "server success , accpet message values is :" + message;
} @Override
public WorkInfo workInfoNode(Long id) {
WorkInfo workInfo = new WorkInfo();
workInfo.setId(2L);
workInfo.setWorkname("Node 2");
workInfo.setWorktime(new Date());
return workInfo;
} }

WS接口中的方法二,依赖自定义Model类,WorkInfo.

package com.ws.cfx.welc.model;

import java.io.Serializable;
import java.util.Date;
import org.apache.commons.lang.builder.ToStringBuilder; public class WorkInfo implements Serializable{ /**
*
*/
private static final long serialVersionUID = -8709189656486577717L; private Long id;
private String workname;
private Date worktime; public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getWorkname() {
return workname;
}
public void setWorkname(String workname) {
this.workname = workname;
}
public Date getWorktime() {
return worktime;
}
public void setWorktime(Date worktime) {
this.worktime = worktime;
} @Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}

步骤三: 编写ws服务端

package com.ws.cfx.welc.server;

import org.apache.cxf.endpoint.Server;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean; import com.ws.cfx.welc.impl.WelcomeWSImpl; /**
* ws : 服务端
*
* @author dennisit@163.com
*
* 服务端测试: http://localhost:9000/ws/welcome?wsdl
*/
public class WelcomeWSServer { /**WS服务地址*/
public static final String WS_URL = "http://localhost:9000/ws/welcome"; public static void main(String[] args) {
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
factory.setServiceClass(WelcomeWSImpl.class);
factory.setAddress(WelcomeWSServer.WS_URL);
//添加cfx自定义的日志拦截器
factory.getInInterceptors().add(new LoggingInInterceptor());
factory.getOutInterceptors().add(new LoggingOutInterceptor());
Server server = factory.create();
server.start();
}
}

启动服务端,访问地址: http://localhost:9000/ws/welcome?wsdl出现xml输出,表示服务端正式服务.实例输出内容如下:

<wsdl:definitions name="WelcomeWSImplService"
targetNamespace="http://impl.welc.cfx.ws.com/">
<wsdl:import location="http://localhost:9000/ws/welcome?wsdl=WelcomeWS.wsdl"
namespace="http://welc.cfx.ws.com/">
</wsdl:import>
<wsdl:binding name="WelcomeWSImplServiceSoapBinding" type="ns1:WelcomeWS">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="welcomeMessage">
<soap:operation soapAction="" style="document" />
<wsdl:input name="welcomeMessage">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="welcomeMessageResponse">
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="workInfoNode">
<soap:operation soapAction="" style="document" />
<wsdl:input name="workInfoNode">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="workInfoNodeResponse">
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="WelcomeWSImplService">
<wsdl:port binding="tns:WelcomeWSImplServiceSoapBinding"
name="WelcomeWSImplPort">
<soap:address location="http://localhost:9000/ws/welcome" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

步骤四: 编写ws客户端,实现服务调用

package com.ws.cfx.welc.client;

import java.net.SocketTimeoutException;
import javax.xml.ws.WebServiceException;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.ws.cfx.welc.WelcomeWS;
import com.ws.cfx.welc.model.WorkInfo;
import com.ws.cfx.welc.server.WelcomeWSServer;
/**
* ws : 服务客户端
*
* @author dennisit@163.com
*
*
*/
public class WelcomeWSClient { public static void main(String[] args) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setAddress(WelcomeWSServer.WS_URL);
factory.setServiceClass(WelcomeWS.class);
//客户端添加cfx日志拦截器
factory.getInInterceptors().add(new LoggingInInterceptor());
factory.getOutInterceptors().add(new LoggingOutInterceptor());
WelcomeWS welcome = (WelcomeWS) factory.create();
System.out.println(welcome.welcomeMessage("This if first cfx ws .")); try {
WorkInfo workInfo = welcome.workInfoNode(2L);
System.out.println(workInfo);
} catch(Exception e) {
if (e instanceof WebServiceException
&& e.getCause() instanceof SocketTimeoutException) {
System.err.println("timeout exception.");
} else {
e.printStackTrace();
}
}
}
}

剔除拦截器日志文件之后的输出内容如下:

server success , accpet message values is :This if first cfx ws .
com.ws.cfx.welc.model.WorkInfo@8a2023[id=2,workname=Node 2,worktime=Thu Apr 03 10:30:04 GMT+08:00 2014]

转载请注明出处:[http://www.cnblogs.com/dennisit/p/3649945.html]

初始cfx开发webservice, 简单实例应用的更多相关文章

  1. VS2008中C#开发webservice简单实例

    1.创建工程 文件-> 新建->网站 如下图. 工程建好后,会自动添加如下代码: using System; using System.Linq; using System.Web; us ...

  2. 主题:Java WebService 简单实例

    链接地址:主题:Java WebService 简单实例    http://www.iteye.com/topic/1135747 前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要 ...

  3. (Hibernate进阶)Hibernate搭建开发环境+简单实例(二)

    hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和 ...

  4. 【SSH进阶之路】Hibernate搭建开发环境+简单实例(二)

    Hibernate是很典型的持久层框架,持久化的思想是很值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和原理 ...

  5. Android Studio1.4.x JNI开发基础 - 简单实例

    接上一篇,搭建好基于Android Studio的环境之后,编写native代码相对来说也比较简单了.在Android上编写Native代码和在Linux编写C/C++代码还是有区别,Native代码 ...

  6. webservice 简单实例

    C# 创建.部署和调用WebService的简单示例   webservice 可以用于分布式应用程序之间的交互,和不同程序之间的交互. 概念性的东西就不说太多,下面开始创建一个简单的webservi ...

  7. MVVM开发模式简单实例MVVM Demo

    本文主要是翻译Rachel Lim的一篇有关MVVM模式介绍的博文 A Simple MVVM Example 并具体给出了一个简单的Demo(原文是以WPF开发的,对于我自己添加或修改的一部分会用红 ...

  8. Java WebService 简单实例

    前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要的重复操作. 一.准备工作(以下为本实例使用工具) 1.MyEclipse10.7.1 2.JDK 1.6.0_22 二.创建服务端 ...

  9. .net实现webservice简单实例分享

    原理:WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互.作用:主要用 ...

随机推荐

  1. Docker 容器中无ss命令解决方法

    在早期运维工作中,查看服务器连接数一般都会用netstat命令.其实,有一个命令比netstat更高效,那就是ss(Socket Statistics)命令!ss命令可以用来获取socket统计信息, ...

  2. 第六章|网络编程-socket开发

    1.计算机基础 作为应用开发程序员,我们开发的软件都是应用软件,而应用软件必须运行于操作系统之上,操作系统则运行于硬件之上,应用软件是无法直接操作硬件的,应用软件对硬件的操作必须调用操作系统的接口,由 ...

  3. [OpenCV-Python] OpenCV 中视频分析 部分 VI

    部分 VI视频分析 OpenCV-Python 中文教程(搬运)目录 39 Meanshift 和 和 Camshift 目标 • 本节我们要学习使用 Meanshift 和 Camshift 算法在 ...

  4. python tkinter-窗体

    1.导入自带的包名 import tkinter 2.创建一个窗体对象 form=Tkinter.Tk() 3.显示窗体(这句应该是所有的设置部署完最后执行的一句代码) form.mainloop() ...

  5. UVA725 Division 除法【暴力】

    题目链接>>>>>> 题目大意:给你一个数n(2 <= n <= 79),将0-9这十个数字分成两组组成两个5位数a, b(可以包含前导0,如02345 ...

  6. python的pickle和shelve模块

    python中用于序列化的模块总结 目录 pickle模块 shelve模块 xml模块 pickle模块 介绍 Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python, ...

  7. SpringMVC框架09——@ResponseBody的用法详解

    @ResponseBody可以标注在方法上也可以标注在类上面.简单来说,当标注在方法上时,该方法的返回结果直接转成JSON格式:当标注在类上时,该类中的所有方法的返回结果都转换成JSON格式. 代码示 ...

  8. 浅谈vue之动态路由匹配

    在日常开发过程中,可能会遇到一些类似于新闻详情页的内容,需要把所有详情页映射到同一组件上,这是动态路由匹配的应用场景之一.在使用的过程中,也遇到过一些小坑,此篇做个简要的总结说明: 基本使用 { pa ...

  9. 基于URL的高层次Java网络编程

    一致资源定位器URL URL(Uniform Resource Locator)是一致资源定位器的简称,它表示Internet上某一资源的地址.通过URL我们可以访问Internet上的各种网络资源, ...

  10. SQL Server 限定删除一行

    with t as ( )* from testtest where aa='aa' order by bb ) delete from t