以下の件につき、質問があります。
当環境では、バッチAとバッチBの処理内にてSOAP-XMLの受信方法について
Apatch Axis SAX版とDOM版を併用して利用しています。
(バッチA:SAX版、バッチB:DOM版)
その際、SOAP-XML受信(javaBeanへの反映)にてAxis Faultが発生しました。
以下の事象に関して、制約、もしくは根本原因、対応策があれば教えてください。
障害の内容は、以下の通りです。
JavaVM起動後、最初にSAX版が実行されると、以降のDOM版でAxis Faultが発生いたします。(以下1.)
JavaVM起動後,最初にDOM版実行のケースは、以降のDOM版及びSAX版でAxisFaultは発生しません。(以下2.)
JavaVM起動後、最初にSAX実行後に、DOM版実行のケースは、以降のSAX版でAxisFaultは発生しません。(以下3.)
パターン別の発生詳細(障害発生箇所は以下の(NG)で発生)
1. JVM起動 → SAX実行 → DOM実行(NG)
2. JVM起動 → DOM実行 → SAX実行
3. JVM起動 → SAX実行 → DOM実行(NG) → SAX実行
解析詳細(調査した範囲内です)
Axis Faultの理由は「SAX Exception」でSOAP-XMLのJavaBeanへのDeserializeの際に、
「item内の無効な要素/[en]-(Invalid element in
xx.xx.xx.xx_xx.xx.xx.SearchOrderResult-item)」
とのメッセージが出力され、Javaの型「SearchOrderResult」にitemフィールドが存在しないという
エラーになっております。
Itemとは、SoapEnvelopeでフィールドをまとめる役割で必ず返却されるタグで、
DeserializeされるJavaのフィールドでは、ありません。
SAX版が初回に実行されると、DOM版でDeserialzeする際に、
SoapEnvelopeの解釈が正しく行われていないことも確認できております。
SearchOrderResultに存在しないフィールド(例えばitem)がSoapEnvelopeに含まれた場合も
同一の箇所で同一のエラーになることも確認できております。
しかしながら、なぜSAX版が最初に実行された場合に、DOM版でこのようなエラーになるかという
直接的な原因はApacheAxisAPI内部の解析が困難なため、正確には判明できておりません。
推測ですが、SAX版が初回に実行されたときのDeserializerの登録が、
以降のDOM版実行に影響を与えていると考えております。
(SAX版はregistを呼び出し登録。DOM版はregistを呼び出さず登録していない)
以上、よろしく、お願いいたします。
---------------------------------------------------------------------
To unsubscribe, e-mail:
[メールアドレス保護]
For additional commands, e-mail:
[メールアドレス保護]