2008-10-15 147 views
3

Axis2和Eclipse是否可以生成Web服务客户端,并让它使用包中已有的Java类型,而不是创建它自己的类型。理由当然是如果我已经创建了类型A并创建它自己的类型AI不能只将类型A的变量分配给类型B的变量。Axis2 Web服务客户端生成 - 无需修改客户端的类型

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

回答

3

如果你真的想重用现有的类,可以直接调用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); 
1

您正在从wsdl生成Web服务客户端,是否正确?

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

如果你可以得到类型信息到wsdl中,你可能会得到它的工作,虽然我从来没有尝试过。

如果你想从A型复制到B型,那么你可以尝试BeanUtils.copyProperties,只要类型A和类型B的设置者和获得者匹配。

0

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

正如Mike提到的,使用BeanUtils.copyProperties是有道理的。

BR,
〜一个

0

您可以直接使用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.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/

感谢。

www.techlads.com

0

如果这个岗位仍然是任何使用别人的我读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代码生成器创建数据类作为单独的类而不是存根中的内部类。