我有多个(比方说2,A和B) let服务,我需要生成一个客户端来使用它们。在Netbeans中,我使用向导"new Web Service Client“传递两个wsdl,查看输出时,Netbeans只需为每一个调用wsimport。
wsimport http:/mydomain/wsA.svc?wsdl
wsimport http:/mydomain/wsB.svc?wsdlA和B都生成相同的包com.mydomain.myapp (我猜它们是在相同的名称空间中定义的),因此我将A和B的存根类集合并到同一个包中。
然而,wsimport还为每个for服务创建了一个ObjectFactory,因此如果我在A之后生成B的存根,我只获得与B定义相关的ObjectFactory (因为第一个定义A被覆盖)。相反,如果我交换顺序,A的ObjectFactory仍然有效。
问题是,为了为The服务A和B类型创建JAXBElements包装类实例,我需要这两个ObjectFactories。
有没有一种方法可以映射一个java包中A的名称空间和另一个包中B的名称空间,以便获得
com.mydomain.myapp.a
com.mydomain.myapp.b所以把两个ObjectFactories都保留下来?
简单的重构没有帮助,因为在内部调用了getClass(),一旦包被重构,它就不再工作了。
发布于 2013-04-03 17:20:41
您可能可以通过JAXB绑定文件来做到这一点--看一下这个问题/答案:java wsimport rename/different ObjectFactory.java
根据这个答案,让我们看看oracle:http://docs.oracle.com/javaee/5/tutorial/doc/bnbbf.html上的绑定文件
发布于 2016-11-18 19:32:35
这对我很有效(使用Spring java配置)
@Bean
public Jaxb2Marshaller marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setPackagesToScan("com.example.api");
return marshaller;
}使用setPackagesToScan而不是setContextPath为我做了这项工作(我假设它忽略了ObjectFactory中的内容,并扫描整个包)。
https://stackoverflow.com/questions/15783166
复制相似问题