繁体   English   中英

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

[英]Client artifacts generated in a java web service

我已经在许多使用JAX-WS实现的Web服务项目中工作,例如Axis。 工件是通过使用IDE生成的,并且可以正常工作。 但是,我想知道生成的客户端工件及其作用。 如果您可以提供任何权威性指南或资料来源,将对您有所帮助。

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

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

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

因此,您收到了WSDL文件,该文件实质上告诉您如何访问服务(服务端点),公开的操作是什么,每个服务的输入模式是什么,输出模式是什么,错误模式等等。

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

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

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

例如:使用具有加减运算的计算器服务 每个操作都需要特定类型的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。 您只需进行面向对象的编程。

参考1 | 参考2

JAX-RPC较旧,您可以从Wikipedia中读取历史记录

玩得开心

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM