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

问题描述:

我已经使用jaxb 2.2.6的xjc从xsd文件生成一组类。 通过编辑“package-info.java”我已将不同的名称空间关联到前缀值。 因此,我创建了一个测试类,其中包含Unmarshal xml文件,编辑一些信息并以xml格式编组对象。 一切正如魅力和javax.xml.bind.Marshaller对象正确地匹配package-info中定义的名称空间和前缀。JAXB在Tomcat上的AXIS2 WebService应用程序中的名称空间转换7

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

..... 
    <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,其中声明了名称空间转换。

我该如何解决这个问题?

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

+0

问题是,如果应用程序在axis2/tomcat7上下文中作为“Java应用程序”或“Web Service应用程序”运行,则使用jaxb创建的对象进行编组的操作将有所不同。 在第二种情况下,名称空间转换不起作用。 – f0rb1dd3n403 2013-04-23 08:23:11

+0

@ f0rb1dd3n403 - 你可以发布你得到的两个不同的输出吗? – 2013-04-23 11:48:10

+0

我已经编辑添加不同输出的帖子。 – f0rb1dd3n403 2013-04-23 14:11:56