SAXException Invalid Element

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

SAXException Invalid Element

Aman Hisayoshi


以下の件につき、質問があります。



当環境では、バッチ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: [hidden email]
For additional commands, e-mail: [hidden email]