Axis2 Web服务客户端生成 - 无需修改客户端的类型
Axis2和Eclipse是否可以生成Web服务客户端,并让它使用包中已有的Java类型,而不是创建它自己的类型。理由当然是如果我已经创建了类型A并创建它自己的类型AI不能只将类型A的变量分配给类型B的变量。Axis2 Web服务客户端生成 - 无需修改客户端的类型
wsdl是从部署到应用程序的Web Service生成的服务器。 如果无法从中生成它,可以从已有的java文件生成客户端。
如果你真的想重用现有的类,可以直接调用Axis2的API,而不会产生使用WSDL2Java的客户端。以下是调用Web服务的一些相对简单的代码。您只需填写Web服务端点,方法QName,期望的返回类(es)和参数到服务。你可以重用你现有的类作为返回值或参数。
如果您的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中,你可能会得到它的工作,虽然我从来没有尝试过。
如果你想从A型复制到B型,那么你可以尝试BeanUtils.copyProperties,只要类型A和类型B的设置者和获得者匹配。
几乎大部分的java webservices项目都是通过这个。我不知道.NET/C#世界是否有更优雅的解决方案。
正如Mike提到的,使用BeanUtils.copyProperties是有道理的。
BR,
〜一个
您可以直接使用ServiceClient类来调用Web服务,该服务仅使用XML提供调用并返回XML响应。对于不同的Web服务方法,您必须将XML响应转换为一些Java POJO才能使用它。只有响应处理需要在你的最后完成。你可以像从XML到Map等一样做...
所以你不需要任何其他存根类来调用任何Web服务,只需要处理响应XML。您可以使用Castor或JAXB库将XML转换为POJO。
这是你不需要每次修改你的客户端的方式。网页服务。你可以开发像从外部为客户提供响应处理程序。因此,对于每种不同的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.devdaily.com/blog/post/java/java-web-service-client-read-array-list/
感谢。
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服务存根中创建内部类。我不知道,如果改变生成模式,以扩展模式(生成数据类进行stub类的)是可能的,但你可以使用WSDL2JAVA做到这一点的命令行:
%AXIS2_HOME%\bin\WSDL2Java -uri <wsdl file path> -p <package name> -u
-u选项告诉ADB代码生成器创建数据类作为单独的类而不是存根中的内部类。