我對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故障」,所以您的問題的標題已更改。 –