基于JAX-WS 设计开发WebService_第1页
基于JAX-WS 设计开发WebService_第2页
基于JAX-WS 设计开发WebService_第3页
基于JAX-WS 设计开发WebService_第4页
基于JAX-WS 设计开发WebService_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于JAX-WS开发

WebService2008-05-06基于JAX-WS设计开发WebServiceJAX-WS概述JAX-WS发展历史(JAX-WS2.0与JAX-RPC1.1的比较)如何基于JAX-WSAPI开发WebService(ApacheCXF基础)JAX-WS概述

什么是JAX-WS?为何使用JAX-WS?JAX-WS概述

JAX-WS(JavaAPIforXML-BasedWebServices)JAX-WS是Java社区(JCP)的工作成果(JSR224),它为客户机端和服务器端的WebService实现提供通用的应用程序编程接口(API)。通过采用一个面向Web服务的标准API,旨在帮助服务用户(客户机)和服务实现者获得最大程度的标准性和灵活性。JAX-WS发展历史WebService出现以来。首先是SOAP,但SOAP仅描述消息的情况,然后是WSDL,WSDL并不会告诉您如何使用Java™编写Web服务。在这种情况下,JAX-RPC1.0应运而生。经过数月使用之后,编写此规范的JavaCommunityProcess(JCP)人员认识到需要对其进行一些调整,调整的结果就是JAX-RPC1.1。该规范使用大约一年之后,JCP人员希望构建一个更好的版本:JAX-RPC2.0。其主要目标是与行业方向保持一致,但行业中不仅只使用RPCWeb服务,还使用面向消息的Web服务。因此从名称中去掉了“RPC”,取而代之的是“WS”(当然表示的是Web服务)。因此JAX-RPC1.1的后续版本是JAX-WS2.0——JavaAPIforXML-basedWebservices。JAX-WS2.0与JAX-RPC1.1的比较哪些内容保持不变?JAX-WS2.0仍然支持SOAP1.1overHTTP1.1,因此互操作性将不会受到影响。JAX-WS2.0仍然支持WSDL1.1,因此WSDL1.1的相关规范仍然适用。JAX-WS2.0与JAX-RPC1.1的比较区别和变化:SOAP1.2

JAX-RPC和JAX-WS都支持SOAP1.1。JAX-WS还支持SOAP1.2。XML/HTTP

WSDL1.1规范在HTTP绑定中定义,这意味着利用此规范可以在不使用SOAP的情况下通过HTTP发送XML消息。JAX-RPC忽略了HTTP绑定。而JAX-WS添加了对其的支持。WS-IBasicProfile

JAX-RPC支持WS-IBasicProfile(BP)V1.0,JAX-WS支持BP1.1。(WS-I即Web服务互操作性组织。)新Java功能JAX-RPC映射到Java1.4,JAX-WS映射到Java5.0。JAX-WS依赖于Java5.0中的很多新功能。JavaEE5是J2EE1.4的后续版本,添加了对JAX-WS的支持,但仍然支持JAX-RPC。JAX-WS2.0与JAX-RPC1.1的比较数据映射模型JAX-RPC具有自己的映射模型,此模型大约涵盖了所有模式类型中的90%。JAX-WS的数据映射模型是JAXB。JAXB可保证所有XML模式的映射。接口映射模型

JAX-WS的基本接口映射模型与JAX-RPC的区别并不大,不过二者之间存在以下差异:JAX-WS的模型使用新的Java5.0特性Annotations

。JAX-WS的模型引入了异步功能。动态编程模型JAX-WS的动态客户机模型与JAX-RPC的对应模型差别很大。很多更改都是为了认可行业需求:引入了面向消息的功能。引入了动态异步功能。JAX-WS还添加了动态服务器模型,而JAX-RPC则没有此模型。消息传输优化机制(MessageTransmissionOptimizationMechanism,MTOM)JAX-WS通过JAXB添加了对新附件规范MTOM的支持。基于JAX-WSAPI开发WebServiceJAX-WS两种开发方式JAX-WS客户端开发APIsJAX-WS服务端开发APIsJAX-WS两种开发方式

契约优先(WSDLFirst):从WSDL着手,生成Java类来实现服务。代码优先(JAVAFirst):从Java类着手,使用Annotation来生成WSDL文件和Java接口。契约优先(WSDLFirst)基于ApacheCXF实现JAX-WS2.0WebService的WSDLFirst开发模式ApacheCXF基础ApacheCXF基础ApacheCXF简介:

ApacheCXF:AnOpenSourceServiceFrameworkApacheCXF是一个Service框架,它简化了Service的创建,

实现了JAX-WS2.0规范,并通过了JAX-WS2.0TCK;

CXF和Spring无缝集成;ApacheCXF基础ApacheCXF功能特性支持多种标准支持

JAX-WS、

JAX-WSA、JSR-181和

SAAJ;支持

SOAP1.1、1.2、WS-IBasicProfile、WS-Security、WS-Addressing、WS-RM和

WS-Policy;支持

WSDL1.1、2.0;支持

MTOM;多种传输方式、Bindings、DataBindings和

FormatBindings:SOAP、REST/HTTP;DataBndings:目前支持

JAXB2.0、Aegis两种,默认是

JAXB2.0。XMLBeans、Castor和

JiBX数据绑定方式将在

CXF2.1版本中得到支持;格式(Format):XML、JSON;传输方式:HTTP、Servlet、JMS和

Jabber;可扩展的

API允许为

CXF增加其它的

Bindings,以能够支持其它的消息格式,比如:CSV和固定记录长度。ApacheCXF基础ApacheCXF功能特性灵活部署轻量级容器:可在

Tomcat或基于

Spring的容器中部署

Services;集成

