2012-11-01 62 views
10

可以從整個SOAP消息的字符串表示創建SOAPMessage嗎?我試圖做到這一點的原因是我有一個Web服務的SOAP處理程序,用於捕獲SOAP消息。我需要保留Web服務中的整個SOAP消息以發送到另一個組件。現在,Web服務剝離了SOAP信封信息。因此,在處理程序中,我製作了SOAP消息的副本,base64對其進行了編碼,刪除了原始的Body內容,並添加了編碼的字符串。在Web服務中,我試圖解碼正文(編碼的SOAP消息)並將其重構爲SOAPMessage以發送給另一個組件。從整個SOAP消息的字符串XML創建SOAPMessage

+0

可以使用java.xml.soap包創建一條SOAP消息 – ChadNC

回答

2

我這樣做是分兩步進行的。首先創建一個DOM Document,然後從Document創建SOAPMessage。

50

As per Javadoc,javax.xml.soap.MessageFactory創建方法預先填充SOAP消息,其中包含必需的對象,如信封,正文,頭部,以確保消息正確無誤。但是,接受消息數據的createMessage方法的唯一變體將其作爲InputStream接受。因此需要StringInputStream轉換,即從字符串字節創建新的字節流。

爲簡潔起見,這是一個簡化的例子。在應用程序代碼的一個可避免它提取到字段上創建每個方法調用一個工廠/恆定,指定所需SOAP協議版本,不同的字符集,等

private SOAPMessage getSoapMessageFromString(String xml) throws SOAPException, IOException { 
    MessageFactory factory = MessageFactory.newInstance(); 
    SOAPMessage message = factory.createMessage(new MimeHeaders(), new ByteArrayInputStream(xml.getBytes(Charset.forName("UTF-8")))); 
    return message; 
} 
+0

您能否詳細說明您的答案?謝謝。 –

+1

增加了一些更多的解釋,代碼只是爲了簡潔起見。 – tiurin