批量重命名 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>
我正在使用外部第 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.
<?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>