- PR -

Fault情報の取得について

1
投稿者投稿内容
テンパラー
会議室デビュー日: 2003/05/29
投稿数: 2
投稿日時: 2003-06-02 00:22
皆さん、初めまして。
早速ですみませんが、お知恵を拝借できますでしょうか。

現在、あるサービスのクライアント側テストサンプルをJAXMで作成しているのですが、
SOAPFault情報が取得出来ずに悩んでいます。

正常データの処理結果取得時には下記のような受信メッセージが返るのですが、
エラーデータの処理結果取得時にはSOAPExceptionが発生してしまいます。


■実行ログ(正常処理結果取得時)
------------------------
送信メッセージ

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<ns1:getServiceInfo xmlns:ns1="Srv001">
<common>
<ServiceCode>32500556</ServiceCode>
</common>
<ServiceInfo>
<SrvType>1</SrvType>
<SrvCode>0123456789</SrvCode>
<OrderCode>MzAwMDAwMzA5OQ==</OrderCode> ←Base64エンコードしています。
<MailAdd>testuser@client.co.jp</MailAdd>
<UserName>TestUser</UserName>
</ServiceInfo>
</ns1:getDownLoadInfo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


受信メッセージ

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<ns1:getServiceInfoResponse xmlns:ns1="Srv001">
<getServiceInfoResult>
<ResultCode>0000</ResultCode>
<ServiceInfoResult>
<InfoUrl>aHR0cDovL2Rvd25sb2FkLmNvbTo3MDAyL0Rvd25Mb2FkQ01DUD9ETFNFUT1BRyZQAmU0VSVklTE=</InfoUrl>
</ServiceInfoResult>
</getServiceInfoResult>
</ns1:getServiceInfoResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
------------------------

■例外メッセージ(Fault情報取得時)
------------------------

javax.xml.soap.SOAPException: Client Error
at org.apache.axis.soap.SOAPConnectionImpl.call(SOAPConnectionImpl.java:
99)
at Client.main(Client.java:100)
Caused by: Client Error
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.
java:135)
at org.apache.axis.encoding.DeserializationContextImpl.endElement(Deseri
alizationContextImpl.java:942)
at org.apache.xerces.parsers.SAXParser.endElement(SAXParser.java:1403)
at org.apache.xerces.validators.common.XMLValidator.callEndElement(XMLVa
lidator.java:1550)
at org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.disp
atch(XMLDocumentScanner.java:1204)
at org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentS
canner.java:381)
at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
at org.apache.axis.encoding.DeserializationContextImpl.parse(Deserializa
tionContextImpl.java:232)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:546)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:377)
at org.apache.axis.client.Call.invokeEngine(Call.java:2132)
at org.apache.axis.client.Call.invoke(Call.java:2102)
at org.apache.axis.client.Call.invoke(Call.java:1373)
at org.apache.axis.soap.SOAPConnectionImpl.call(SOAPConnectionImpl.java:
94)
... 1 more

------------------------


例外メッセージを見る限りでは、サーバ側から取得したSOAPFaultを参照しようとしては
いるものの、要素の取得に失敗して例外が発生しているように思えるのですが・・・。
応答を受け取る時点で例外発生してしまうため、Web上で公開されているような処理を
施してもFault情報が取得できません。

ネットや書籍等で調べてみたのですが、そのような現象について記載しているものを
見つけることができませんでした。
上記にような現象についてご存知の方がおられましたら、教えて頂けますでしょうか。
いたち
常連さん
会議室デビュー日: 2003/04/25
投稿数: 27
投稿日時: 2003-06-02 10:39
ども、いたちです。

引用:


■例外メッセージ(Fault情報取得時)
------------------------

javax.xml.soap.SOAPException: Client Error
at org.apache.axis.soap.SOAPConnectionImpl.call(SOAPConnectionImpl.java:
99)
at Client.main(Client.java:100)
Caused by: Client Error
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.
java:135)
at org.apache.axis.encoding.DeserializationContextImpl.endElement(Deseri
alizationContextImpl.java:942)
at org.apache.xerces.parsers.SAXParser.endElement(SAXParser.java:1403)
at org.apache.xerces.validators.common.XMLValidator.callEndElement(XMLVa
lidator.java:1550)
at org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.disp
atch(XMLDocumentScanner.java:1204)
at org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentS
canner.java:381)
at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
at org.apache.axis.encoding.DeserializationContextImpl.parse(Deserializa
tionContextImpl.java:232)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:546)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:377)
at org.apache.axis.client.Call.invokeEngine(Call.java:2132)
at org.apache.axis.client.Call.invoke(Call.java:2102)
at org.apache.axis.client.Call.invoke(Call.java:1373)
at org.apache.axis.soap.SOAPConnectionImpl.call(SOAPConnectionImpl.java:
94)
... 1 more

------------------------



例外を見る限りAXIS1.0を使っていると思います。以下AXIS1.0を前提に書きます。
例外が発生しているSOAPConnectionImplの99行目を見ると、AxisFaultをキャッチしています。AxisFaultはMessage#getSOAPEnvelopeで発生しますが、
getSOAPEnvelopeはサーバにリクエストを送る前ですので、
おそらくサーバアプリは実行されていないのではないでしょうか?
Fault情報取得時とありますが、受信メッセージにFaultは含まれていませんし・・・。
これ以上は何とも言えませんが、クライアントアプリを確認されてはどうでしょうか?

ちなみに、クライアントアプリを作ったのはJAXMではなくSAAJですよね?
テンパラー
会議室デビュー日: 2003/05/29
投稿数: 2
投稿日時: 2003-06-02 14:32
テンパラーです。
いたちさん初めまして。
早速のアドバイス有難うございます。

引用:

例外を見る限りAXIS1.0を使っていると思います。以下AXIS1.0を前提に書きます。
例外が発生しているSOAPConnectionImplの99行目を見ると、AxisFaultをキャッチしています。AxisFaultはMessage#getSOAPEnvelopeで発生しますが、
getSOAPEnvelopeはサーバにリクエストを送る前ですので、
おそらくサーバアプリは実行されていないのではないでしょうか?
Fault情報取得時とありますが、受信メッセージにFaultは含まれていませんし・・・。
これ以上は何とも言えませんが、クライアントアプリを確認されてはどうでしょうか?

ちなみに、クライアントアプリを作ったのはJAXMではなくSAAJですよね?



説明が足りなくて申し訳ありません。

仰るとおり、AXIS1.0を使用しています。
また私のほうでもいたちさんの御指摘部分に関して調べていたのですが、
確かにMessage#getSOAPEnvelopeでも発生しますが、例外メッセージの最後のほうに
SOAPConnectionImplの94行目が挙げられていることから、Message#invokeのほうで
AxisFaultが発生したのでは、と考えていました。

また、ログの受信メッセージは正常処理時にしか返って来ていないです。
例外発生時のログには送信メッセージのみが表示されていて、プロンプト上には
例外メッセージが表示される、という状態です。
その送信メッセージも、双方の違いは<SrvType>タグの値が1か2かだけで、
他は全く同じ内容なのですが・・・。

「JAXMで作成〜」と書いたのは、SAAJはJAXMの機能の一部という認識だった為ですが、
もしかしたら思い違いかもしれません。
1

スキルアップ/キャリアアップ(JOB@IT)