`

使用JAX-WS构建Web Services

阅读更多

  JAX-WS简写为Java Api For Xml Web Service。JAX-WS是使用XML构建Web Service与Client进行交流通信的技术。 

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

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

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

如何创建一个Web Service和Client并将他们部署。 
  开发一个JAX-WS Web Service首先是要定义一个类标示了javax.jws.WebService注释。@WebService注释定义了一个Web Service终端。 

  Service终端接口或者Service终端实现(SEI)是一个java接口和类,其中定义了客户端可以调用的方法。建立一个JAX-WS终端时接口并不是必须的。Web Service实现类定义了SEI。 
你也可以通过向实现类的WebService注释中添加endpointInterface 元素来指定外部接口。之后你必须定义一个接口并且将其中需要实现的方法声明为public。 

创建Web Service和Client的步骤 
1.   编写实现类 
2.   编译实现类 
3.   添加部署Web Service必须的文件 
4.   打包成WAR 
5.   部署WAR文件 
6.   编写Client类 
7.   产生和编译连接到Service需要的文件 
8.   编译Client类 
9.   运行Client 

JAX-WS终端要求 
  实现类必须注释为javax.jws.WebService或者javax.jws.WebServiceProvider。 

  实现类可以参考通过WebService注释中的endpointInterface元素。但是这不是必须的。如果WebService注释中没有endpointInterface元素的话,SEI会默认的为实现类定义一个。 

  实现类的方法必须是public,不能使final或者static。 

  被暴露给Web Service Client的方法必须被注释为javax.jws.WebMethod。 

  实现类不能使final和abstract。 

  实现类必须有一个默认的构造函数。 

  实现类不能定义finalize方法。 

  实现类必须在他生命周期回调函数中必须用javax.annotation.PostConstruct或者javax.annotation.PreDestroy注释。 

  PostConstruct方法由容器在实现类开始向Web Service Client做出反应之前调用。 
  PreDestroy方法由容器在终端移出操作之前调用。 

编写Service终端实现类 
  在这个例子中,实现类Hello通过@WebService注释被定义为Service终端。Hello中有一个sayHello方法,被注释为@WebMethod。@WebMethod注释向Web Service Client暴露了被注释的方法。sayHello方法向客户段返回一通过参数name进行组装的问候字符串。这个实现类必须有一个默认的声明为public,无参数的构造函数。 

Java代码 复制代码
  1. package helloservice.endpoint;    
  2. import javax.jws.WebService;    
  3. @WebService    
  4. public class Hello {    
  5.  private String message = new String("Hello, ");    
  6.  public void Hello() {}    
  7.  @WebMethod    
  8.  public String sayHello(String name) {    
  9.   return message + name + ".";    
  10.  }    
  11. }   
package helloservice.endpoint; 
import javax.jws.WebService; 
@WebService 
public class Hello { 
 private String message = new String("Hello, "); 
 public void Hello() {} 
 @WebMethod 
 public String sayHello(String name) { 
  return message + name + "."; 
 } 
} 

 
简单的JAX-WS客户端 
  HelloClient是一个可以访问Hello对象的sayHello方法的独立的客户端程序。这个调用是通过一个本地对象port实现的,当然这个本地对象port是远程Service对象的一个代理。 

编写客户端程序 
1.   使用javax.xml.ws.WebServiceRef注释可以声明一个Web Service的参考。@WebServiceRef注释使用wsdlLocation元素指定一个已经部署的Service的wsdl的URI 
@WebServiceRef(wsdlLocation=http://localhost:8080/helloservice/hello?wsdl) 

2.   找回Service的代理,看作一个port,这是通过调用Service的一个函数getHelloPort实现的 
Hello port = service.getHelloPort(); 
Port实现了被service定义的SEI 

3.   调用port的sayHello方法,并传入一个参数name。 
String response = port.sayHello(name); 

类的实现如下 

Java代码 复制代码
  1. package simpleclient;    
  2.   
  3. import javax.xml.ws.WebServiceRef;    
  4. import helloservice.endpoint.HelloService;    

  1. import helloservice.endpoint.Hello;    
  2.   
  3.   
  4. public class HelloClient {    
  5.     @WebServiceRef(wsdlLocation = "http://localhost:8080/helloservice/hello?wsdl")    
  6.     static HelloService service;    
  7.   
  8.     /**   
  9.      * @param args the command line arguments   
  10.      */    
  11.     public static void main(String[] args) {    
  12.         try {    
  13.             HelloClient client = new HelloClient();    
  14.             client.doTest(args);    
  15.         } catch (Exception ex) {    
  16.             ex.printStackTrace();    
  17.         }    
  18.     }    
  19.   
  20.     public void doTest(String[] args) {    
  21.         try { // Call Web Service Operation    
  22.             System.out.println(    
  23.                     "Retrieving the port from the following service: "    
  24.                     + service);    
  25.   
  26.             Hello port = service.getHelloPort();    
  27.   
  28.             System.out.println("Invoking the sayHello operation on the port.");    
  29.   
  30.             String name;    
  31.   
  32.             if (args.length > 0) {    
  33.                 name = args[0];    
  34.             } else {    
  35.                 name = "No Name";    
  36.             }    
  37.   
  38.             String response = port.sayHello(name);    
  39.             System.out.println(response);    
  40.         } catch (Exception ex) {    
  41.             ex.printStackTrace();    
  42.         }    
  43.     }    
  44. }  
package simpleclient; 

import javax.xml.ws.WebServiceRef; 
import helloservice.endpoint.HelloService; 
import helloservice.endpoint.Hello; 


public class HelloClient { 
    @WebServiceRef(wsdlLocation = "http://localhost:8080/helloservice/hello?wsdl") 
    static HelloService service; 

    /** 
     * @param args the command line arguments 
     */ 
    public static void main(String[] args) { 
        try { 
            HelloClient client = new HelloClient(); 
            client.doTest(args); 
        } catch (Exception ex) { 
            ex.printStackTrace(); 
        } 
    } 

    public void doTest(String[] args) { 
        try { // Call Web Service Operation 
            System.out.println( 
                    "Retrieving the port from the following service: " 
                    + service); 

            Hello port = service.getHelloPort(); 

            System.out.println("Invoking the sayHello operation on the port."); 

            String name; 

            if (args.length > 0) { 
                name = args[0]; 
            } else { 
                name = "No Name"; 
            } 

            String response = port.sayHello(name); 
            System.out.println(response); 
        } catch (Exception ex) { 
            ex.printStackTrace(); 
        } 
    } 
}

 

 

 

分享到:
评论

相关推荐

    jax-rs jax-ws所需包,亲测可用

    2. **JAX-WS**(Java API for XML Web Services)是Java平台上的SOAP(Simple Object Access Protocol)Web服务标准,主要用于创建面向服务的架构(SOA)。JAX-WS提供了处理XML消息、WSDL(Web服务描述语言)和UDDI...

    Jax-ws所需要的JAR包

    Java API for XML Web Services(JAX-WS)是Java平台上用于构建和消费Web服务的标准API。它简化了创建和使用Web服务的过程,使得开发者能够通过SOAP消息与远程服务进行交互。JAX-WS允许开发者将服务接口直接映射到...

    jax-ws api jar包

    JAX-WS允许开发者以面向对象的方式构建Web服务,简化了Web服务开发过程,使得Java程序员可以更加便捷地实现服务接口和服务实现。 在给定的压缩包文件"jax-ws api jar包"中,包含的是JAX-WS 2.2.1版本的API库,即`...

    设计与开发 JAX-WS 2.0 Web 服务

    该技术提供了全面的支持,使得开发者能够在Java环境中轻松构建Web服务以及Web服务客户端。JAX-WS 2.0版本进一步提升了开发效率,增强了标准化程度,从而让Web服务更加易于开发和部署。 #### 使用 JAX-WS 的优势 - ...

    jax-ws发布webservice

    Java API for XML Web Services(JAX-WS)是Java平台上的一个标准,用于构建和部署Web服务。它简化了Web服务的开发,使得Java开发者能够更方便地创建、调用和部署SOAP(Simple Object Access Protocol)服务。在这个...

    jax-ws2.1.zip

    2. **webservices-extra.jar** - 此文件可能包含JAX-WS的一些扩展或额外功能,如WS-I(Web Services Interoperability)支持,或者对特定Web服务协议的实现,例如WS-Security(Web Services Security)或其他厂商...

    JAX-WS2.1用户指南

    通过提供强大的类型安全模型和与Java SE及Java EE平台的紧密集成,JAX-WS使得构建高效、可维护的Web服务成为可能。 2. **基本组件** - **服务端点接口(SEI)**: 定义了Web服务的操作,这些操作对应于SOAP消息中的...

    一个包含jax-ws和jax-rs的例子(含服务端和客户端)

    标题中的“一个包含jax-ws和jax-rs的例子(含服务端和客户端)”是指这是一个示例项目,它演示了如何使用Java API for XML Web Services (JAX-WS)和Java API for RESTful Web Services (JAX-RS)来创建和消费Web服务。...

    JAX-WS2.0 API

    **正文** JAX-WS(Java API for XML Web Services...总之,JAX-WS 2.0 API是Java平台开发SOAP Web服务的重要工具,通过其提供的丰富特性和简洁的编程模型,简化了Web服务的开发和使用,促进了分布式系统的构建和协作。

    webservice Demo注解+jax-ws

    JAX-WS使得开发人员能够通过简单的接口定义和注解来构建Web服务,从而简化了Web服务的开发过程。与早期的Java API for XML Processing (JAX-RPC)相比,JAX-WS更符合面向对象的设计原则,更易于使用。 在本示例中,...

    webservice之jax-ws

    JAX-WS,全称为Java API for XML Web Services,是Java平台上的一个标准,用于构建和部署基于SOAP(Simple Object Access Protocol)的Web服务。它是Java SE和Java EE平台的一部分,简化了开发人员在Web服务领域的...

    metro-jax-ws-jaxws221x.zip

    【标题】"metro-jax-ws-jaxws221x.zip" 提供的是一个关于JAX-WS(Java API for XML Web Services)的开发示例,其中包含了JAX-WS 2.2.1版本的相关组件和库文件。这个压缩包是针对Java开发者设计的,用于帮助他们理解...

    2012 - Java 7 JAX-WS Web Services - Packtpub

    《Java 7 JAX-WS Web Services》是一本专为希望利用Java 7中的JAX-WS技术构建Web服务的开发者编写的实用指南。本书由Packt Publishing出版,并由资深Java咨询专家Deepak Vohra撰写。该书深入浅出地介绍了如何在...

    JAX-WS API, JAX-RS API

    Java API for XML Web Services (JAX-WS) 是Java平台上的一个标准接口,用于创建和消费Web服务。它是Sun Microsystems在2004年推出的一个重要框架,旨在简化Web服务的开发,使得Java开发者能够更方便地实现基于SOAP...

    JAX-WS规范

    **JAX-WS规范详解** Java API for XML Web Services(JAX-WS)是Java平台上的一个标准,用于创建Web...通过理解其核心概念、工作流程以及与WSDL、JAXB的关系,开发者可以有效地利用JAX-WS构建高效、可靠的分布式系统。

    jax-ws创建webservice

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

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

    JAX-WS(Java API for XML Web Services)是Java平台上的一个标准,用于创建和消费Web服务。本篇将深入讲解如何基于JAX-WS开发一个WebService实例。 首先,让我们了解JAX-WS的基本概念。JAX-WS提供了一种简单的方式...

    学习JAX-WSWebService开发

    JAX-WS是Java平台上的Web服务规范,它使得开发者能够利用Java语言的强类型系统来构建Web服务,同时提供了客户端和服务器端的API。 **JAX-WS核心组件:** 1. **SOAP(Simple Object Access Protocol):** 是Web服务...

    Jax-ws RI.zip

    Java API for XML Web Services (JAX-WS) 是Java平台上的一个标准,用于构建和部署Web服务。JAX-WS RI(Reference Implementation)是这个规范的官方参考实现,它提供了开发、测试和运行基于SOAP(Simple Object ...

    JAX-WS低版本

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

Global site tag (gtag.js) - Google Analytics