2016-07-17 66 views
0

我試圖獲得期望的自定義​​標題爲我的SOAP請求:添加定製SOAP頭在Java中

我需要什麼:

<soapenv:Header> 
    <urn:SessionHeader> 
     <urn:sessionId>abcdef1234</urn:sessionId> 
    </urn:SessionHeader> 
</soapenv:Header> 

但是我得到的是:

<SOAP-ENV:Header> 
    <urn:sessionId xmlns:urn="www.dummy.com"> 
     abcdef1234 
    </urn:sessionId> 
</SOAP-ENV:Header> 

我需要從孩子節點刪除xmlns

下面是Java代碼我使用:

SOAPHeader header = soapMessage.getSOAPHeader(); 
SOAPHeaderElement messageId = soapMessage.getSOAPHeader().addHeaderElement(new QName("www.dummy.com", "sessionId","urn")); 
messageId.setTextContent("urn:abcdef1234"); 

如何處理這個有什麼建議?

+1

爲什麼你要刪除的命名空間聲明,但仍使用一個命名空間? - 在接收端使用支持命名空間的解析器。 – JimmyB

+0

嗨! @JimmyB,接收端不在我的控制之下...... :( 是不是有其他的方法可以讓我做到這一點? –

+0

對不起,我不知道,但是我確實知道使用沒有名字空間聲明它產生無效的XML - 也許值得一試:'addHeaderElement('['soapEnvelope.createName(「urn:sessionId」)'](http://docs.oracle.com/javaee/5/api/javax/xml /soap/SOAPEnvelope.html#createName%28java.lang.String%29)')'。 – JimmyB

回答

0

是的,我設法得到一個解決方案,它工作正常! @JimmyB

//SOAP Header 
    SOAPHeader header = soapMessage.getSOAPHeader(); 
    SOAPHeaderElement sessionHeader = soapMessage.getSOAPHeader().addHeaderElement(new QName(serverM2M, "SessionHeader","urn")); 
    SOAPElement sessionID = sessionHeader.addChildElement(new QName(serverM2M, "sessionId","urn")); 
    sessionID.addTextNode(termTwo); 

這給了我一個輸出:

<soapenv:Header> 
    <urn:SessionHeader> 
    <urn:sessionId>00D560000004Zxv!AQMAQGTYYqKa0NwwPNSY7QLnfn1aeyjsloOJQAvU4K53pJlPrGiI0rkdCfcEmN7va2c5caH3XmG.OvTxeU3hPAKwdlWxIlf8</urn:sessionId> 
    </urn:SessionHeader> 

相關問題