我正在使用一个外部第三方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中描述的问题
然而,上面帖子中的解决方案并不是真的有效。像100+一样,WSDL中有很多名称冲突。
在我创建一个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的常见场景吗?还是因为我错过了什么?
谢谢!
发布于 2021-02-23 22:08:36
事实证明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>
https://stackoverflow.com/questions/66341286
复制相似问题