簡體   English   中英

如何將沒有前綴的 childElements 添加到 Soap 標頭?

[英]How to add childElements without prefix to Soap header?

我需要向 Soap 請求添加標頭元素,但標頭內的子元素沒有定義任何前綴。 當我嘗試在不指定前綴的情況下添加元素時,會引發異常。

private SOAPHeader addSecuritySOAPHeader(SOAPMessageContext context) {
SOAPEnvelope envelope = context.getMessage().getSOAPPart().getEnvelope();
envelope.addNamespaceDeclaration("S", "http://schemas.xmlsoap.org/soap/envelope/");
envelope.addNamespaceDeclaration("SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/");

SOAPEnvelope header = envelope.getHeader();
// ACTION NODE
SOAPElement action = header.addChildElement("Action");
return header;
}

最后一行產生下一個異常“com.sun.xml.messaging.saaj.SOAPExceptionImpl:HeaderElements must be namespacequalified”

我需要創建的 Heaser:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Header>
    <Action xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://cgbridge.rategain.com/2011A/ReservationService/HotelResNotif</Action>
  </S:Header>
  ..............
</S:Envelope>

如果我包含任何前綴,如 S,請求失敗,服務器響應為“錯誤請求”

我如何添加一個“干凈的”動作節點?

我在行動中添加前綴:SOAPElement action = header.addChildElement("Action","S"); 帶有“錯誤請求”消息的服務響應。

<S:Action xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://cgbridge.rategain.com/2011A/ReservationService/HotelResNotif</S:Action>

請問有什么幫助嗎?

這應該有效:

@Test
public void someTest() throws Exception {
    MessageFactory messageFactory = MessageFactory.newInstance();
    SOAPMessage soapMessage = messageFactory.createMessage();

    SOAPEnvelope soapEnvelope = soapMessage.getSOAPPart().getEnvelope();
    var header = soapEnvelope.getHeader();
    var actionElement = header.addChildElement("Action", "prefix", "http://schemas.xmlsoap.org/ws/2004/08/addressing");
    actionElement.addTextNode("http://cgbridge.rategain.com/2011A/ReservationService/HotelResNotif");

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    soapMessage.writeTo(out);
    System.out.println(new String(out.toByteArray()));
}

印刷:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header><prefix:Action xmlns:prefix="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://cgbridge.rategain.com/2011A/ReservationService/HotelResNotif</prefix:Action></SOAP-ENV:Header><SOAP-ENV:Body/></SOAP-ENV:Envelope>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM