2011-10-03 97 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”注释的功能。 –

相关问题