【问题标题】:wsimport: multiple wsdl overwrite ObjectFactorywsimport:多个wsdl覆盖ObjectFactory
【发布时间】:2013-04-03 09:10:21
【问题描述】:

我有多个(比如说 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,所以如果我在 A 之后生成 B 的存根,我只会获得与 B 定义相关的 ObjectFactory(因为第一个 A 被覆盖了)。相反,如果我切换顺序,A 的 ObjectFactory 会继续存在。

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

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

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

所以保留两个 ObjectFactories ?

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

【问题讨论】:

    标签: java jaxb wsdl wsimport objectfactory


    【解决方案1】:

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

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

    【讨论】:

    • 好的!我使用了这个 XML 绑定: java.sun.com/xml/ns/jaxb" xmlns:xs="w3.org/2001/XMLSchema"> mydomain.com/myapp/A']"> 但是,它给了我 XPath error: null 。我没有xsd,你有什么建议吗?
    • 刚刚想到 - 你试过“wsimport -p com.mydomain.myapp.a http:/mydomain/wsA.svc?wsdl”然后“wsimport -p com.mydomain.myapp. b http://mydomain/wsB.svc?wsdl”?这会将所有生成的代码放入指定的包中(根据“-p”开关),而不需要绑定文件。 (早该想到...)
    • 是的,我做到了。有很多错误,例如“两个声明导致 ObjectFactory 中的冲突”类。和“具有相同名称“com.anthesi.prova.ExecuteTransmDocModelResponse”的类/接口已在使用中。使用类自定义来解决此冲突。”
    • 好的,看起来很奇怪,您可能需要确保使用单独的包等;但继续前进:我认为问题在于您的 元素中没有 wsdlLocation 。另外,请注意 targetNameSpace 应该是 wsdl 中的那个,而不是您希望它生成的包。这是一个很好的例子(在 Java Bindings 下查看):illegalargumentexception.blogspot.com/2011/04/…
    【解决方案2】:

    这对我有用(使用 Spring java 配置)

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-04
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多