项目结构图:

步骤一: 添加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. jQuery源码中的“new jQuery.fn.init()”什么意思?

    所有文章搬运自我的个人主页:sheilasun.me 引子 最近打算试试看看jQuery的源码,刚开个头就卡住了.无论如何都理解不了jQuery源码入口部分中的 return new jQuery.f ...

  2. Codeforces 891C Envy

    Envy 感觉这种最小生成树上的啥题都差不多的解法.. #include<bits/stdc++.h> #define LL long long #define fi first #def ...

  3. 教程:Visual Studio 中的 Django Web 框架入门

    教程:Visual Studio 中的 Django Web 框架入门 Django 是高级 Python 框架,用于快速.安全及可扩展的 Web 开发. 本教程将在 Visual Studio 提供 ...

  4. Couple number

    P1348 Couple number 我其实找规律了的,然后也没仔细分析,这个题多巧妙. C=a^2-b^2=(a+b)(a-b) 对于任意a而言,加减同一个数得到的数的奇偶性相同,故c=奇数或4的 ...

  5. 关于 tensorflow-gpu 中 CUDA 和 CuDNN 版本适配问题

    问题 今天在使用 tensorflow-yolov3 的时候,发现报错 Loaded runtime CuDNN library: but source was compiled with: . Cu ...

  6. java enum的一种写法记录

    public enum TestEnum { provider { @Override public void provide() { this.name = "hjzgg"; } ...

  7. js数据结构之二叉树的详细实现方法

    数据结构中,二叉树的使用频率非常高,这得益于二叉树优秀的性能. 二叉树是非线性的数据结构,用以存储带有层级的数据,其用于查找的删除的性能非常高. 二叉树 数据结构的实现方法如下: function N ...

  8. java 同步 synchronized

    http://www.cnblogs.com/Qian123/p/5691705.html http://www.cnblogs.com/GnagWang/archive/2011/02/27/196 ...

  9. 生产环境中tomcat的配置

    生产环境中要以daemon方式运行tomcat 通常在开发环境中,我们使用$CATALINA_HOME/bin/startup.sh来启动tomcat, 使用$CATALINA_HOME/bin/sh ...

  10. mogodb排序

    db.getClloection('user').find().sort({'age':-1}).pretty() 2.自然排序,也就是插入的先后顺序 db.getClloection('user') ...