2013-04-03 55 views
6

我有多个(让我们说2,A和B)web服务,我需要生成一个客户端使用它们togheter。 在Netbeans中,我使用向导“新的Web服务客户端”传递两个wsdl,看着输出Netbeans只需调用每个人的wsimport。wsimport:多个wsdl覆盖ObjectFactory

wsimport http:/mydomain/wsA.svc?wsdl 
wsimport http:/mydomain/wsB.svc?wsdl 

A和B,产生相同的包com.mydomain.myapp(I猜测它们在相同的命名空间定义),所以我得到的短线类别集合A和B在相同的包合并。

但是,wsimport也为每个webservice创建一个ObjectFactory,所以如果我在A之后生成B的存根,我只获得与B定义相关的ObjectFactory(因为第一个A被覆盖)。相反,如果我切换顺序,A的ObjectFactory仍然存在。

的问题是,我需要同时ObjectFactories以创建类型既web服务A和B.

的JAXBElements包装CLAS情况下,有没有办法为一个命名空间映射Java包和B在另一个为了获得

com.mydomain.myapp.a 
com.mydomain.myapp.b 

所以保持这两个ObjectFactories?

简单的重构没有帮助,因为内部调用了getClass(),所以一旦重构了包,它就不再工作了。

回答

1

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

从这个问题的答案,看看装订文件夹的东西在甲骨文:http://docs.oracle.com/javaee/5/tutorial/doc/bnbbf.html

+0

好的!我使用了这个XML绑定: \t \t \t alexroat

+1

只是有一个想法 - 你有没有尝试过“wsimport -p com.mydomain.myapp.a http:/mydomain/wsA.svc?wsdl”,然后是“wsimport -p com.mydomain.myapp.b http:/ mydomain/wsB .SVC?WSDL“?这将把所有生成的代码放到指定的包中(按照“-p”开关),而不需要绑定文件。 (应该早点想到它......) – FOOM

+0

是的,我做到了。像“两个声明在ObjectFactory中引起冲突”类有很多错误。和“具有相同名称的类/接口”com.anthesi.prova.ExecuteTransmDocModelResponse“已在使用中,请使用类定制来解决此冲突。 – alexroat

0

这个工作对我来说(使用的Spring Java配置)

@Bean 
public Jaxb2Marshaller marshaller() { 
    Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); 
    marshaller.setPackagesToScan("com.example.api"); 
    return marshaller; 
} 

使用setPackagesToScan代替setContextPath为我做的工作(我假设它忽略了什么是在ObjectFactory和扫描整个包)。