批量重命名 JAX 绑定文件中的 complexType 元素,即 bindings.xjb?

Bulk rename complexType elements in JAX binding file, i.e. bindings.xjb?

我正在使用外部第 3 方 WSDL 文件并尝试从中生成 Java 代码。

WSDL 包含 <s:element><s:complexType> 之间的名称冲突。例如:

      <s:element name="Foo"> <!-- name conflict -->
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="SoapMessage" type="tns:Foo" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="Foo"> <!-- name conflict -->
        <s:complexContent mixed="false">
          <s:extension base="tns:SoapMessageBase">
            <s:sequence>
              <s:element minOccurs="0" maxOccurs="1" name="Request" type="tns:FooRequest" />
              <s:element minOccurs="0" maxOccurs="1" name="Response" type="tns:FooResponse" />
            </s:sequence>
          </s:extension>
        </s:complexContent>
      </s:complexType>

我知道如果bindings.jxb正确,其中一个可以重命名。这就是 named the s:element and s:complexType the same name

中描述的确切问题

然而,上述post的解决方案并不奏效。 WSDL 中有很多(例如 100 多个)名称冲突。

在我制作一个 bindings.xjb 来解决它们中的每一个之前。 (是的,我可以写一个脚本),有没有更简单的方法来解决这个问题?喜欢模式匹配+批量重命名?

更新

到目前为止,我能找到的是每个 Issue with JAXB: nameXmlTransform typeName prefix not working

使用 <jaxb:nameXmlTransform>
<?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:package name="com.mycompany.hi"/>
         <jaxb:nameXmlTransform>
            <jaxb:typeName prefix="Hi_"/>
            <jaxb:elementName prefix="Hi_"/>
         </jaxb:nameXmlTransform>
      </jaxb:schemaBindings>
   </jaxb:bindings>
</jaxb:bindings> 

但挑战是 <jaxb:bindings schemaLocation="schema.xsd" node="/xsd:schema"> - 外部 WSDL 提供商根本不提供任何 .xsd 文件。

这是只提供WSDL的常见场景吗?还是只是我遗漏了什么?

谢谢!

事实证明 schemaLocation="./services.wsdl#types1" 解决了问题。现在我可以在没有 XSD.

的情况下从 WSDL 生成代码
<?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="./services.wsdl#types1">
        <jaxb:schemaBindings>
            <jaxb:nameXmlTransform>
                <jaxb:typeName suffix="Type" />
                <jaxb:elementName suffix="Element" />
            </jaxb:nameXmlTransform>
        </jaxb:schemaBindings>
    </jaxb:bindings>
</jaxb:bindings>