wsimport:多个wsdl覆盖ObjectFactory

ale*_*oat 6 java wsdl jaxb wsimport objectfactory

我有多个(假设是2,A和B)webservices,我需要生成一个客户端来使用它们.在Netbeans中,我使用向导"new Web Service Client"传递两个wsdl,查看输出Netbeans只需为每个wsmport调用wsimport.

wsimport http:/mydomain/wsA.svc?wsdl
wsimport http:/mydomain/wsB.svc?wsdl
Run Code Online (Sandbox Code Playgroud)

A和B都生成一个相同的包com.mydomain.myapp(我猜它们是在同一个命名空间中定义的),所以我得到了在同一个包中合并的A和B的存根类集.

但是,wsimport还为每个Web服务创建一个ObjectFactory,因此如果我在AI获取与B定义相关的ObjectFactory之后生成B的存根(因为第一个,A被覆盖).相反,如果我切换订单,A的ObjectFactory仍然存在.

问题是我需要两个ObjectFactories才能为Web服务A和B的类型创建JAXBElements包装clas实例.

有没有办法在Java包中映射A的名称空间,在另一个中映射B以获取

com.mydomain.myapp.a
com.mydomain.myapp.b
Run Code Online (Sandbox Code Playgroud)

所以保留两个ObjectFactories?

简单的重构没有帮助,因为在内部调用了getClass(),一旦一个包被重构,它就不再起作用了.

FOO*_*OOM 2

您可以通过 JAXB 绑定文件来做到这一点 - 看看这个问题/答案:java wsimport rename/ different ObjectFactory.java

从这个答案中,看看 oracle 的绑定文件内容:http://docs.oracle.com/javaee/5/tutorial/doc/bnbbf.html

  • 只是有一个想法 - 您是否尝试过“wsimport -p com.mydomain.myapp.a http:/mydomain/wsA.svc?wsdl”然后“wsimport -p com.mydomain.myapp.b http:/mydomain/wsB. svc?wsdl”?这会将所有生成的代码放入指定的包中(根据“-p”开关),而不需要绑定文件。(本来应该早点想到的……) (2认同)