2012-02-22 6 views
1

Axis 1.4を使用してWebサービスに接続しています。エラーの説明と、HTTPステータスコード202応答でSOAPエンベロープで応答することによって、このサービス信号の誤差は以下のようになります。HTTPステータスが202 - バグまたは機能の場合、Axis 1.4はSOAPエンベロープをデコードしていませんか?

テスト応答は、WSDLで記述されて
<soap:Envelope> 
<soap:Body> 
<TestResponse> 
    <TestResult>wrong format</TestResult> 
</TestResponse> 
</soap:Body> 
</soap:Envelope> 

:で、

<s:element name="TestResponse"> 
    <s:complexType> 
     <s:sequence> 
     <s:element minOccurs="0" maxOccurs="1" name="TestResult" type="s:string"/> 
     </s:sequence> 
    </s:complexType> 
    </s:element> 

だから私の意見はすべてOKです。問題は、Axisで生成されたスタブで、その代わりにnullを受け取ったというエラーメッセージが表示されないということです。私はデバッグとして、私はHTTPSenderクラスライン705内の行を見つけた:

if ((returnCode > 199) && (returnCode < 300)) { 
    if (returnCode == 202) { 
     return inp; 
    } 
    // SOAP return is OK - so fall through 
} 

これは、SOAPエンベロープをデコードするコードを、スキップします。最後に、間違ったリクエスト(ユーザーパスワードの期限切れなどのランタイムは何でもかまいません)を送信しましたが、エラーの説明が表示されますが、Axisを使用しているため、アクセスがなく、デバッグが非常に便利なnullハード(私はWiresharkを使用して見つけた投稿の応答)。

私の質問は、バグですか、機能ですか? WebサービスがHTTPステータス202または標準を悪用させてしまったため、Axisはそれをサポートするにはあまりにも原始的ですか?最高で私は手動で通信をコーディングするのを避けたいと思います。をApacheなどから入手してください。

答えて

1

これはバグのようです。 HTTP 202 Acceptedステータスコードは、リクエストが受け入れられたことを示すために使用されますが、完了するためにはさらに処理が必要です。 には、サービスに行うことができるコールバックを表し、リクエストのステータスを確認するためのヘッダーと、説明メッセージ付きのオプションの本文があります。

Webサービスの場合、コンテンツがサービス契約(この場合はWSDL)と一致している限り、サービス実装者は本体応答を処理することが期待されます。しかし、Axisの実装者は、異なる感触を感じたかもしれません。

いずれの場合でも、ベンダーは間違って202ステータスコードを使用してエラーを返しています。これは問題の(大きな)部分です。

+0

ふつう、どちらもエラーがありますが、問題は何ですか? Axisのソースを適切なソリューションに変更していますか? –

+1

Axisにパッチを適用する必要があるかもしれません。彼らは2005年以来解決されていない1.xブランチに対してこれに対する未解決の要求があるように見えます - https://issues.apache.org/jira/browse/AXIS-1845。 – Perception