2013-04-22 63 views
2

我已經使用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,其中聲明瞭名稱空間轉換。

我該如何解決這個問題?

回答

1

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

相關問題