背景:我们正在开发一个与多个第三方网络服务通信的应用程序。
遗憾的是,其中一个使用糟糕的命名约定定义了 WSDL 文件。
响应元素及其使用的复杂类型经常重复使用相同的名称。下面的代码片段显示了这样一个例子:
<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 codegen 插件 (jaxb/jax-ws) 将其编译为 Java 类。为了避免名称冲突,我们以前使用过该选项-自动名称解析。
然而,我们发现这会导致意想不到的结果,在某些机器上
类被重命名为 ResetPasswordResponse2.java,而在其他机器上other类被重命名。
这使得协作开发变得非常困难,也让我们对未来感到担忧(如果在某些时候在 Jenkins 上无法正确编译怎么办?)
问题:我正在寻找一种方法来手动确定如何进行翻译/重命名。
- 有人告诉我,仅仅更改 WSDL 中的名称是行不通的,因为 Java 文件中的 xml 命名注释很重要。
- 我还研究了绑定文件或内联绑定语句,但无法使其工作。文档位于http://wiki.netbeans.org/WsdlCustomizer#Class_Customization http://wiki.netbeans.org/WsdlCustomizer#Class_Customization似乎暗示名称更改仅适用于“wsdl:portType,wsdl:fault,soap:headerfault和wsdl:server”,这表明我可能正在尝试做一些根本不可能的事情。
jaxb/jax-ws 绑定是可能的解决方案吗?还有其他选择吗?
检查这个问题并回答:
WSDL 之外的 XSD 的 JAXB 绑定 https://stackoverflow.com/questions/25687186/jaxb-binding-for-xsd-outside-wsdl
简而言之,您可以使用所谓的绑定文件来自定义名称。
<jxb:bindings version="2.1" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="xsdschema.xsd" node="/xs:schema">
<jxb:bindings node="xs:complexType[@name='ResetPasswordResponse']">
<jxb:class name="ResetPasswordResponseType"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
您可能感兴趣jaxb:nameXmlTransform http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.5/tutorial/doc/JAXBUsing4.html:
JAXB 问题:nameXmlTransform typeName 前缀不起作用 https://stackoverflow.com/questions/21685003/issue-with-jaxb-namexmltransform-typename-prefix-not-working
这将允许您全局自定义类型或元素命名规则:
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" jaxb:version="2.0">
<jaxb:bindings schemaLocation="schema.xsd" node="/xsd:schema">
<jaxb:schemaBindings>
<jaxb:nameXmlTransform>
<jaxb:typeName suffix="Type"/>
<jaxb:elementName suffix="Element"/>
</jaxb:nameXmlTransform>
</jaxb:schemaBindings>
</jaxb:bindings>
</jaxb:bindings>
积分转到布莱斯·道安 https://stackoverflow.com/a/21685303/303810.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)