WebService CXF学习
- 格式:doc
- 大小:710.50 KB
- 文档页数:57
WebService CXF学习(入门篇1):CXF由来WebService介绍WebService让一个程序可以透明地调用互联网程序,不用管具体的实现细节。
只要WebService公开了服务接口,远程客户端就可以调用服务。
WebService是基于http协议的组件服务,WebService是分散式应用程序的发展趋势。
WebService的开源实现WebService更多是一种标准,而不是一种具体的技术。
不同的平台,不同的语言大都提供WebService的开发实现。
在JA VA领域,WebService的框架很多,例如:AXIS,XFire,CXF等。
AXIS,XFire相对比较成熟,资料相对较多。
在这里我们只对CXF进行讲解,其他大家想学习到互联网找相关资料学习。
CXF框架由来ApacheCXF项目是由ObjectWeb Celtix和CodeHaus XFire合并成立。
ObjectWeb Celtix是由IONA公司赞助,于2005年成立的开源Java ESB产品,XFire则是业界知名的SOAP堆栈。
合并后的ApacheCXF融合该两个开源项目的功能精华,提供了实现SOA所需要的核心ESB功能框架,包括SOA服务创建,服务路由,及一系列企业级QoS功能。
ApacheCXF架框的目标1.概述<>高性能<>可扩展<>直观易用2.支持标准<> JAX-WS, JSR-181, SAAJ, JAX-RS<> SOAP 1.1, 1.2, WS-I BasicProfile, WS-Security, WS-Addressing, WS-RM, WS-Policy<> WSDL 1.1<> MTOM3.传输方式,绑定,数据绑定,传送数据格式<> 绑定: SOAP, REST/HTTP<> 数据绑定: JAXB 2.x, Aegis, XMLBeans, SDO<> 传送数据格式: XML, JSON, FastInfoset<> 传输方式: HTTP, Servlet, JMS4.部署灵活<> 轻量级: 可以将服务部署到Tomcat或其支持Spring的容器中<> JBI整合: 部署一个服务引擎到JBI容器,例如:ServiceMix, OpenESB or Petals<> J2EE集成: 可以将服务部署到J2EE应用服务器上,例如:Geronimo, JOnAS, JBoss, WebLogic, 及WebSphere<> Java 客户端/服务端可以独立性5.支持多种编程语言<> 完全支持JAX-WS 2.x 客户端/服务端模式<> JAX-WS 2.x synchronous, asynchronous and one-way API's<> JAX-WS 2.x Dynamic Invocation Interface (DII) API<> 支持wrapped and non-wrapped 数据格式<> XML messaging API<> 支持JavaScript 和ECMAScript 4 XML (E4X)<> 支持CORBA<> 支持JBI及ServiceMix6.可编程环境<> Java to WSDL<> WSDL to Java<> XSD to WSDL<> WSDL to XML<> WSDL to SOAP<> WSDL to serviceWebService CXF学习(入门篇2):HelloWorld理论联系实际,单单只讲理论那就成了纸上谈兵,用一个HelloWorld Demo可来说明事更加直观。
那下面咱们就开始进行讲解:首先到apache官方网下载apache-cxf-2.2.2,地址:/新建一个Java Project,导入cxf常用.jar包Java代码mons-logging-1.1.1.jar2.geronimo-activation_1.1_spec-1.0.2.jar (or Sun's Activation jar)3.geronimo-annotation_1.0_spec-1.1.1.jar (JSR 250)4.geronimo-javamail_1.4_spec-1.6.jar (or Sun's JavaMail jar)5.geronimo-servlet_2.5_spec-1.2.jar (or Sun's Servlet jar)6.geronimo-ws-metadata_2.0_spec-1.1.2.jar (JSR 181)7.geronimo-jaxws_2.1_spec-1.0.jar (or Sun's jaxws-api-2.1.jar)8.geronimo-stax-api_1.0_spec-1.0.1.jar (or other stax-api jar)9.jaxb-api-2.1.jar10.jaxb-impl-2.1.12.jar11.jetty-6.1.21.jar12.jetty-util-6.1.21.jar13.neethi-2.0.4.jar14.saaj-api-1.3.jar15.saaj-impl-1.3.2.jar16.wsdl4j-1.6.2.jar17.wstx-asl-3.2.8.jar18.XmlSchema-1.4.5.jar19.xml-resolver-1.2.jar20.cxf-2.2.2.jar接下就是HelloWorld Demo开发了第一步:新建一个webservice接口Java代码1.@WebService2.public interface IHelloWorld {3. //@WebParam给参数命名,提高可代码可读性。
此项可选4.blic String sayHi(@WebParam(name="text") String text);5.}通过注解@WebService申明为webservice接口第二步,实现WebService接口Java代码1.@WebService2. public class HelloWorldImpl implements IHelloWorld {3.4.public String sayHi(String name) {5. System.out.println("sayHello is called by " + name);6. return "Hello " + name;7.}8.9. }第三步,创建服务端Java代码1. public class Server {2.3.private Server(){4. IHelloWorld helloWorld = new HelloWorldImpl();5. //创建WebService服务工厂6. JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();7. //注册WebService接口8. factory.setServiceClass(IHelloWorld.class);9. //发布接口10. factory.setAddress("http://localhost:9000/HelloWorld");11. factory.setServiceBean(helloWorld);12. //创建WebService13. factory.create();14.};15.16.public static void main(String[] args) throws InterruptedException{17. //启动服务端18. new Server();19. System.out.println("Server ready...");20. //休眠一分钟,便于测试21. Thread.sleep(1000*60);22. System.out.println("Server exit...");23. System.exit(0);24.}25. }第四步,创建客户端Java代码1. public class Client {2.3.private Client(){};4.5.public static void main(String[] args){6. //创建WebService客户端代理工厂7. JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();8. //注册WebService接口9. factory.setServiceClass(HelloWorld.class);10. //设置WebService地址11. factory.setAddress("http://localhost:9000/HelloWorld");12. IHelloWorld iHelloWorld = (IHelloWorld)factory.create();13. System.out.println("invoke webservice...");14. System.out.println("message context is:"+iHelloWorld.sayHi("15. Josen"));16. System.exit(0);17.}18. }19.最后是万事俱备,只欠测试了首先,运行服务端程序其次,打开浏览器,在地址栏中输入http://localhost:9000/HelloWorld?wsdl(因为cxf自带了一个jetty服务器),查看接口是否发布成功,如里浏览器页面显示下面内容,证明接口发布成功Java代码1. <wsdl:definitions name="IHelloWorldService" targetNamespace="http://client.itdcl.com/">2.<wsdl:types>3.<xsd:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="/">4.<xsd:element name="sayHi" type="tns:sayHi"/>5.<xsd:complexType name="sayHi">6.<xsd:sequence>7.<xsd:element minOccurs="0" name="text" type="xsd:string"/>8.</xsd:sequence>9.</xsd:complexType>10.<xsd:element name="sayHiResponse" type="tns:sayHiResponse"/>11.<xsd:complexType name="sayHiResponse">12.<xsd:sequence>13.<xsd:element minOccurs="0" name="return" type="xsd:string"/>14.</xsd:sequence>15.</xsd:complexType>16.</xsd:schema>17.</wsdl:types>18.<wsdl:message name="sayHi">19.<wsdl:part element="tns:sayHi" name="parameters">20. </wsdl:part>21.</wsdl:message>22.<wsdl:message name="sayHiResponse">23.<wsdl:part element="tns:sayHiResponse" name="parameters">24. </wsdl:part>25.</wsdl:message>26.<wsdl:portType name="IHelloWorld">27.<wsdl:operation name="sayHi">28.<wsdl:input message="tns:sayHi" name="sayHi">29. </wsdl:input>30.<wsdl:output message="tns:sayHiResponse" name="sayHiResponse">31. </wsdl:output>32.</wsdl:operation>33.</wsdl:portType>34.<wsdl:binding name="IHelloWorldServiceSoapBinding" type="tns:IHelloWorld">35.<soap:binding style="document" transport="/soap/http"/>36.<wsdl:operation name="sayHi">37.<soap:operation soapAction="" style="document"/>38.<wsdl:input name="sayHi">39.<soap:body use="literal"/>40.</wsdl:input>41.<wsdl:output name="sayHiResponse">42.<soap:body use="literal"/>43.</wsdl:output>44.</wsdl:operation>45.</wsdl:binding>46.<wsdl:service name="IHelloWorldService">47.<wsdl:port binding="tns:IHelloWorldServiceSoapBinding" name="IHelloWorldPort">48.<soap:address location="http://localhost:9000/HelloWorld"/>49.</wsdl:port>50.</wsdl:service>51.</wsdl:definitions>最后,运行客户端程序,看看效果如果。