7

我有多个(比如说 2、A 和 B)网络服务,我需要生成一个客户端来一起使用它们。在 Netbeans 中,我使用向导“新 Web 服务客户端”传递两个 wsdl,查看输出 Netbeans 只需为它们中的每一个调用 wsimport。

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

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

但是,wsimport 也会为每个 web 服务创建一个 ObjectFactory,因此如果我在 AI 仅获取与 B 定义相关的 ObjectFactory 后生成 B 的存根(因为第一个 A 被覆盖)。相反,如果我切换顺序,A 的 ObjectFactory 会继续存在。

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

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

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

所以保留两个 ObjectFactories ?

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

4

2 回答 2

2

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

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

于 2013-04-03T09:20:41.300 回答
2

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

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

使用setPackagesToScan而不是setContextPath为我完成了工作(我假设它忽略了里面的内容ObjectFactory并扫描整个包)。

于 2016-11-18T11:32:34.577 回答