2017-01-18 3 views
0

で同じことを確認する必要があることはここでの話です:SOAPUI(5.2.1)からのリクエストを送信SOAP UIは、エラー500が受信された後でもエラーストリングを表示します。 JAVA

は私に正しい応答や、無効なパラメータの場合には、XML形式のエラーのいずれかを提供します。 SOAPUIログを見ると、これは私が見たものである。

Wed Jan 18 16:32:39 EST 2017:DEBUG:Attempt 1 to execute request 

Wed Jan 18 16:32:39 EST 2017:DEBUG:Sending request: POST/XBC/services/TranslateGeometryService HTTP/1.1 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Receiving response: HTTP/1.1 401 Unauthorized 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Connection can be kept alive for 10000 MILLISECONDS 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Target requested authentication 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Authorization challenge processed 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Authentication scope: BASIC 'Spring Security Application'@mywebservice:80 

Wed Jan 18 16:32:48 EST 2017:INFO:mywebservice:80 requires authentication with the realm 'Spring Security Application' 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Found credentials 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Attempt 2 to execute request 

Wed Jan 18 16:32:48 EST 2017:DEBUG:Sending request: POST/XBC/services/TranslateGeometryService HTTP/1.1 

Wed Jan 18 16:33:14 EST 2017:DEBUG:Receiving response: HTTP/1.1 500 Internal Server Error 

Wed Jan 18 16:33:14 EST 2017:DEBUG:Connection shut down 

Wed Jan 18 16:33:14 EST 2017:INFO:Got response for [TranslateGeometrySoap11.getLocationFromTramPoleTrackOffset:Request 1] in 35794ms (312 bytes) 

(それらの312のバイトは、エラー500の後に来るとの接続がメッセージをシャットダウンすることに注意してください)

レスポンスウィンドウ、同時に、SOAPUIでこれを示しています:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
<SOAP-ENV:Header/> 
    <SOAP-ENV:Body> 
     <SOAP-ENV:Fault> 
      <faultcode>SOAP-ENV:Server</faultcode> 
      <faultstring xml:lang="en">Error: No Track exists with Track Code: CHS-CSK-UP-TW</faultstring> 
     </SOAP-ENV:Fault> 
    </SOAP-ENV:Body> 

これは完璧ですし、私はそれが動作することを期待して動作します。

私の問題は、真剣に私を怒らせることです。 は、私は上記のエラーを返すことになっている私のJavaコードからまったく同じ要求を送信しようとすると、私はIOExceptionが受け取ると言うこと: ServerがHTTPレスポンスコードが返さ:500 URLのために:http://mywebservice/XBC/services/TranslateGeometryService

ので、ほとんど同じSOAPUIがそのログに示すものと同じです。

しかし...

どんなに私は何をすべきか私のコードで私はSOAPUIが表示されることのfaultStringにそのメッセージを取得することはできません:「いいえトラックは、トラックコードで存在しません:CHS-CSK-UP-TW」。

エラー500を受信した後、SOAPUIはどのように処理しますか?あるいは、もっと重要なのは、エラー500を受け取った後、どのようにJAVAで取得するのですか?

SoapFaultExceptionクラスとSoapFaultで試してみましたが、どこでも何も見つかりませんでした。

この質問に答えようとしてくださった皆様、ありがとうございます。

乾杯、 ピエール

+0

plsは、あなたのコードを表示しますか? – Rao

+0

コードはうまく動いています。私はJavaのWebサービスと問題なく通信します。私はIOExceptionエラー500(SOAPUIのように)を受け取ったときにそのエラーを取得する必要があります。そのため、「エラー500」ではなくユーザーに表示することができます – kosmos2

答えて

0

のJavaハンドラ内の次のコードは、SOAP障害を検出し、SOAPBodyからフォルト文字列を抽出するためにSOAPMessageContextを使用しています。

public bool handleFault(SOAPMessageContext context) 
{ 
    try { 
     if (context.getMessage().getSOAPBody().hasFault()) { 
      SOAPFault fa = context.getMessage().getSOAPBody().getFault(); 
      System.err.println(fa.getFaultCode()); 
      System.err.println(fa.getFaultString()); 
     } 
     return true; 
    } catch (SOAPException ex) { 
     System.err.println("Fault parsing Exception:" + ex.getMessage()); 
     return true; 
    } 
    return false; 
} 
+0

返信ありがとうございましたArtem!以前はSOAPMessageContextを試していませんでした。今日それを試して、それが働いた場合にお知らせします。 – kosmos2

+0

こんにちはピエール、それはあなたのために働くのですか? –

+0

申し訳ありません、私はちょうど問題に深く掘り下げる時間がありませんでした。あまりにも多くのことをやるべきことがあり、意味のあるメッセージではなく、ユーザーにエラー500を表示するのは今のところ大丈夫です。私は今週末に向けて時間を持ち、解決策を見つけたら間違いなくあなたに知らせるでしょう。私は、その意味のあるメッセージを得るための私の応答がInputStreamReaderとして来ているという問題があることを知ることができます。だから私は最初にそれをSOAPMessageにキャストする方法を見つけなければなりません。フォローアップしてくれてありがとう。歓声の仲間 – kosmos2

関連する問題