我们使用的是使用axis2生成java文件的第三方wsdl文件。现在我们遇到一个问题,即不同文件中存在重复元素,但具有相同的命名空间。
示例:
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>
...
问候/约翰
答案 0 :(得分:2)
供应商至少非常糟糕的wsdl设计(特别是对于其公司名称中包含“标准”一词的那个):全局类型/元素定义应该制作一次,即放入单独的全局XSD-文件(就像他们在这里做的那样:
<xsd:include schemaLocation="STARWSDLDataTypes.xsd"/>
)。
此外,servicenamespace应保持特定于服务,以便提供有关服务版本控制的灵活性。
我担心这个实际的星座(相同名称空间+ wsdls中的重复元素声明)是一个灰色区域主题 - 我没有在网上找到任何关于此的明确声明,所以你唯一的解决方案可能是针对两个wsdl文件进行开发完全分开了。含义axis2-wise 2个应用程序(每个wsdl 1个)而不是一个共享应用程序。