我使用 jaxb 2.2.6 的 xjc 从 xsd 文件生成一组类。通过编辑“package-info.java”,我将前缀值关联到不同的命名空间。因此,我创建了一个测试类,其主要功能是解组 xml 文件,编辑一些信息,并以 xml 格式编组对象。一切都像一个魅力和 javax.xml.bind.Marshaller 对象正确匹配包信息中定义的命名空间和前缀。
当我在同一台机器上的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,其中声明了名称空间转换。
我该如何解决这个问题?