XML メッセージの一部の内部部分を抽出することになっている Camel ルートを指定して、そこから新しいメッセージを作成して渡します。
from(SUB_EXTRACT_XML)
.setExchangePattern(ExchangePattern.InOut)
.setBody().xpath("//mmsg:MyMessage/mmsg:AnyPayload/*", namespaces)
.setBody().simple("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n${in.body}")
.to(...)
このような正しい入力メッセージ (「埋め込まれた」xml メッセージは、xs:any によってスキーマで定義された内部にあります) の場合、メッセージは私が期待するものであるため、機能しています:
<mmsg:MyMessage>
<mmsg:RandomTags/>
...
<mmsg:AnyPayload> <!-- xs:any in xsd -->
<some><xml/><here/></some>
</mmsg:AnyPayload>
</mmsg:MyMessage>
mmsg:AnyPayload タグが欠落しているなど、XML メッセージに問題があり、XPATH が機能しない場合:
<mmsg:MyMessage>
<mmsg:RandomTags/>
...
<some><xml/><here/></some>
</mmsg:MyMessage>
XPATH はデータの抽出に失敗し、XML メッセージ全体 (mmsg:MyMessage を含む) が渡されますが、これは意図したものではありません。この段階で例外をスローします。
質問:
xpath 式が実際にルートの後半で参照される要素を見つけたかどうか、または指定された要素の抽出に失敗したかどうかを確認する方法はありますか?
以前にメッセージのスキーマ検証を行って不要なメッセージを拒否できたことは知っていますが、XPath 式が失敗したかどうかを確認する方法はありますか?