Java Tomcat 7上AXIS2 WebService应用程序中的JAXB命名空间转换

Java Tomcat 7上AXIS2 WebService应用程序中的JAXB命名空间转换,java,jaxb,tomcat7,axis2,xjc,Java,Jaxb,Tomcat7,Axis2,Xjc,我已经使用JAXB2.2.6的xjc从xsd文件生成了一组类。 通过编辑“package info.java”,我将前缀值关联到不同的名称空间。 因此,我创建了一个带有main的测试类,它可以解组xml文件,编辑一些信息,并以xml格式封送对象。 一切都像charm一样工作,javax.xml.bind.Marshaller对象与package info中定义的名称空间和前缀正确匹配 当我在同一台机器上使用axis2在tomcat7上将此应用程序部署为WS,并调用执行上述代码的WS方法javax

我已经使用JAXB2.2.6的xjc从xsd文件生成了一组类。 通过编辑“package info.java”,我将前缀值关联到不同的名称空间。 因此,我创建了一个带有main的测试类,它可以解组xml文件,编辑一些信息,并以xml格式封送对象。 一切都像charm一样工作,javax.xml.bind.Marshaller对象与package info中定义的名称空间和前缀正确匹配

当我在同一台机器上使用axis2在tomcat7上将此应用程序部署为WS,并调用执行上述代码的WS方法javax.xml.bind.Marshaller时,创建一个具有默认名称空间(ns1、ns2…)的xml文件

我使用的package-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应用程序”的形式执行代码时获得的):

。。。。。
自闭症
自闭症
自闭症
自闭症
自闭症
......
这是一个错误的输出(该输出是在“Axis2/Tomcat7 WS应用程序”中执行代码时获得的):

。。。。。
自闭症
自闭症
自闭症
自闭症
自闭症
......
对于每种情况,都存在一个package-info.java,其中声明了名称空间转换


如何解决此问题?

实现不需要使用
@XmlSchema
注释中定义的前缀。使用的前缀并不重要,JAXB(JAX-WS)实现之间的名称空间限定将是相同的,尽管前缀可能不同。

问题是,如果应用程序作为“Java应用程序”或“Web服务应用程序”运行,则从使用JAXB创建的对象进行编组的操作的工作方式不同,在axis2/tomcat7上下文中。在第二种情况下,名称空间转换不起作用。@f0rb1dd3n403-您可以发布您获得的两个不同输出吗?@f0rb1dd3n403-如果
rm
指向与
ns2
相同的名称空间,并且
xnl
指向与
ns7
相同的名称空间,则XML文档具有相同的名称空间限定。
@XmlSchema
中提供的前缀只是提示,不需要使用。是的,Rm指向Ns2的同一名称空间,其他前缀也一样。我同意你的观点,前缀只是提示,但我必须找到一种方法,将我的自定义前缀与包信息方法不同。我不明白为什么这个方法在web服务上下文中不起作用。你有什么想法吗?谢谢。@f0rb1dd3n403-不是名称空间前缀没有保留在web服务上下文中。相反,JAX-WS实现所利用的JAXB impl不会保留前缀。你想要一个特定的前缀仅仅是出于美学上的原因吗?
.....
    <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>
......
.....
  <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>
......