具有重复名称的 WSDL — 如何强制 Java 类名称

2024-05-04

背景:我们正在开发一个与多个第三方网络服务通信的应用程序。 遗憾的是,其中一个使用糟糕的命名约定定义了 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(使用前将#替换为@)

具有重复名称的 WSDL — 如何强制 Java 类名称 的相关文章

随机推荐