2012-11-05 23 views
4

我試圖創建的SOAPMessage稍後傳遞到下面的代碼片斷:SOAP getBody方法VS的writeTo

SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance(); 
SOAPConnection connection = soapConnectionFactory.createConnection(); 
SOAPMessage response = connection.call(message, url); 

然而,我收到一個空(NULL)的反應:[SOAP-ENV:主體:空值]。

當我執行以下(之前連接呼叫):

System.out.println(message.getSOAPBody()); 
message.writeTo(System.out); 

我得到兩個不同的反應時,他們應該是一樣的,對嗎?

第一個系統打印ln給了我[SOAP-ENV:Body:null],而另一個給我的是我創建的soap消息(writeTo)。

任何想法,爲什麼?

全碼:

MessageFactory factory = MessageFactory.newInstance(); 
SOAPMessage message = factory.createMessage(); 
SOAPEnvelope envelope = message.getSOAPPart().getEnvelope(); 
SOAPElement tvl = envelope.addAttribute(new QName("xmlns:tvl"), "http://some.url.com/"); 
SOAPBody body = message.getSOAPBody(); 
QName bodyText = new QName("tvl:searchAirings"); 
SOAPBodyElement bodyElement = body.addBodyElement(bodyText); 
QName fromTag = new QName("from"); 
SOAPElement from = bodyElement.addChildElement(fromTag); 
from.setValue("2012-11-02T14:00:00-4:00"); 

QName toTag = new QName("to"); 
SOAPElement to = bodyElement.addChildElement(toTag); 
to.setValue("2012-11-02T18:00:00-4:00"); 

QName networkTag = new QName("network"); 
SOAPElement network = bodyElement.addChildElement(networkTag); 
network.setAttribute("id", "n501"); 
network.setAttribute("language", "es"); 

System.out.println(message.getSOAPBody()); 
message.writeTo(System.out); 

回答

1

System.out.println(message.getSOAPBody()); =>這應該只是打印SOAP封裝的身體。

message.writeTo(System.out); =>這應該打印完整的SOAP消息,即信封,標題和正文。

+1

調用message.getSoapBody()是空的結果響應解決這個問題,而結果(相同的SOAPMessage的)是完整的SOAPMessage;這是預期的。 我想知道爲什麼getSOAPBody()不能正確打印正文。 – vanschaickp

+0

你正在使用哪個實現? –

+0

我看到與@ user1792298相同的問題,我正在使用與JDK6捆綁在一起的實現。 –

0

您可以通過書面形式向ByteArrayOutputStream

SOAPMessage soapResponse = soapConnection 
     .call(createSOAPRequest(), url); 

ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); 
soapResponse.writeTo(byteOutStream); 
String res = new String(byteOutStream.toByteArray()); 
System.out.println("Response \n"+res);