![](/img/trans.png)
[英]Best ways to manage generated artifacts for web service/xml bindings in a java webapp/client?
[英]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。 您只需进行面向对象的编程。
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.