是否可以使用Axis2和Eclipse生成Web服务客户端,并让它使用您已在包中拥有的java类型,而不是创建自己的类型。原因当然,如果我已经创建了类型A并且它创建了它自己的类型A我不能只将类型A的变量赋值给类型B的变量。
wsdl是从部署到应用程序服务器的Web Service生成的。 如果无法从中生成它,则可以从已存在的java文件生成客户端。
答案 0 :(得分:3)
如果您真的想重用现有类,可以直接调用Axis2 API而无需使用wsdl2java生成客户端。下面是一些调用Web服务的相对简单的代码。您只需要填写Web服务端点,方法QName,预期返回类和服务参数。您可以重用现有的类作为返回值或参数。
如果您的网络服务非常复杂,那么您可能会发现必须深入了解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);
答案 1 :(得分:1)
您正在从wsdl生成Web服务客户端,对吗?
wsdl2java工具唯一知道的是wsdl中的信息,因此它不会知道您已创建的任何类型。
如果您可以将类型信息输入wsdl,您可以使用它,但我从未尝试过。
如果您想要一种简单的方法从A类复制到B类,那么您可以尝试BeanUtils.copyProperties,只要类型A和类型B的setter和getter匹配。
答案 2 :(得分:0)
几乎大多数java webservices项目都经历过这个。我不知道.NET / C#世界是否有更优雅的解决方案。
正如Mike所说,使用BeanUtils.copyProperties是有意义的。
BR,
〜A
答案 3 :(得分:0)
如果您使用eclipse作为您的ide,那就是您所需要的:http://www.eclipse.org/webtools/。它确实超出了你想要的其他东西。
答案 4 :(得分:0)
您可以直接使用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.devdaily.com/blog/post/java/java-web-service-client-read-array-list/
感谢。
www.techlads.com
答案 5 :(得分:0)
如果这篇文章对某人有用,我会阅读生成客户指南的轴2: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 <wsdl file path> -p <package name> -u
-u选项告诉ADB代码生成器将数据类创建为单独的类而不是存根中的内部类。