背景: 我们正在开发一个与多个第三方Web服务进行通信的应用程序。 不幸的是,其中一个已经使用糟糕的命名约定定义了一个WSDL文件。 相同的名称通常被重复用于响应元素,以及它使用的complexType。下面剪断的代码示出了一个这样的发生,例如:具有重复名称的WSDL - 如何强制Java类名称
<s:element name="Reset_PasswordResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Reset_PasswordResult" type="tns:ResetPasswordResponse" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="ResetPasswordResponse">
<s:complexContent mixed="false">
<s:extension base="tns:BaseResponse" />
</s:complexContent>
</s:complexType>
我们使用Maven CXF代码生成插件(JAXB/JAX-WS)来编译该Java类。为了避免名称冲突,我们以前使用的选项-AutoNameResolution。 然而,我们已经发现,这会导致意想不到的结果,其中有些机器上一个 类被重命名为ResetPasswordResponse2.java,而在其他机器上其他类被重命名。 这使得协作开发非常困难,也给了我们的后顾之忧
问题(如果它不能正确的詹金斯在某些时候编译): 我正在寻找一种方式来手动确定翻译/重命名应该如何进行。
- 我被告知,仅仅更改WSDL中的名称将不起作用,因为Java文件中的xml命名注释非常重要。
- 我也看着约束力的文件或内联约束性声明,但无法得到它的工作。在http://wiki.netbeans.org/WsdlCustomizer#Class_Customization文档似乎暗示着名称的变化仅适用于“WSDL:端口类型,WSDL:故障,肥皂:headerfault中,和wsdl:服务器”,这表示我可能会尝试做一些事情,是根本不可能的。
jaxb/jax-ws是否可以绑定一个可能的解决方案?还有其他选择吗?
谢谢你,Lexicore。 事实证明,我的主要问题是在我的外部约束力的文件中定义的命名空间/的schemaLocation。我现在已经设法将 绑定文件正确地绑定到wsdl。 您的第一个类名自定义示例鼓励我再次尝试让该解决方案起作用,并且最终结果的确与您的代码非常相似。 但是,全局重命名的选项也非常有趣,并且可能为其他人避免了很多麻烦(在他们的wsdl的将来版本中存在更多命名冲突或可能会出现更多命名冲突)。 – Michael 2014-10-30 14:44:30
@Michael很高兴帮助。 – lexicore 2014-10-30 16:25:42