我对JAXB并不是很熟悉,但这是我拥有的上下文,请阅读所有需要理解的内容。无法在JAXB生成的模型中调用空值的“get”
我做以下获得使用JAXB从这个XML值...
XML文档片段(原文):
<Request deploymentMode="production">
<OrderRequest>
<OrderRequestHeader orderID="12345" orderDate="2012-07-04" type="new">
<Total>
<Money currency="USD">200.0</Money>
</Total>
<ShipTo>
<Address>
<Name xml:lang="">Test</Name>
<PostalAddress name="default">
<DeliverTo/>
<Street>Value 1</Street>
<City>Value 2</City>
<State>Value 3</State>
<PostalCode>302010</PostalCode>
<Country isoCountryCode="US">USA</Country>
</PostalAddress>
</Address>
</ShipTo>
因此,值我想要的是State
from PostalAddress
我使用此代码:
String state = xml.getRequest().getOrderRequest().getOrderRequestHeader().getShipTo().getAddress().getPostalAddress().getState();
//This will return "Value 3"
一切正常。
2.的问题在这一点上开始,我会做上述相同,但使用现在这个XML ...
XML文档片段的(其他):
<Request deploymentMode="production">
<OrderRequest>
<OrderRequestHeader orderID="12345" orderDate="2012-07-04" type="new">
<Total>
<Money currency="USD">200.0</Money>
</Total>
<ShipTo>
<Address>
<Name xml:lang="">Test</Name>
</Address>
</ShipTo>
那么,我知道价值不存在,但我不想对我的代码做任何改变,仍然使用这个:
String state = xml.getRequest().getOrderRequest().getOrderRequestHeader().getShipTo().getAddress().getPostalAddress().getState();
上述代码将产生一个NullPointerException
并停止该过程。我需要的不是阻止进程,因为这不是我从XML中提取的唯一值(这只是我正在处理的一个示例)。所以,如果找不到价值,那么我希望我的state
变量自动变为null
。
问:是否有不生产和异常,并让我的字符串变量的方式state
只是null
如果该值不能被发现的?
PS。一个可能的解决办法是做这样的事情:
//Fill the entity
PostalAddressType p = xml.getRequest().getOrderRequest().getOrderRequestHeader().getShipTo().getAddress().getPostalAddress();
//Variable for state
String state = null;
//Evaluate if it is null or not
if(p != null)
//Capture the value if not null
state = p.getState();
但我不喜欢做的if
语句我的XML的每个实体。正如我所说的,我想在不修改代码的情况下自动执行某些操作,并且我不知道是否有一些JAXB配置或需要执行的操作。
在此先感谢。
如果你正在提取有限的信息,并且正在创建对象,其中大部分你不会使用或需要,那么也许你应该考虑通过使用XPath或类似的东西来简化事情。 –
@HovercraftFullOfEels不是一个有限的信息量,我正在提取一个大的值列表,我只是把我的问题的一个例子理解为:-) –
由于没有“JAXB故障”,所以您的问题的标题已更改。 –