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



我正在使用一个外部第三方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,其中一个可以重命名。这正是命名为s:element和s:complexType相同名称

中所描述的问题。然而,上面的解决方案并没有真正起作用。WSDL中有很多,比如100多个名称冲突。

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

<标题>

更新到目前为止,我能找到的是使用<jaxb:nameXmlTransform>每个问题与JAXB: nameXmlTransform typeName前缀不工作

<?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>

最新更新