私は 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
fromPostalAddress
であり、次のコードを使用します。
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
自動的に設定したいと考えています。
Q:値が見つからない場合に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 構成またはこれを行うための何かがあるかどうかはわかりません。
前もって感謝します。