Axis2 Web服务客户端生成 – 无需修改客户端的类型

是否可以使用Axis2和Eclipse生成Web服务客户端,并使用已包含的Java类型而不是创建自己的类型。 原因当然是如果我已经创建了类型A并且它创建了它自己的类型AI不能只将类型A的变量分配给类型B的变量。

wsdl是从部署到应用程序服务器的Web Service生成的。 如果无法从中生成它,则可以从已存在的java文件生成客户端。

如果您真的想重用现有类,可以直接调用Axis2 API而无需使用wsdl2java生成客户端。 下面是一些调用Web服务的相对简单的代码。 您只需要填写Web服务端点,方法QName,预期返回类和服务参数。 您可以重用现有的类作为返回值或参数。

如果您的Web服务非常复杂,那么您可能会发现必须深入了解API以使此方法起作用。

serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); EndpointReference targetEPR = new EndpointReference("http://myservice"); options.setTo(targetEPR); QName methodName = new QName("ns","methodName"); Class[] returnTypes = new Class[] { String.class }; Object[] args = new Object[] { "parameter" }; Object[] response = serviceClient.invokeBlocking(methodName, args, returnTypes); 

您正在从wsdl生成Web服务客户端,对吗?

wsdl2java工具唯一知道的是wsdl中的信息,因此它不会知道您已经创建的任何类型。

如果你可以将类型信息输入wsdl,你可以让它工作,虽然我从未尝试过。

如果您想要一种简单的方法从Type A复制到Type B,那么只要Type A和Type B的setter和getter匹配,你就可以尝试使用BeanUtils.copyProperties 。

几乎大多数java webservices项目都经历过这个。 我不知道.NET / C#世界是否有更优雅的解决方案。

正如Mike所说,使用BeanUtils.copyProperties是有道理的。

BR,
〜一

如果您使用eclipse作为您的ide,那么您需要: http : //www.eclipse.org/webtools/ 。 它确实超出了你想要的其他东西。

您可以直接使用ServiceClient类来调用Web服务,该服务仅使用XML提供调用并返回XML响应。 对于不同的Web服务方法,您必须将XML响应转换为某些Java POJO才能使用它。 只需要在您的最后完成响应处理。 你可以做从XML到Map等…

因此,您不需要任何其他存根类来调用任何Web服务,只需要处理响应XML。 您可以使用Castor或JAXB库将XML转换为POJO。

这是您不需要每次为diff修改客户端的方法。 网页服务。 您可以开发为向外部客户端提供响应处理程序。 因此,对于每个不同的Web服务,您将拥有差异。 响应处理程序类,它是您接口的实现。

 //common interface for response handlers... //implement this for diff. web service/methods public interface WSRespHandler{ public Object getMeResp(Object respData); } //pass particular handler to client when you call some WS public class WebServiceClient { public Object getResp(WSRespHandler respHandler) { .. return repHandler.getMeResp(xmlData); } } 

参考:

http://www.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation-on-the-Client-Side.htm

http://www.devdaily.com/blog/post/java/java-web-service-client-read-array-list/

谢谢。

http://www.techlads.com

如果这篇文章对某人有用,我会阅读生成客户指南的axis2: http : //axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html 。

似乎Axis2 Eclipse插件配置为以集成模式调用ADB代码生成(请参阅http://axis.apache.org/axis2/java/core/docs/adb/adb-howto.html ),从而创建内部类在Web服务存根中。 我不知道是否可以将生成模式更改为扩展模式(从存根类生成数据类),但是您可以使用Wsdl2Java执行命令行:

  %AXIS2_HOME%\bin\WSDL2Java -uri  -p  -u 

-u选项告诉ADB代码生成器将数据类创建为单独的类,而不是存根中的内部类。