2013-04-16 123 views
1

使用SoapUI我已經構建了以下XML信封並將其封裝在字符串中。Java - 從字符串XML信封使用SOAP Web服務

ProcessJournal是一種沒有參數並返回字符串的方法。

String soapText = "<Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:upd=\"http://webservices.vm.vmc/UpdateCMA/\">" + 
        "<Header/>" + 
        "<Body>" + 
         "<upd:ProcessJournal/>" + 
        "</Body>" + 
        "</Envelope>"; 

現在...我只是想調用上面定義的Web服務。並發現一些示例代碼,這樣做

   // Create SoapMessage 
       MessageFactory msgFactory  = MessageFactory.newInstance(); 
       SOAPMessage message   = msgFactory.createMessage(); 
       SOAPPart soapPart    = message.getSOAPPart(); 

       // Load the SOAP text into a stream source 
       byte[] buffer     = soapText.getBytes(); 
       ByteArrayInputStream stream = new ByteArrayInputStream(buffer); 
       StreamSource source   = new StreamSource(stream); 

       // Set contents of message 
       soapPart.setContent(source); 

       // -- DONE 
       message.writeTo(System.out); 


       //Try accessing the SOAPBody 
       SOAPBody soapBody = message.getSOAPBody(); 

問題是,在message.getSOAPBody();我得到一個錯誤

XML-22103: (Fatal Error) DOMResult can not be this kind of node. 
Apr 16, 2013 12:05:06 PM com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory createEnvelope 
SEVERE: SAAJ0511: Unable to create envelope from given source 

所有各種樣品,我覺得,最終具有執行getSOAPBody()時出現相同類型的錯誤。

回答

1

我不知道你是否曾經找到過解決方案。我最近剛剛看到完全相同的錯誤,這是由於沒有設置TransformerFactory。

我使用了Saxon庫中的TransformerFactory - 可以獲得的jar文件here

我然後設置其引用的撒克遜的TransformerFactory系統屬性:

System.setProperty("javax.xml.transform.TransformerFactory",  
     "net.sf.saxon.TransformerFactoryImpl"); 

的錯誤,那麼,當我重新運行我的代碼消失了。

以上只是設置TransformerFactory的一種方法。有很多其他方法可以做到這一點,我在這裏找到:stackoverflow.com/questions/11314604/

+0

謝謝你的帖子。我們最終走了一條不同的路線,因爲沒有人能夠實現它的工作。但是,當需要再次嘗試時,我會嘗試你的建議:)謝謝! – adam

1

它看起來像問題是與您的soapText中的名稱空間前綴。我能夠沒有錯誤,沒有通過修改soapText如下手動設置任何的TransformerFactory簡單地執行你的例子:

String soapText = 
    "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:upd=\"http://webservices.vm.vmc/UpdateCMA/\">" + 
     "<soapenv:Header/>" + 
     "<soapenv:Body>" + 
      "<upd:ProcessJournal/>" + 
     "</soapenv:Body>" + 
    "</soapenv:Envelope>"; 

注意添加soapenv:前綴對比度的所有SOAP元素的UPD您的Soap服務名稱空間中的前綴。