在java Web服务中生成的客户端工件

时间:2014-12-21 16:17:34

标签: java web-services soap jax-ws soa

我曾在一些使用JAX-WS实现(如Axis)的Web服务项目中工作过。通过使用IDE生成工件,它可以工作。但是,我想知道生成的客户端工件及其功能。如果您能提供任何明确的指南或来源,将会很有帮助。

我知道如何生成工件。但找不到任何描述生成的客户端工件及其作用的源。

2 个答案:

答案 0 :(得分:4)

如您所知,JAX-WS旨在为XML Web Services提供Java API规范。作为面向对象的Java开发人员,我们不想在代码中处理原始XML。我们喜欢XML文件的面向对象表示,因此我们只处理类和对象。

服务提供商将使用XML定义(WSDL)创建Web服务并公开其数据传输合同。现在,客户端希望通过创建XML输入文件(SOAP消息)并与服务器通信来使用此Web服务。

所以你收到的WSDL文件基本上告诉你如何访问服务(服务端点),暴露的操作是什么,每个服务的输入模式是什么,输出模式是什么,错误模式等等。

与Web服务通信的一种方法是手动查看架构并创建XML(SOAP)消息并尝试连接到该服务。这非常困难,容易出错,无法读取和维护。这就是为什么我们有一个规范,将庞大,复杂的XML模式转换为更加开发人员友好的面向对象的类,它们代表了与WSDL中定义的完全相同的XML元素。它还生成工厂类以创建任何POJO类的实例。

获取一个简单的WSDL文件并使用wsimport生成客户端类。您可以看到,它生成了输入和输出XML的面向对象表示,为服务和操作创建的接口,表示整个服务的Web服务客户端,Object Factory,它可以帮助您创建任何数据传输类的实例。 JAX-WS将使用所有这些接口和类来生成最终的SOAP消息以调用Web服务。

您需要做的就是创建输入对象并调用Web服务操作,JAX-WS实现将负责将您的对象转换为SOAP并进行服务调用,然后转换响应SOAP消息返回面向对象的表示并返回到您的应用程序。

例如:选择具有Add和Substract操作的Calculator Service。每个操作都需要特定类型的SOAP消息。 wsimoport将生成,

具有端点定义的高级WebService类(ICalculator)

@WebServiceClient(name = "CalculatorService",...)
public class CalculatorService
extends Service
{

 ….
 @WebEndpoint(name = "ICalculator")
    public ICalculator getICalculator(WebServiceFeature... features) {
     .....
    }
…
}

用于定义每个操作的ICalculator接口,

@WebService(name = "ICalculator", targetNamespace = "http://Example.org")
public interface ICalculator {
   ….
    @WebMethod(operationName = "Add", action = "http://Example.org/ICalculator/Add")
    @WebResult(name = "result", targetNamespace = "http://Example.org")
    @RequestWrapper(localName = "Add", targetNamespace = "http://Example.org", className = "org.example.Add")
    @ResponseWrapper(localName = "AddResponse", targetNamespace = "http://Example.org", className = "org.example.AddResponse")
    public Integer add(
        @WebParam(name = "a", targetNamespace = "http://Example.org")
        Integer a,
        @WebParam(name = "b", targetNamespace = "http://Example.org")
        Integer b);

   ….
}

数据传输对象代表所有请求和响应格式,

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Add")
public class Add {

    protected Integer a;
    protected Integer b;
    …. All getter and setter

}

以及其他一些工厂类。您可以看到所有这些注释都是由JAX-WS规范定义的,并由JAX-WS实现用于生成SOAP消息并促进通信。您不再需要在应用程序代码中处理XML。你只需要进行面向对象的编程。

Reference 1 | Reference 2

JAX-RPC比较旧,您可以从wikipedia

读取历史记录

玩得开心

答案 1 :(得分:0)

Java JAX-RPC API通常已被JAX-WS API取代 - 请参阅The Java API for XML-Based Web Services (JAX-WS) 2.0,其中指出JAX-WS 2.0 (this specification) is a follow-on to JAX-RPC 1.1, ...

您的IDE最有可能使用以下工具生成工件:

  man wsimport
  man wsgen

可以在Java™ API for XML-Based Web Services 2.2中找到有关JAX-WS工作方式及其相关工件的完整说明。

相关问题