4

基本的に、JAXWSを使用してWebサービスを作成しました。SOAPを使用して動作します。ただし、一部のリクエストでは、一部のクライアントがクラッシュ/エラーし、JAXWSWebサービスがcontent-lengthヘッダーを送信しないという事実に関連しているようです。追加する方法はありますか?

使用:openjdk-6(6b20)

私のクラスは次のようになります。

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import javax.xml.ws.Endpoint;

@WebService
public class SOAP {
public static void main(String[] args) {
    try {
        SOAP server = new SOAP();
        Endpoint endpoint = Endpoint.publish('localhost:1234', server);
    } catch (Exception e) {
                Utils.getLog("SOAP").fatal("General Error", e);
    }
}
}

tcpdumpを使用すると、応答にcontent-lengthがないことが確認されます。

0x0000:  4500 00b0 4da5 4000 4006 20d5 5cf3 1021  E...M.@.@...\..!
0x0010:  5cf3 01c7 13b2 bcea a9be 716e 14c3 16a1  \.........qn....
0x0020:  8018 006c cc70 0000 0101 080a 2e1b 3ccc  ...l.p........<.
0x0030:  2e18 23a2 4854 5450 2f31 2e31 2032 3030  ..#.HTTP/1.1.200
0x0040:  204f 4b0d 0a54 7261 6e73 6665 722d 656e  .OK..Transfer-en
0x0050:  636f 6469 6e67 3a20 6368 756e 6b65 640d  coding:.chunked.
0x0060:  0a43 6f6e 7465 6e74 2d74 7970 653a 2074  .Content-type:.t
0x0070:  6578 742f 786d 6c3b 6368 6172 7365 743d  ext/xml;charset=
0x0080:  2275 7466 2d38 220d 0a44 6174 653a 2053  "utf-8"..Date:.S
0x0090:  6174 2c20 3137 2053 6570 2032 3031 3120  at,.17.Sep.2011.
0x00a0:  3134 3a31 393a 3337 2047 4d54 0d0a 0d0a  14:19:37.GMT....

だから私の質問は、返信と一緒にコンテンツの長さを送信するようにWebサービスに指示する方法はありますか?または、返信が送信される前に追加する方法はありますか?

4

2 に答える 2

3

ハンドラーを作成することにより、発信応答にHTTPヘッダーを追加できます。ハンドラーは、標準のJAX-WSハンドラーを拡張し、handleMessage(Cコンテキスト)メソッドでMessageContextを使用して、HTTP_RESPONSE_HEADERプロパティ(実際にはマップ内のキー)を変更します。たとえば、ハンドラーは次のようになります。

public class MyHandler<SOAPMessageContext> implements Handler {

    public boolean handleMessage(SOAPMessageContext c) {
        if((Boolean)c.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)) {
            c.put(SOAPMessageContext.HTTP_RESPONSE_HEADERS,"your header stuff here");
            return true;
        }
    }
 }

ハンドラチェーンファイルを作成し、エンドポイントクラスでそのファイルを指すアノテーションを追加する必要があります。アノテーションは@HandlerChain(file = "...");です。

これを行うと、インとアウトバウンドのHTTPヘッダーを変更できるようになります。HTH。

于 2011-09-17T17:50:35.643 に答える
1

プロバイダーがチャンク化されたメッセージを受け入れないという同様の問題がありました...ヘッダーにもContent-lengthが設定されず、実際にメッセージがチャンク化され、Webサービスプロバイダーが私の呼び出しを拒否しました...これは使用していましたJAX-WSランタイムとしてAxis21.6を使用するJAX-WS。

HTTPヘッダーを追加してContent-lengthを手動で追加しようとしましたが、これにより他の問題が発生します。ハンドラーのSOAPMessageContextでHTTPConstants.CHUNKEDをfalseに設定することで、最終的には機能するようになりました。

私はここについてブログを書きました:http: //btarlton.blogspot.com/2013/03/jax-ws-with-axis2-how-to-disable.html# !/ 2013/03 / jax-ws-with-axis2-how -to-disable.html

JAX-WSランタイムとしてAxis2を使用した場合、これが私が見つけた唯一の修正でした。

于 2013-03-12T15:03:43.713 に答える