2011-04-14 103 views
1

我需要添加自定義的肥皂頭,就像登錄 我做的方式是這樣添加標題到SOAP消息

class Foo implements SOAPHandler<SOAPMessageContext> { 
    public boolean handleMessage(SOAPMessageContext context) { 
     try { 
      SOAPMessage soapMsg = context.getMessage(); 
      SOAPEnvelope soapEnv = soapMsg.getSOAPPart().getEnvelope(); 
      soapEnv.addHeader().addAttribute(new QName("login"), "bob"); 

      soapMsg.writeTo(System.out);//tracing OUT 
      return true; 
     } catch (SOAPException e) { 
      throw new RuntimeException(e); 
     } catch (IOException e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 

@HandlerChain(file="handler-chain.xml")//I describe Foo in this file 
public class GreeterService 

通過tracing out我得到消息

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Header login="bob"/><S:Body><ns2:sayGoodbye xmlns:ns2="http://example.com/"><arg0>SOAP</arg0></ns2:sayGoodbye></S:Body></S:Envelope> 

與頭

<S:Header login="bob"/> 

但服務器收到它沒有任何標題

<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:sayGoodbye xmlns:ns2="http://example.com/"><arg0 xmlns="">SOAP</arg0></ns2:sayGoodbye></S:Body></S:Envelope> 

我做錯了什麼?

+0

它是由wsimport生成代碼嗎? – StKiller 2011-04-14 19:30:56

+0

@StKiller,正確。我只添加SOAPHandler。 – 2011-04-14 19:35:08

回答

4

我前幾天有類似的問題,有需要通過標題發送用戶ID。

我使用特殊參數 - wsimport -XadditionalHeaders生成代碼時解決了此問題。

+0

不幸的是,這個選項沒有任何影響。它仍然會生成相同的類。 – 2011-04-14 19:56:19

+0

好的,但源wsdl包含標題的定義? – StKiller 2011-04-14 19:59:08

+0

我應該說一點。實際上,在wsdl中沒有關於標題的任何信息。這是一種可選的標題,我自己處理。 – 2011-04-14 19:59:09