Java Axis2 Web服务客户端生成-在不修改客户端的情况下生成类型
Axis2和Eclipse是否可以生成Web服务客户机,并让它使用包中已有的java类型,而不是创建自己的类型。原因当然是,如果我已经创建了类型A,并且它创建了自己的类型A,我不能只将类型A的变量分配给类型B的变量 wsdl是从部署到应用服务器的Web服务生成的。Java Axis2 Web服务客户端生成-在不修改客户端的情况下生成类型,java,code-generation,axis2,wsdl2java,Java,Code Generation,Axis2,Wsdl2java,Axis2和Eclipse是否可以生成Web服务客户机,并让它使用包中已有的java类型,而不是创建自己的类型。原因当然是,如果我已经创建了类型A,并且它创建了自己的类型A,我不能只将类型A的变量分配给类型B的变量 wsdl是从部署到应用服务器的Web服务生成的。 如果无法从中生成它,那么可以从现有的java文件生成客户端。您正在从wsdl生成web服务客户端,对吗 wsdl2java工具只知道wsdl中的信息,因此它不知道您已经创建的任何类型 如果您可以将类型信息输入到wsdl中,您就可以让它
如果无法从中生成它,那么可以从现有的java文件生成客户端。您正在从wsdl生成web服务客户端,对吗 wsdl2java工具只知道wsdl中的信息,因此它不知道您已经创建的任何类型 如果您可以将类型信息输入到wsdl中,您就可以让它工作,尽管我从未尝试过
如果您想要一种从类型A复制到类型B的简单方法,那么您可以尝试,只要类型A和类型B的setter和getter匹配。几乎大多数java Web服务项目都经历了这一过程。我不知道.NET/C世界是否有更优雅的解决方案 正如Mike提到的,使用BeanUtils.copyProperties是有意义的 BR,
~A如果您确实想重用现有类,可以直接调用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);
serviceClient=new RPCServiceClient();
Options=serviceClient.getOptions();
EndpointReference targetEPR=新的EndpointReference(“http://myservice");
选项。设置为(targetEPR);
QName methodName=新的QName(“ns”、“methodName”);
类[]返回类型=新类[]{String.Class};
对象[]args=新对象[]{“参数”};
Object[]response=serviceClient.InvokeBlock(方法名、参数、,
返回类型);
如果您使用eclipse作为ide,这正是您所需要的:。它所做的事情远远超出了您想要的。您可以直接使用ServiceClient类调用web服务,它只提供使用XML的调用并返回XML响应。对于不同的web服务方法,您必须将XML响应转换为一些JavaPOJO来使用它。只有响应处理需要在您这边完成。你可以从XML到地图等等
因此,您不需要任何其他存根类来调用任何web服务,只需要处理响应XML。您可以使用Castor或JAXB libs将XML转换为POJO
对于不同的web服务,您无需每次都修改客户端。您可以像在外部向客户机提供响应处理程序一样进行开发。因此,对于每个不同的web服务,您都将拥有diff.response handler类,它是您接口的实现
//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);
}
}
参考:
谢谢
www.techlads.com如果这篇文章对我阅读axis2生成客户端指南的人仍然有用的话: Axis2 Eclipse插件似乎配置为在集成模式下调用ADB代码生成(请参阅),从而在Web服务存根中创建内部类。我不知道是否可以将生成模式更改为扩展模式(从存根类中生成数据类),但您可以使用Wsdl2Java命令行:
%AXIS2_HOME%\bin\WSDL2Java -uri <wsdl file path> -p <package name> -u
%AXIS2\u HOME%\bin\WSDL2Java-uri-p-u
u选项告诉ADB代码生成器将数据类创建为单独的类,而不是存根中的内部类