wsimport:多个wsdl覆盖ObjectFactory

时间:2013-04-03 09:10:21

标签: java jaxb wsdl 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

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

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

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

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

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

所以保留两个ObjectFactories?

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

2 个答案:

答案 0 :(得分:1)

您可以通过JAXB绑定文件执行此操作 - 查看此问题/答案:java wsimport rename/different ObjectFactory.java

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

答案 1 :(得分:0)

这对我有用(使用Spring java config)

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

使用setPackagesToScan代替setContextPath为我做了工作(我假设它忽略ObjectFactory中的内容并扫描整个包。)