Трансляция пространства имен JAXB в приложении AXIS2 WebService на Tomcat 7
Я использовал xjc из jaxb 2.2.6 для генерации набора классов из файла xsd. Редактируя "package-info.java", я связал различные пространства имен с префиксом. Итак, я создал тестовый класс с основным, который распаковывает XML-файл, редактирует некоторую информацию и размещает объект в формате XML. Все работает как charm, а объект javax.xml.bind.Marshaller правильно соответствует пространству имен и префиксу, как определено в package-info.
Когда я развертываю это приложение как WS, используя axis2 на tomcat7 на той же машине и вызываю метод ws, который выполняет код, описанный выше, javax.xml.bind.Marshaller создает файл XML с пространством имен по умолчанию (ns1, ns2....).
Пакет-info.java, который я использовал, выглядит примерно так:
@javax.xml.bind.annotation.XmlSchema(
namespace = "....",
xmlns = {
@XmlNs(namespaceURI = "....", prefix = "myprefix"),
@XmlNs(namespaceURI = "...", prefix = "myprefix2"),
},
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package ....;
import javax.xml.bind.annotation.XmlNs;
Это часть правильного вывода (Этот вывод получается, когда я выполняю код как "Java-приложение"):
.....
<ContactInformation>
<rm:ContactDescription>ASD</rm:ContactDescription>
<rm:ContactRole>ASD</rm:ContactRole>
<rm:ContactLocation/>
<rm:AdditionalContactInformation>
<xnl:PartyName>
<xnl:PersonName>
<xnl:NameElement xnl:ElementType="FirstName">ASD</xnl:NameElement>
<xnl:NameElement xnl:ElementType="LastName">ASD</xnl:NameElement>
</xnl:PersonName>
<xnl:OrganisationName>
<xnl:NameElement>ASD</xnl:NameElement>
</xnl:OrganisationName>
</xnl:PartyName>
</rm:AdditionalContactInformation>
</ContactInformation>
......
Это неправильный вывод (этот вывод получается, когда я выполняю код внутри "Axis2/Tomcat7 WS Application"):
.....
<ContactInformation>
<ns2:ContactDescription>ASD</ns2:ContactDescription>
<ns2:ContactRole>ASD</ns2:ContactRole>
<ns2:ContactLocation/>
<ns2:AdditionalContactInformation>
<ns7:PartyName>
<ns7:PersonName>
<ns7:NameElement ns7:ElementType="FirstName">ASD</ns7:NameElement>
<ns7:NameElement ns7:ElementType="LastName">ASD</ns7:NameElement>
</ns7:PersonName>
<ns7:OrganisationName>
<ns7:NameElement>ASD</ns7:NameElement>
</ns7:OrganisationName>
</ns7:PartyName>
</ns2:AdditionalContactInformation>
</ContactInformation>
......
Для каждого случая существует пакет-info.java, в котором объявляется перевод пространств имен.
Как я могу решить эту проблему?
1 ответ
Реализация JAXB (JSR-222) не обязана использовать префиксы, определенные в @XmlSchema
аннотаций. Используемые префиксы несущественны, и квалификация пространства имен между реализациями JAXB (JAX-WS) будет одинаковой, хотя префиксы могут отличаться.