jax-ws(jws)

LandryBean 2015-01-16

JavaSE6封装了JAX-WS(JavaAPIforXML-WebServices),而JAX-WS同时支持基于SOAP的Web服务和REST风格的Web服务。JAX-WS通常可简写为JWS,当前,JWS的版本为2.x。

基于SOAP的Web服务可用单个Java类的实现,但是最好是用“接口+实现”的方式来实现最佳。

Web服务的接口称为SEI,即ServiceEndpointInterface;

而Web服务的实现称为SIB,即ServiceImplementationBean。

SIB可以是一个POJO,也可以是无状态的会话EJB。本文的SIB是普通Java类,通过JDK6的类库即可实现Web服务的发布。

在JAX-WS中,WebService操作调用表现为以XML为基础的协议如SOAP协议。SOAP定义了封装架构,编码规则以及WebService中调用和回应表现的规则。这些调用和回应在HTTP基础上以SOAP规范的消息进行传递。

尽管SOAP协议是很复杂的,但是JAX-WS隐藏了开发人员面对的复杂性。在服务器端,开发者可以通过在使用java语言接口中定义方法来制定WebService。开发者可以编写一个或者多个类来实现这些方法。客户端程序也很容易编写。客户端会创建一个代理(表现服务器端的本地对象)并且简单的调用代理中的方法即可。在JAX-WS中,开发者不必去创建和解析SOAP消息。JAX-WS运行系统会自动完成调用和回应之间SAOP消息的转换。

使用JAX-WS,客户端和服务器端都有一个很大的优势:java编程语言的平台独立性。此外,JAX-WS并不限制:JAX-WS客户端程序可以访问不运行在java平台上的WebServicce。这种灵活性是由于WebService采用了W3C定义的技术规范:Http,SOAP,WSDL。

以上摘自http://blog.csdn.net/qiudawei115/article/details/1916994

JAXWS适合几乎所有Webservice客户端的调用,因此不少巨头型的厂商如:IBM,Weblogic等,在他们的产品上都使用了以JAXWS为标准的Webservice接口。

Webservice进行总结、比较,最终觉得jaxws是目前最标准,需要额外第三方插件最少,配置最少最灵活的webservice。

JAX-WS(JavaAPIforXMLWebServices)是一组专门用于实现XMLWebServices的JavaAPI。JDK1.6自带JAX-WS版本为2.1。不过,JAX-WS只提供webservices的基础功能,所以如果你希望实现webservices的复杂功能,比如WS-Security,WS-Policy,WS-RM等,那就需要切换到ApacheCXF、Metro或者Axis。

可以采用以下两种方法之一开发Web服务:

契约优先:从WSDL契约着手,生成Java类来实现服务。

代码优先:从Java类着手,使用Annotation来生成WSDL文件和Java接口。

wsimport

wsimport是在JDK的bin目录下的一个exe文件(Windows版),主要功能是根据服务端发布的wsdl文件生成客户端存根及框架,负责与WebService服务器通信,并在将其封装成实例,客户端可以直接使用,就像使用本地实例一样。对Java而言,wsimport帮助程序员生成调用webservice所需要的客户端类文件.java和.class。要提醒指出的是,wsimport可以用于非Java的服务器端,如:服务器端也许是C#编写的webservice,通过wsimport则生成Java的客户端实现。

命令参数说明:

-d生成客户端执行类的class文件的存放目录

-s生成客户端执行类的源文件的存放目录

-p定义生成类的包名

-keep是否保留源文件

二种生成方式:

wsimport-keep-d./bin-s./src-pcom.test.wshttp://localhost:8088/hellowservice?wsdl

wsimport-keep-d./bin-s./src-pcom.test.ws./wsdl/HellowService.wsdl

wsgen

wsgen是在JDK的bin目录下的一个exe文件(Windows版),该命令的主要功能是用来生成合适的JAX-WS。它读取WebService的终端类文件,同时生成所有用于发布WebService所依赖的源代码文件和经过编译过的二进制类文件。这里要特别说明的是,通常在WebServiceBean中用到的异常类会另外生成一个描述Bean,如果WebServiceBean中的方法有申明抛出异常,这一步是必需的,否则服务器无法绑定该对像。此外,wsgen还能辅助生成WSDL和相关的xsd文件。wsgen从资源文件生成一个完整的操作列表并验证webservice是否合法,可以完整发布。

命令参数说明:

-cp定义classpath

-r生成bean的wsdl文件的存放目录

-s生成发布WebService的源代码文件的存放目录(如果方法有抛出异常,则会生成该异常的描述类源文件)

-d生成发布WebService的编译过的二进制类文件的存放目录(该异常的描述类的class文件)

范例:

计入项目目录:新建wsdl文件夹

执行命令

wsgen-cp./bin-r./wsdl-s./src-d./bin-wsdlserver.PlusImpl

即可生成wsdl文件与xsd文件

要想将服务部署到web容器中,如tomcat

则需要sun-jaxws.xml文件

<?xmlversion="1.0"encoding="UTF-8"?>

<endpointsxmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"

version="2.0">

<endpointname="calculator"implementation="test.CalculatorImpl"

url-pattern="/calculator"/>

</endpoints>

web.xml文件

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEweb-appPUBLIC"-//SunMicrosystems,

Inc.//DTDWebApplication2.3//EN"

"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

<web-app>

<listener>

<listener-class>

com.sun.xml.ws.transport.http.servlet.WSServletContextListener

</listener-class>

</listener>

<servlet>

<servlet-name>calculator</servlet-name>

<servlet-class>

com.sun.xml.ws.transport.http.servlet.WSServlet

</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>calculator</servlet-name>

<url-pattern>/calculator</url-pattern>

</servlet-mapping>

<session-config>

<session-timeout>120</session-timeout>

</session-config>

</web-app>

注意:需要下载相应的依赖包

http://jax-ws.java.net

service的函数名不能与类名称相同,否则生成相同文件名会被覆盖,导致报错

相关推荐