Мы используем сторонние файлы wsdl, которые мы создаем с помощью файлов Java с помощью axis2. Теперь у нас есть проблема, что есть повторяющиеся элементы в разных файлах, но с одним и тем же пространством имен.
Пример:
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>
....
С уважением /Йохан