Axis2 和 Eclipse 是否可以生成 Web 服务客户端并让它使用包中已有的 java 类型,而不是创建它自己的类型。原因当然是如果我已经创建了类型 A 并且它创建了它自己的类型 AI 不能只将 A 类型的变量分配给 B 类型的变量。
wsdl 是从部署到应用程序服务器的 Web 服务生成的。如果无法从中生成它,则可以从已经存在的 java 文件中生成客户端。
Axis2 和 Eclipse 是否可以生成 Web 服务客户端并让它使用包中已有的 java 类型,而不是创建它自己的类型。原因当然是如果我已经创建了类型 A 并且它创建了它自己的类型 AI 不能只将 A 类型的变量分配给 B 类型的变量。
wsdl 是从部署到应用程序服务器的 Web 服务生成的。如果无法从中生成它,则可以从已经存在的 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,那么您可以尝试BeanUtils.copyProperties,只要 Type A 和 Type B 的 setter 和 getter 匹配。
几乎大多数 java webservices 项目都会经历这个。我不知道 .NET/C# 世界是否有更优雅的解决方案。
正如 Mike 所提到的,使用 BeanUtils.copyProperties 是有道理的。
BR,
~A
如果你使用 eclipse 作为你的 ide,那就是你需要的:http: //www.eclipse.org/webtools/。它超越了你想要的其他事情。
您可以直接使用 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 服务存根中。我不知道是否可以将生成模式更改为扩展模式(从存根类中生成数据类),但您可以使用 Wsdl2Java 进行命令行操作:
%AXIS2_HOME%\bin\WSDL2Java -uri <wsdl file path> -p <package name> -u
-u 选项告诉 ADB 代码生成器将数据类创建为单独的类,而不是存根中的内部类。