繁体   English   中英

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

[英]JAXB Namespace translation in a AXIS2 WebService application on Tomcat 7

我已经使用jaxb 2.2.6的xjc从xsd文件生成了一组类。 通过编辑“ package-info.java”,我已将前缀值与不同的名称空间相关联。 因此,我创建了一个测试类,其主类负责解组xml文件,编辑一些信息并以xml格式对对象进行编组。 一切都像吊饰一样工作,并且javax.xml.bind.Marshaller对象正确匹配了package-info中定义的名称空间和前缀。

当我在同一台机器上的tomcat7上使用axis2将此应用程序部署为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应用程序”执行代码时获得此输出):

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

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

我该如何解决这个问题?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM