`
mj4d
  • 浏览: 301678 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JAX-WS:创建简单的webservice

阅读更多

1、什么是JAX-WS

JAX-WS (JavaTM API for XML-Based Web Services)规范是一组XML web services的JAVA API。JAX-WS允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web services。JAX-WS2.0 (JSR 224)是Sun新的web services协议栈,是一个完全基于标准的实现。在binding层,使用的是the Java Architecture for XML Binding (JAXB, JSR 222),在parsing层,使用的是the Streaming API for XML (StAX, JSR 173),同时它还完全支持schema规范。在JDK6.0之后已经整合到SDK中,所以我们以下的实例只需要在JDK6后即可,不需要再添加额外的依赖包

这是网上找到的JAX-WS的原理图

 

 

为了方便传送过来【以下内容来自http://blog.csdn.net/kkdelta/article/details/4017747

写道
1、客户端开发者通过URL得到WSDL文件。(通过HTTP访问可以得到,http://<endpoint-address>?wsdl)
2、客户端根据WSDL的描述,通过HTTP POST发送SOAP消息给服务器端。
3、服务器端Listener接受到SOAP请求消息,对JAVA来说,通常是一个servlet或者EJB。Listener把消息转发给 Dispatcher,有时候listener和Dispatcher也可能是同一个类。Dispatcher会把请求消息交给WebService的运行终端。
4、这时候,服务器端会将HTTP request转成服务器端的消息类型,形成javax.xml.ws.handler.MessageContext,并处理SOAP消息的头信息,如mustUnderstand。
5、如果在服务器端配置了handler,会调用handler的handleMessage方法,通常用handler来保存消息,解密或者保证消息到达的顺序。handler通过在@HandlerChain标注配置handlers.xml文件内容为:
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee"> 
  <handler-chain> 
       <handler> 
           <handler-name>WSSOAPHandler</handler-name> 
           <handler-class>com.cxf.test.WSSOAPHandler</handler-class> 
           </handler> 
       </handler-chain> 
   <handler-chain> 
   <handler> 
       <handler-name>WSHandler</handler-name> 
       <handler-class>com.cxf.test.WSHandler</handler-class> 
     </handler> 
   </handler-chain> 
</handler-chains> 
 
6、SOAP消息被反序列化为JAVA对象,传到真正的实现业务的类。
7、调用真正的业务方法,执行后利用JAXB注解序列化成SOAP返回消息。
8、如果配置了handler,会调用handler的handleMessage方法。如果业务方法有异常抛出,把异常转为SOAP fault 消息。
9、Listener通过HTTP把response返回给客户端。
总体来讲:整个过程是一个Requset XML(SOAP)-->JAXB-->JAVA Object-->JAXB-->Response XML(SOAP)的过程

  

2、从一个例子开始

只需要几个简单的annotation即可发布一个基于JAX-WS的webservice服务:

@WebService
public interface HelloJAXWS {

    public String sayHello();
}

@WebService
public class HelloJAXWSImpl implements HelloJAXWS {

    @WebMethod
    public String sayHello() {
        return "Hello, JAX-WS";
    }

}

在一个main函数中发布该服务:

Endpoint.publish("http://localhost:8080/service/helloJaxWs", new HelloJAXWSImpl());

这样我们就可以在浏览器通过上面的URL访问:

http://localhost:8080/service/helloJaxWs?wsdl

如果看到返回的xml格式的文档表示我们就发布成功。

下面来看看客户端代码,在JDK中也提供了相应的工具来根据wsdl生成客户端代码这就是wsimport,可以通过wsimport -help来查看相应的参数。这里采用了以下几个参数

wsimport -verbose -p com.sample.sws.ws -keep http://localhost:8080/service/helloJaxWs?wsdl
-verbose 显示编译的信息
-p 指定客户端package
-keep 保存生成客户端的源文件和编译好的class文件

在指定的package下就可以看到生成的service代理类,当然具体的类名会根据之前@WebService()后的参数设置,比如我server端的服务类声明如下:

@WebService(serviceName = "helloJaxWsService", endpointInterface = "org.ws.server.ws.chap1.impl.HelloJAXWSImpl")
@SOAPBinding(style = Style.DOCUMENT)

生成的客户端代理类也是根据上面的serviceName来HelloJaxWsService

下面是客户端调用的代码

HelloJAXWSImpl hellpJaxWs = new HelloJaxWsService().getHelloJAXWSImplPort();
System.out.println(hellpJaxWs.sayHello());

这样就完成了一个创建webservice->发布->生成客户端代码->客户端调用的整个过程

 

3、传递复杂对象

从上面2中的例子是返回String对象,其实JAX-WS原生对复杂对象都有很好的支持,如我们一些业务上的PO或List对象等。下面来看一个例子:

@WebService
public interface JaxWsService {

    public Address getAddress(String id);

    public Person getPerson(String id);

    List<Address> getAddressList(Address address);
}

这里申明了Address和Person对象,其中Person包含一个List<Address>属性:

public class Person implements Serializable {
    private static final long serialVersionUID = 8336803120311071811L;

    private String            username;
    private Date              birthday;
    private List<Address>     addresses;
       //以下省略若干
}

public class Address implements Serializable {

    private static final long serialVersionUID = 5038515089191304705L;
    private String            street;
    private String            city;
    private int               port;
       //以下省略若干
}

在对上面的接口做简单的实现,按照上面的流程生成客户端代码调用即可达到预期的效果。这里不在赘述例子可见代码,这里想要说明的是JAX-WS中对大多数普通对象不需要做任何处理即可传输

 

4、wsimport与wsgen

这两个工具位于$JAVA_HOME$/bin目录

  • wsimport 前面已经用到这个工具,用来解析一个存在的WSDL文档,生成客户端代码。通过wsimport查询参数或者http://jax-ws.java.net/jax-ws-ea3/docs/wsimport.html
  • wsgen 工具还可以用来从一个Web服务中生成对应的WSDL文档

@WebService
public class JaxWsWebServiceImpl implements JaxWsWebService {

    @WebMethod
    public @WebResult
    String getMessage() {
        return "Hello";
    }

}
H:\git\webservice\sws\sws-server\target\classes>wsgen -verbose -keep -cp "." -wsdl org.ws.server.ws.chap8.impl.JaxWsWebServiceImpl
生成6个文件:
JaxWsWebServiceImplService.wsdl
JaxWsWebServiceImplService_schema1.xsd
org\ws\server\ws\chap8\impl\jaxws\GetMessage.java
org\ws\server\ws\chap8\impl\jaxws\GetMessage.class
org\ws\server\ws\chap8\impl\jaxws\GetMessageResponse.java
org\ws\server\ws\chap8\impl\jaxws\GetMessageResponse.class

 详情介绍见这里 

5、Endpoint.publish初探

从上面我们知道发布一个webservice我们只需要通过

public static Endpoint publish(String address, Object implementor)

即可,其实这后面依赖于JavaSE6提供了一个轻量级的HttpServer。位于rt.jar下的com.sun.net.httpserver,具体可见这里同时这里还有一个小实例

分享到:
评论

相关推荐

    如何基于JAX-WS开发一个WebService实例

    JAX-WS提供了一种简单的方式来创建SOAP(Simple Object Access Protocol)Web服务,它集成了Java SE和Java EE平台,使得开发者可以方便地实现服务接口和服务实现,然后通过工具自动生成WSDL(Web Service ...

    Jax-ws所需要的JAR包

    例如,一个简单的JAX-WS服务可能如下所示: ```java import javax.jws.WebService; import javax.jws.WebMethod; import javax.jws.WebParam; @WebService(serviceName = "HelloWorldService") public class ...

    jax-ws api jar包

    JAX-WS(Java API for XML Web Services)是Java平台标准版(Java SE)和企业版(Java EE)的一部分,它为创建、部署和消费基于SOAP(Simple Object Access Protocol)的Web服务提供了全面的支持。JAX-WS允许开发者...

    MyEclipse基于JAX-WS开发Webservice+WebserviceClient客户端调用.zip

    在这个压缩包中,"MyEclipse6.5上基于JAX-WS开发Webservice+WebserviceClient客户端调用.doc"很可能是一份详细的步骤指南,涵盖了如何在MyEclipse 6.5版本中使用JAX-WS创建Web服务,以及如何生成和使用客户端代码来...

    webservice之jax-ws

    【标题】:Web服务之Java API for XML Web Services (JAX-WS) 【内容详解】 JAX-WS,全称为Java API for XML Web Services,是Java平台上的一个标准,用于构建和部署基于SOAP(Simple Object Access Protocol)的...

    java WebService Jax-WS创建

    在【MyEclipse中创建WebService的方法文档】中,主要步骤如下: 1. **新建Web Service Project**:首先,我们需要在MyEclipse中创建一个新的Web Service Project。这可以通过File -&gt; New -&gt; Web Service Project ...

    jax-ws实现webservice调用

    **Java API for XML Web ...在"HelloServer"这个示例中,我们可以看到一个基本的JAX-WS服务端实现,它演示了如何发布一个简单的"Hello, World"服务。通过学习和实践,你将能够构建更复杂、功能丰富的Web服务应用。

    jax-ws创建webservice

    【jax-ws创建Web服务】 Java API for XML Web Services(jax-ws)是Java平台标准版(Java SE)和企业版(Java EE)的一部分,它为开发者提供了一种创建和消费Web服务的标准方式。jax-ws允许开发人员通过简单的编程...

    jax-ws发布webservice

    通过定义服务接口,实现服务逻辑,以及使用`Endpoint.publish()`发布服务,我们可以轻松地创建一个基于JAX-WS的Web服务。同时,利用`wsimport`工具生成客户端代码,可以方便地进行服务调用。在"jax-ws-server"和"jax...

    jax-ws webservice简单demo

    在这个"jax-ws webservice简单demo"中,我们将探讨JAX-WS的基础知识、如何创建一个简单的Web服务以及如何测试这个服务。 首先,JAX-WS的核心组件包括: 1. **Service端点接口(SEI, Service Endpoint Interface)**...

    JAX-WS2.0 API

    JAX-WS(Java API for XML Web Services)2.0 API 是Java平台上的一个标准接口,用于创建和消费Web服务。它提供了一种简单、类型安全且与平台无关的方式来实现基于SOAP(Simple Object Access Protocol)的Web服务。...

    jax-ws WebService客户端与服务端工程.rar

    这个"jax-ws WebService客户端与服务端工程.rar"压缩包文件包含了一个完整的示例,展示了如何使用JAX-WS创建和消费Web服务。让我们深入探讨一下JAX-WS的核心概念和技术。 1. **Web服务基础**: - **SOAP(Simple ...

    基于JAX-WS2.2开发WebService所需jar资源包

    使用 Eclipse JavaEE 开发 WebService 时,若选择手动创建原生的JAX-WS服务,需要导入此jar资源(教程详见我的博文https://blog.csdn.net/weixin_50604409/article/details/116399530)。 如果您同时装有 IntelliJ ...

    webservice Demo注解+jax-ws

    总的来说,“webservice Demo注解+jax-ws”是一个很好的学习资源,帮助初学者了解如何使用Java注解和JAX-WS来创建、部署和使用Web服务。通过阅读提供的文档和实践示例,你将能够深入理解Web服务的基本原理,并具备...

    metro-jax-ws-jaxws221x.zip

    这表明压缩包内包含了演示如何使用JAX-WS创建、部署和消费Web服务的代码样本。它涵盖了从基本的SOAP(Simple Object Access Protocol)通信到更复杂的XML数据绑定和WS-Security安全配置等各种功能。 JAX-WS是Java...

    jax-ws2.1.zip

    1. **webservices-api.jar** - 这个JAR文件包含了JAX-WS的API接口定义,它定义了开发者用来创建和消费Web服务的类和接口。这些接口包括`javax.jws.WebService`注解,用于标记服务端点,以及`javax.xml.ws.Service`,...

    JAX-WS低版本

    **描述分析:** 描述提到“tomcat+webservice实现简单的web服务远程调用接口,所需的jar”,这暗示了在Apache Tomcat服务器上,我们将会使用JAX-WS来构建一个可以通过网络调用的Web服务接口。"所需的jar"是指为了...

    jax-ws jax-rs 分别创建soap和restful类型的webservice

    以下是使用JAX-WS创建SOAP Web服务的基本步骤: 1. **定义服务接口**:使用Java SE中的`@WebService`注解定义服务接口,这个接口将代表Web服务的契约。 2. **实现服务接口**:编写接口的实现类,提供具体的服务功能...

    学习JAX-WSWebService开发

    它提供了一种简单、类型安全的方式来创建、调用Web服务,并且与Java SE和Java EE环境紧密集成。在本教程中,我们将深入探讨JAX-WS的核心概念、开发流程以及如何在MyEclipse集成开发环境中实现Web服务。 首先,让...

    JAX-WS + Spring 实现webService示例.docx

    本示例展示了如何利用JAX-WS和Spring框架创建一个简单的Web服务。关键点在于利用Maven管理依赖,通过Spring的依赖注入管理业务逻辑,以及使用Spring的XML配置文件来设置Web服务的端点。这不仅简化了开发过程,也提高...

Global site tag (gtag.js) - Google Analytics