我对 JAXB 不太熟悉,但这是我所拥有的上下文,请阅读所有内容以了解。
1.我正在执行以下操作以使用此 XML 中的 JAXB 获取值...
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 配置或为此做些什么。
提前致谢。