CXF学习01---开发服务端与客户端
2014-05-02 13:41
190 查看
使用CXF开发Web Service服务端需要两部分:接口和实现类
步骤:
1、开发一个Web Service 业务接口,该接口需要用@WebService注解
2、开发一个Web Service实现类,实现类也需要用@WebService注解
3、添加Jar包,并发布WebService
具体步骤如下:
1、新建Java项目即可,我们用CXF内置的Jetty服务器
2、开发业务接口:
3、开发实现类
4、添加Jar包:
这个教程所用的CXF版本为2.7.9,所需要的jar包请看源代码,在最后附有源代码的下载地址,所有cxf版本的下载地址
5、发布服务端:
注意运行服务端以后,不要关在闭服务端
6、打开浏览器,到你所发布的地址去验证,是否发布成功,本教程所发布的地址为:http://127.0.0.1:9999/onyasWS?wsdl,进入这个地址,如果所呈现的结果如下图所示,刚发布成功
服务端开发完毕
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
使用CXF开发Web Service客户端:
1、新建Java项目
2、进入到客户端项目的src目录中,调用CXF提供的wsdl2java工具(把下载的cxf目录下的bin目录配置到path环境变量中),根据WSDL文档生成相应的代码,因为任何语言实现的Web Service,都需要提供并暴露WSDL文档,就是上文所发布的那个地址。
也就是如下:F:\myworkspace\Cxf_Client\src> wsdl2java -frontend jaxws21 http://localhost:9999/onyasWS?wsdl
3、找到wsdl2java所生成的类中,一个继承了Service的类,该类的实例可以当成工厂类来使用。
4、调用Service子类的实例getXXXXport方法,返回远程Web Service的代理。
代码如下所示:
5、运行客户端,如果显示“Hello TestFri May 02 13:42:20 CST 2014”,表示运行成功
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
可能出现的错误:
cxf在客户端调用时报这个错误:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Cannot create a secure XMLInputFactory
at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:171)
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:94)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:240)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:210)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:103)
at $Proxy29.sayHi(Unknown Source)
at onyas.ClentMain.main(ClentMain.java:13)
同时cxf在服务端报这个错误:
java.lang.RuntimeException: Cannot create a secure XMLInputFactory
解决办法:
原因是少了一个叫woodstox-core-asl-4.2.0.jar的jar包,添加该jar包,并加到add to build path即可(我用的是apache-cxf-2.7.9)
java.lang.NoClassDefFoundError: org/codehaus/stax2/XMLOutputFactory2
解决办法:
原因是少了一个叫stax2-api-3.1.1.jar的jar包,添加该jar包,并加到add to build path即可(我用的是apache-cxf-2.7.9)
注意:要重启服务器端,并且重新生成客户端代码。
代码下载
步骤:
1、开发一个Web Service 业务接口,该接口需要用@WebService注解
2、开发一个Web Service实现类,实现类也需要用@WebService注解
3、添加Jar包,并发布WebService
具体步骤如下:
1、新建Java项目即可,我们用CXF内置的Jetty服务器
2、开发业务接口:
package com.onyas.ws.cxf; import javax.jws.WebService; @WebService public interface HelloWorld { String sayHi(String name); }
3、开发实现类
package com.onyas.ws.cxf.impl; import java.util.Date; import javax.jws.WebService; import com.onyas.ws.cxf.HelloWorld; @WebService(endpointInterface = "com.onyas.ws.cxf.HelloWorld" ,serviceName = "HelloWorldWs") public class HelloWorldWs implements HelloWorld { @Override public String sayHi(String name) { return "Hello " + name+new Date(); } }
4、添加Jar包:
这个教程所用的CXF版本为2.7.9,所需要的jar包请看源代码,在最后附有源代码的下载地址,所有cxf版本的下载地址
5、发布服务端:
package onyas; import javax.xml.ws.Endpoint; import com.onyas.ws.cxf.HelloWorld; import com.onyas.ws.cxf.impl.HelloWorldWs; public class ServerMain { public static void main(String[] args) { HelloWorld hw = new HelloWorldWs(); Endpoint.publish("http://127.0.0.1:9999/onyasWS", hw); System.out.println("WebService已成功发布"); } }
注意运行服务端以后,不要关在闭服务端
6、打开浏览器,到你所发布的地址去验证,是否发布成功,本教程所发布的地址为:http://127.0.0.1:9999/onyasWS?wsdl,进入这个地址,如果所呈现的结果如下图所示,刚发布成功
<?xml version="1.0" encoding="UTF-8" ?> - <wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.cxf.ws.onyas.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:ns1="http://cxf.ws.onyas.com/" name="HelloWorldWs" targetNamespace="http://impl.cxf.ws.onyas.com/"> <wsdl:import location="http://localhost:9999/onyasWS?wsdl=HelloWorld.wsdl" namespace="http://cxf.ws.onyas.com/" /> - <wsdl:binding name="HelloWorldWsSoapBinding" type="ns1:HelloWorld"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> - <wsdl:operation name="sayHi"> <soap:operation soapAction="" style="document" /> - <wsdl:input name="sayHi"> <soap:body use="literal" /> </wsdl:input> - <wsdl:output name="sayHiResponse"> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> - <wsdl:service name="HelloWorldWs"> - <wsdl:port binding="tns:HelloWorldWsSoapBinding" name="HelloWorldWsPort"> <soap:address location="http://localhost:9999/onyasWS" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
服务端开发完毕
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
使用CXF开发Web Service客户端:
1、新建Java项目
2、进入到客户端项目的src目录中,调用CXF提供的wsdl2java工具(把下载的cxf目录下的bin目录配置到path环境变量中),根据WSDL文档生成相应的代码,因为任何语言实现的Web Service,都需要提供并暴露WSDL文档,就是上文所发布的那个地址。
也就是如下:F:\myworkspace\Cxf_Client\src> wsdl2java -frontend jaxws21 http://localhost:9999/onyasWS?wsdl
3、找到wsdl2java所生成的类中,一个继承了Service的类,该类的实例可以当成工厂类来使用。
4、调用Service子类的实例getXXXXport方法,返回远程Web Service的代理。
代码如下所示:
package onyas; import com.onyas.ws.cxf.HelloWorld; import com.onyas.ws.cxf.impl.HelloWorldWs; public class ClentMain { public static void main(String[] args) { HelloWorldWs factory = new HelloWorldWs(); //此处返回的只是远程Web Service的代理 HelloWorld hw = factory.getHelloWorldWsPort(); System.out.println(hw.sayHi("Test")); } }
5、运行客户端,如果显示“Hello TestFri May 02 13:42:20 CST 2014”,表示运行成功
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
可能出现的错误:
cxf在客户端调用时报这个错误:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Cannot create a secure XMLInputFactory
at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:171)
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:94)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:240)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:210)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:103)
at $Proxy29.sayHi(Unknown Source)
at onyas.ClentMain.main(ClentMain.java:13)
同时cxf在服务端报这个错误:
java.lang.RuntimeException: Cannot create a secure XMLInputFactory
解决办法:
原因是少了一个叫woodstox-core-asl-4.2.0.jar的jar包,添加该jar包,并加到add to build path即可(我用的是apache-cxf-2.7.9)
java.lang.NoClassDefFoundError: org/codehaus/stax2/XMLOutputFactory2
解决办法:
原因是少了一个叫stax2-api-3.1.1.jar的jar包,添加该jar包,并加到add to build path即可(我用的是apache-cxf-2.7.9)
注意:要重启服务器端,并且重新生成客户端代码。
代码下载
相关文章推荐
- 使用CXF开发WebService程序的总结(四):基于bean的客户端和服务端代码的编写
- 聊天客户端和服务端开发过程中遇到的问题:
- iOS推送小结(证书的生成、客户端的开发、服务端的开发)
- Ajax能让客户端跟服务端的交互的开发技术
- 通过eclipse 的axis1插件,快速开发webservice服务端和客户端
- Android-网络交互之客户端请求服务端资源-stoneson的专栏-  -  棒槌网@Android开发论坛 - Powered by phpwind
- 微信支付——调用微信客户端支付之【服务端】开发详解
- iOS开发推送--客户端 服务端
- 2.WSDL、服务端已经开发好,客户端动态调用服务端开放的服务
- restful接口客户端和服务端开发,HttpURLConnection,HttpClient,post ,get方式调用
- wsdl 生成java服务端代码开发,客户端请求,服务端返回错误XXX are not understood解决方法
- iOS推送小结(证书的生成、客户端的开发、服务端的开发)
- wpf自己独立开发进销存服务端与客户端
- 应用Python开发WebService服务端及客户端
- Linux平台下基于C语言使用gSOAP开发Web Service服务端和客户端程序
- 简单服务端和客户端的开发
- 微信支付——调用微信客户端支付之【服务端】开发详解
- 使用GSoap开发WebService客户端与服务端
- 【转-整理】Java 对外接口开发(http)服务端-客户端
- 〖Linux〗Qt+gsoap开发客户端程序,服务端地址设定的字符串转换处理