我们正在使用第三方 wsdl 文件,我们正在使用axis2生成java文件。现在我们有一个问题,不同文件中存在重复元素但具有相同的命名空间。
例子:
file1.wsdl => <xsd:element name="MyElementName">
file2.wsdl => <xsd:element name="MyElementName">
因此,结果是同一个文件从不同的 wsdl 文件生成了两次,因此在文件生成之后只有最后一个生成的文件实际存在。
我想知道这是否真的正确,或者是否是 wsdl 文件的设计缺陷?如果没有,如何使用axis2解决这个问题?
编辑
好的,所以我找到了一个标志,我可以为这些类使用不同的包,所以现在我有了
com.package.MyElementName
com.package.ext.MyElementName
但是,它仍然不起作用,因为轴(或 xmlbeans)给了我错误的类。
看看这个例子。我会假设这会起作用,但我会得到一个 ClassCastException
java.lang.ClassCastException:com.package.MyElementName.impl.MyElementNameDocumentImpl 无法转换为 com.package.ext.MyElementNameDocument
com.mypackage.ext.MyElementNameDocument doc1 =
com.mypackage.ext.MyElementNameDocument.Factory.newInstance();
doc1.addNewMyElementName();
com.mypackage.ext.MyElementNameDocument doc2 =
com.mypackage.ext.MyElementNameDocument.Factory.parse(doc1.toString());
编辑 -
好的,我在网上找到了真实的例子,所以我不妨展示真实的例子。
http://dtd.cobaltgroup.com/STAR/5.2.4/WSDL/Templates/
在许多其他人中,有这两个
http://dtd.cobaltgroup.com/STAR/5.2.4/WSDL/Templates/GetServiceProcessingAdvisory.wsdl http://dtd.cobaltgroup.com/STAR/5.2.4/WSDL/Templates/GetStandardCodes.wsdl
如您所见,它们都具有元素 ProcessMessage。希望这能澄清一些事情。
</xsd:complexType>
<!--Global Elements used by the Bindings--><xsd:element name="ProcessMessage">
<xsd:annotation>
<xsd:documentation source="http://www.starstandard.org">
Process Message Input
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="payload"
type="starws:GetServiceProcessingAdvisoryPayload" minOccurs="0"
maxOccurs="1"
form="qualified"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!--Global Elements used by the Bindings--><xsd:element name="ProcessMessage">
<xsd:annotation>
<xsd:documentation source="http://www.starstandard.org">
Process Message Input
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="payload" type="starws:GetStandardCodesPayload"
minOccurs="0"
maxOccurs="1"
form="qualified"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
……
问候/约翰