Преобразование пространства имен JAXB в приложении AXIS2 WebService на Tomcat 7


Я использовал xjc из jaxb 2.2.6 для генерации набора классов из файла xsd. Путем редактирования " пакет-инфо.java " я связал с различными пространствами имен значение префикса. Поэтому я создал тестовый класс с основным, который разобрал xml-файл, отредактировал некоторую информацию и маршалировал объект в формате xml. Все работает как заклинание и явакс.XML.связывать.Объект Marshaller правильно соответствует пространству имен и префиксу, как определено в package-info.

Когда я развертываю это приложение как WS, используя axis2 на tomcat7 в той же машине и вызовите метод ws, который выполняет код, описанный выше javax.XML.связывать.Маршаллер создает xml-файл с пространством имен по умолчанию (ns1, ns2....).

Пакет-информация.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 Применение"):

.....
  <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>
......

Для каждого случая существует пакет-информация.java, где объявлен перевод пространств имен.

Как я могу решить эту проблему?

1 2

1 ответ:

A JAXB (JSR-222) реализация не требует использования префиксов, определенных в аннотации @XmlSchema. Используемые префиксы не являются значимыми, и квалификация пространства имен между реализациями JAXB (JAX-WS) будет одинаковой, хотя префиксы могут отличаться.