JBI:可以在如

ServiceMix,OpenESBorPetals等等的

JBI容器中将它部署为一个服务引擎;集成

SCA:可以部署在如

Tuscany之类的

SCA容器中;集成

J2EE:可以在

J2EE应用服务器中部署

Services,比如:Geronimo、JOnAS、JBoss、WebSphereApplicationServer和

WebLogicApplicationServer,以及

Jetty和

Tomcat;独立的

Java客户端/服务器。支持多种编程语言全面支持

JAX-WS2.0客户端/服务器编程模型;支持

JAX-WS2.0synchronous、asynchronous和

one-wayAPI's;支持

JAX-WS2.0DynamicInvocationInterface(DII)API;支持

wrappedandnon-wrapped风格;支持

XMLmessagingAPI;支持

JavaScript和

ECMAScript4XML(E4X),客户端与服务端均支持;通过

Yoko支持

CORBA;通过

Tuscany支持

SCA;通过

ServiceMix支持

JBI;契约优先(WSDLFirst)完成WSDL文件示例:AccountManagerService.wsdlWSDL文件WSDL文件WSDL文件WSDL文件契约优先(WSDLFirst)利用ApacheCXF的WSDL2JAVA工具生成java类注意:环境变量path增加:%CXF_HOME%\bin输入命令:D:\workspace\wsdl>wsdl2java-client-dSrcDirAccountManagerService.wsdl契约优先(WSDLFirst)生成代码列表:契约优先(WSDLFirst)分析生成JAVA类根据生成PortType接口类编写具体服务实现类(Server端)根据生成的客户端binding测试类来测试具体服务契约优先(WSDLFirst)分析生成JAVA类1、根据WSDL中不同Name的Message节点,生成对应类型的Schema的类:CheckBalance.java,CheckBalanceResponse.javaWithdraw.java,WithdrawResponse.java示例:分析生成JAVA类2、根据WSDL中PortType节点,生成对应类型的JAVA类:示例:分析生成JAVA类

3、生成对象工厂类ObjectFactory.java和包信息类package-info.java契约优先(WSDLFirst)4、生成客户端访问服务的Service类AccountManagerService.java该类继承:javax.xml.ws.Service契约优先(WSDLFirst)5、根据WSDL中不同的binding生成客户端访问服务的测试类:AccountManagerServicePortType_AccountManagerServiceSOAP11PortHttp_Client.javaAccountManagerServicePortType_AccountManagerServiceSOAP12PortHttp_Client.javaAccountManagerServicePortType_AccountManagerServiceHttpport_Client.java示例:契约优先(WSDLFirst)契约优先(WSDLFirst)根据生成PortType接口类编写具体服务实现类(Server端)1、编写服务实现类:AccountManagerServiceImpl.java该类实现接口AccountManagerServicePortType.java契约优先(WSDLFirst)根据生成PortType接口类编写具体服务实现类(Server端)2、编写服务启动类Server.java,运行该类启动发布服务;使用javax.xml.ws.Endpoint类的publish方法示例:契约优先(WSDLFirst)根据生成的客户端binding测试类来测试具体服务运行测试类对服务进行访问:AccountManagerServicePortType_AccountManagerServiceSOAP11PortHttp_Client.java基于JAX-WSAPI开发WebServiceJAX-WS客户端APIsJAX-WS服务端APIs基于JAX-WSAPI开发WebServiceJAX-WS客户端APIsjavax.xml.ws.Servicejavax.xml.ws.BindingProviderjavax.xml.ws.Dispatch基于JAX-WSAPI开发WebServicejavax.xml.ws.ServiceService类提供对WebService的客户端访问方法主要方法:构造方法:Service(.URL

wsdlDocumentLocation,space.QName

serviceName)addPort(space.QName

portName,java.lang.String

bindingId,java.lang.String

endpointAddress)create(.URL

wsdlDocumentLocation,space.QName

serviceName)

getPort(java.lang.Class<T>

serviceEndpointInterface)createDispatch(EndpointReference

endpointReference,java.lang.Class<T>

type,Service.Mode

mode,WebServiceFeaturefeatures)setExecutor(java.util.concurrent.Executor

executor)setHandlerResolver(HandlerResolver

handlerResolver)javax.xml.ws.Service

示例1:privatestaticfinalQNameSERVICE_NAME=newQName("http://server.java_first_jaxws.hw.demo/","HelloWorld");privatestaticfinalQNamePORT_NAME=newQName("http://server.java_first_jaxws.hw.demo/","HelloWorldPort");

Serviceservice=Service.create(SERVICE_NAME);//EndpointAddressStringendpointAddress="http://localhost:9000/helloWorld";//AddaporttotheServiceservice.addPort(PORT_NAME,SOAPBinding.SOAP11HTTP_BINDING,endpointAddress);

HelloWorldhw=service.getPort(HelloWorld.class);System.out.println(hw.sayHi("World"));javax.xml.ws.Service示例2:

URLwsdlLocation=newURL("/my.wsdl");QNameserviceName=newQName("/sample","MyService");Services=Service.create(wsdlLocation,serviceName);HelloWorldhw=service.getPort(HelloWorld.class);System.out.println(hw.sayHi("World"));基于JAX-WSAPI开发WebServicejavax.xml.ws.BindingProviderTheBindingProviderinterfaceprovidesaccesstotheprotocolbindingandassociatedcontextobjectsforrequestandresponsemessageprocessing.javax.xml.ws.BindingProvider示例:javax.xml.ws.Serviceservice=...;com.example.StockQuoteProviderproxy=service.getPort(portName,com.example.StockQuoteProvider.class)javax.xml.ws.BindingProviderbp=(javax.xml.ws.BindingProvider)proxy;Map<String,Object>co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论