2

public class MessageHandler implements SOAPHandler<SOAPMessageContext> {
    public boolean handleMessage(SOAPMessageContext messageContext) {
       SOAPMessage msg = messageContext.getMessage();

       Boolean outbound = (Boolean) messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); 
       if(outbound) { 
           System.out.println("SOAP message departing…"); 
           System.out.println("************** "+messageContext.get(MessageContext.HTTP_RESPONSE_CODE));


           MimeHeaders mh = msg.getMimeHeaders();
           mh.setHeader("customer-header", "customer-header");

           Iterator itr3 = mh.getAllHeaders();
           while(itr3.hasNext()) {
               MimeHeader obj = (MimeHeader) itr3.next();
               System.out.println("hhhhhhhhhhhhhhhhh "+obj.getName());
               System.out.println("hhhhhhhhhhhhhhhhh "+obj.getValue());
}

これは、SOAP 応答にカスタム ヘッダーを追加しようとしている SOAP メッセージ ハンドラーの handleMessage メソッドのコード スニペットです。MimeHeader オブジェクトに追加することはできますが、Web サービスを呼び出すと、応答にそれが含まれていません。

私が気付いたもう 1 つのことは、MimeHeader のヘッダーが、SOAP 応答で取得しているヘッダーとまったく一致しないことです。それらはリクエストヘッダーとも一致しません。SOAP UI を使用して SOAP サービスを呼び出し、ヘッダーを表示しています。

ここで私が間違っていることを理解するのを手伝ってください。

4

1 に答える 1

1

あなたがやろうとしていることはあまり明確ではありませんが、リクエストとレスポンスのヘッダーについて言及しているので、これはあなたが求めているものかもしれません:

@SuppressWarnings("unchecked")
Map<String, List<String>> headers = (Map<String, List<String>>)messageContext.get(MessageContext.HTTP_RESPONSE_HEADERS);
List<String> value = new ArrayList<String>();
value.add("customer-header");
headers.put("customer-header", value);

saveChanges()MimeHeaders は、SOAP 添付ファイルを使用するときにメッセージの MIME 部分に存在するヘッダー用であり、その後も呼び出す必要があると思います。通常のヘッダーの場合、使用する必要がありますMessageContext.HTTP_RESPONSE_HEADERS

あなたのコメントに基づいて編集:

これを試しましたが、null の「ヘッダー」オブジェクトを取得しているため、カスタムヘッダーを追加しようとすると null ポインター例外がスローされます。

実装が null を返す場合でも、応答にカスタム ヘッダーを追加できるはずです。代わりに次のようなことを試しましたか:

@SuppressWarnings("unchecked")
Map<String, List<String>> headers = (Map<String, List<String>>)messageContext.get(MessageContext.HTTP_RESPONSE_HEADERS);

List<String> value = new ArrayList<String>();
value.add("customer-header");

if (headers != null) {
    headers.put("customer-header", value);
} else {
    Map<String, List<String>> brandNewHeaders = new HashMap<String, List<String>>();
    brandNewHeaders.put("customer-header", value);
    messageContext.put(MessageContext.HTTP_RESPONSE_HEADERS, brandNewHeaders);
}
于 2013-09-07T10:09:43.730 に答える