2011-10-03 153 views
1

我已經創建了一個使用JAXB的Java Web服務應用程序。當我使用SoapUI測試我的應用程序併發送SOAP消息(如<foo></foo>)時,它將轉換爲0,但如果我的SOAP消息中沒有<foo>標記,它將轉換爲null。爲什麼<foo></foo>沒有轉換爲null?我該如何改變它?<foo></foo>和JAXB中的null有什麼區別?

@WebMethod 
public void test(Integer foo) { 
    System.out.print(foo); 
} 

回答

2

null通常表示「未知」。由於foo不存在,所以絕對沒有關於它的信息。你不能分配一個默認的0,因爲這可能是絕對錯誤的/災難性的。你所能做的就是說「我不知道」,歸結爲空。另一方面,<foo></foo>意味着foo存在且爲空,通常歸結爲0

1

如果您使用的是JAXB 2.2,那麼您可以在參數級別指定@XmlElement(nillable=true)註釋以使XML表示爲xsi:nil="true"

@WebMethod 
public void test(@XmlElement(nillable=true) Integer foo) { 
    System.out.print(foo); 
} 
+0

我正在使用JAXB2.1。如果我把@XmlElement放到你告訴我的地方,就會出現編譯錯誤。 – Chris

+0

@Chris - 在JAXB 2.2中引入了在參數級別設置「@ XmlElement」註釋的功能。 –

相關問題