有没有办法打开使用wsdl2java生成的两个Axis2存根之间的类型共享?

时间:2014-03-07 22:22:27

标签: web-services wsdl axis2 wsdl2java

我们拥有目前由C#客户端使用的Axis2 POJO服务,我们正在添加Java客户端。生成等效存根变得有点困难。

我们使用.NET wsdl工具生成类,该工具可以选择在多个服务之间共享类型。

http://mymachine/appname/services/Service1?wsdl
http://mymachine/appname/services/Service2?wsdl
...ect

对于C#客户端,我们使用Visual Studio附带的wsdl工具,生活很美好

wsdl /n:MyPackage /out:ourservice-webservice.cs /sharetypes "http://mymachine/appname/services/Service1?wsdl" "http://mymachine/appname/services/Service2?wsdl"

现在我们正在尝试添加Java客户端,并且使用wsdl2java生成的代码遇到问题

wsdl2java -uri http://mymachine/appname/services/Service1?wsdl -uw -or -o src -p MyPackage  
wsdl2java -uri http://mymachine/appname/services/Service2?wsdl -uw -or -o src -p MyPackage  

这似乎有效,直到我尝试使用Service1和Service2中的一个使用MyTransaction类型的调用。

现在,生成的存根将其显示为Service1Stub.MyTransaction和Service2Stub.MyTransaction,它们当然是不同的类型。

这是一个问题,因为我们必须在两个服务之间来回移动对象。我假设有一个简单的解决方法我错过了吗?

1 个答案:

答案 0 :(得分:0)

正如您所指出的,数据绑定类(MyTransaction等)正在生成为存根类的内部类。因此,每个存根都有自己的MyTransaction类副本,与另一个副本不兼容。

wsdl2java 参数-u将导致数据绑定类作为常规类生成,每个类都在自己的文件中。如果两个MyTransaction定义实际上相同,则 wsdl2java 将为每个MyTransaction对象生成相同的类文件,并且您将能够共享{{1两个服务之间的对象。

This page详细描述了 wsdl2java 参数。