JAVA6开发WebService (一)
2014-04-22 13:53
330 查看
转载自http://wuhongyu.iteye.com/blog/807470
WebService是SOA的一种较好的实现方式,它将应用程序的不同功能单元通过中立的契约(独立于硬件平台、操作系统和编程语言)联系起来,使得各种形式的功能单元更好的集成。
W3C对他的定义是:
AWebserviceisasoftwaresystemdesignedtosupportinteroperablemachine-to-machineinteractionoveranetwork.Ithasaninterfacedescribedinamachine-processableformat(specificallyWSDL).OthersystemsinteractwiththeWebserviceinamannerprescribedbyitsdescriptionusingSOAPmessages......"
Webservice是一个软件系统,为了支持跨网络的机器之间相互操作交互而设计。它有一个机器可识别的描述格式(特别是WSDL)。不同的系统之间可以通过SOAP消息在规定的方式下相互调用。(英文不好,请指正!)
简单的说,WebService是一种独立于特定语言、特定平台,基于网络的、分布式的模块化组件。是一个能够使用xml消息通过网络来访问的Interface,这个Interface描述了一组可访问的操作。
WebService一般分为两种:
REST式WebService,基于HTTP协议;
RPC式WebService,基于SOAP协议,不过SOAP也是基于HTTP传输的。
狭义上的WebService是指第二种RPC式的WebService,也就是我们常说的那种。
JAVA中有三种WebService规范,分别是JAX-WS(JAX-RPC)、JAX-RS、JAXM&SAAJ。
这里先说JAX-WS(JavaAPIForXML-WebService),JDK1.6自带的版本为JAX-WS2.1,其底层支持为JAXB。早期的JAVAWeb服务规范JAX-RPC(JavaAPIForXML-RemoteProcedureCall)目前已经被JAX-WS规范取代,JAX-WS是JAX-RPC的演进版本,但JAX-WS并不完全向后兼容JAX-RPC。
废话不多说了,先来写一个最简单的例子:
服务器端:
在想要发布为WebService的类上加上注解@WebService,这个类的方法就变为WebService的方法了,再通过Endpoint的publish方法,发布这个服务,到此,一个最简单的WebService搞定。运行main方法,在浏览器里输入”http://localhost:8080/com.why.webservice.Hello?wsdl“会看到你的WSDL信息。
不过需要注意一下,有的同学如果不加@SOAPBinding(style=SOAPBinding.Style.RPC)这行代码会报错:
com.sun.xml.internal.ws.model.RuntimeModelerException:runtimemodelererror:Wrapperclasscom.why.webservice.jaxws.SayHelloisnotfound.HaveyourunAPTtogeneratethem?
网上资料说只要将JDK升级到1.6u17就可以了,我直接升级到了1.6u22(1.6.0_22-b04),问题解决!
客户端:
在命令行输入命令wsimport-p[包名]-keep[发布的服务地址?wsdl]生成客户端代码,如生成本例的客户端代码”wsimport-pcom.why.client-keephttp://localhost:8080/com.why.webservice.Hello?wsdl“,当然,前提是你已经配好了JAVA环境变量。控制台会显示
利用这些生成的客户端代码,就可以调用这个WebService服务了:
WebService是SOA的一种较好的实现方式,它将应用程序的不同功能单元通过中立的契约(独立于硬件平台、操作系统和编程语言)联系起来,使得各种形式的功能单元更好的集成。
W3C对他的定义是:
AWebserviceisasoftwaresystemdesignedtosupportinteroperablemachine-to-machineinteractionoveranetwork.Ithasaninterfacedescribedinamachine-processableformat(specificallyWSDL).OthersystemsinteractwiththeWebserviceinamannerprescribedbyitsdescriptionusingSOAPmessages......"
Webservice是一个软件系统,为了支持跨网络的机器之间相互操作交互而设计。它有一个机器可识别的描述格式(特别是WSDL)。不同的系统之间可以通过SOAP消息在规定的方式下相互调用。(英文不好,请指正!)
简单的说,WebService是一种独立于特定语言、特定平台,基于网络的、分布式的模块化组件。是一个能够使用xml消息通过网络来访问的Interface,这个Interface描述了一组可访问的操作。
WebService一般分为两种:
REST式WebService,基于HTTP协议;
RPC式WebService,基于SOAP协议,不过SOAP也是基于HTTP传输的。
狭义上的WebService是指第二种RPC式的WebService,也就是我们常说的那种。
JAVA中有三种WebService规范,分别是JAX-WS(JAX-RPC)、JAX-RS、JAXM&SAAJ。
这里先说JAX-WS(JavaAPIForXML-WebService),JDK1.6自带的版本为JAX-WS2.1,其底层支持为JAXB。早期的JAVAWeb服务规范JAX-RPC(JavaAPIForXML-RemoteProcedureCall)目前已经被JAX-WS规范取代,JAX-WS是JAX-RPC的演进版本,但JAX-WS并不完全向后兼容JAX-RPC。
废话不多说了,先来写一个最简单的例子:
服务器端:
在想要发布为WebService的类上加上注解@WebService,这个类的方法就变为WebService的方法了,再通过Endpoint的publish方法,发布这个服务,到此,一个最简单的WebService搞定。运行main方法,在浏览器里输入”http://localhost:8080/com.why.webservice.Hello?wsdl“会看到你的WSDL信息。
不过需要注意一下,有的同学如果不加@SOAPBinding(style=SOAPBinding.Style.RPC)这行代码会报错:
com.sun.xml.internal.ws.model.RuntimeModelerException:runtimemodelererror:Wrapperclasscom.why.webservice.jaxws.SayHelloisnotfound.HaveyourunAPTtogeneratethem?
网上资料说只要将JDK升级到1.6u17就可以了,我直接升级到了1.6u22(1.6.0_22-b04),问题解决!
packagecom.why.webservice; importjavax.jws.WebService; importjavax.xml.ws.Endpoint; @WebService publicclassHello{ publicStringsayHello(Stringname){ return"Hello"+name; } publicstaticvoidmain(String[]args){ Endpoint.publish("http://localhost:8080/com.why.webservice.Hello",newHello()); System.out.println("Success"); } }
客户端:
在命令行输入命令wsimport-p[包名]-keep[发布的服务地址?wsdl]生成客户端代码,如生成本例的客户端代码”wsimport-pcom.why.client-keep
利用这些生成的客户端代码,就可以调用这个WebService服务了:
packagecom.why.client; publicclassHelloClient{ /** *@paramargs */ publicstaticvoidmain(String[]args){ Hellohello=newHelloService().getHelloPort(); Strings=hello.sayHello("why"); System.out.println(s); } }
相关文章推荐
- Java6开发WebService进阶
- JAVA6开发WebService (四)——SAAJ调用WebService
- 使用java6开发WebService服务端和客户端
- Java6开发WebService入门 [转]
- JAVA6开发WebService (一)
- JAVA6开发WebService (五)—— JAXB
- JAVA6开发WebService (二)——JAX-WS例子
- JAVA6开发WebService (一)
- Java6开发WebService进阶
- JAVA6开发WebService (四)——SAAJ调用WebService
- Java6开发WebService入门
- JAVA6开发WebService (五)—— JAXB
- JAVA6开发WebService (三)——几个概念
- JAVA6开发WebService (四)——SAAJ调用WebService
- JAVA6开发WebService (一)
- Java6上开发WebService
- Java6开发WebService入门
- Java6上开发WebService
- Java6上开发WebService
- Java6开发WebService进阶