2013-05-13 94 views
0

我試圖解析來自Web服務的SOAP響應。我使用httpbuilder來執行請求。這裏是我的代碼:解析SOAP響應時出錯

def String WSDL_URL = 'http://ws.webgains.com/aws.php' 
    def http = new HTTPBuilder(WSDL_URL , ContentType.XML) 
    String soapEnvelope = 
       """<?xml version="1.0" encoding="utf-8"?> 
    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
     <soap12:Body> 
     <getFullUpdatedEarnings xmlns="http://ws.webgains.com/aws.php"> 
      <startDate>2013</startDate> 
      <endDate>2013</endDate> 
      <username>username</username> 
      <password>pass</password> 

     </getFullUpdatedEarnings> 
     </soap12:Body> 
    </soap12:Envelope>""" 


      http.request(Method.POST, ContentType.XML) { 
       body = soapEnvelope 

       response.success = { resp, xml -> 
        println "XML was ${xml.Body.getFullUpdatedEarningsResponse.return.text()}" 

        def territories = new XmlSlurper().parseText(
         xml.Body.getFullUpdatedEarningsResponse.return.text() 
        ) 

       } 

       response.failure = { resp, xml -> 
        xml 
       } 
      } 

當我試圖分析我得到一個org.xml.sax.SAXParseException內容不會在序言中所允許的響應。

下面是我從網絡服務獲得的輸出:

3936713759987www.tikcode.com1367552013-05-13T15:04:482013-05-13T15:04:48Miniinthebox -  US46119566172850.060.8confirmednotcleared2013-05-13T14:58:33http%3A%2F%2Fwww.lightinthebox.com%2Fes%2F%3Flitb_from%3Daffiliate_webgainsEShttp%3A%2F%2Flocalhost%3A8080%2Fcom.publidirecta.widget%2Fpromocion%2FverPromocion%3Fpromocion%3D 

如果我使用ContenTyp.TEXT我得到的XML是

[<?xml version="1.0" encoding="UTF-8"?>, <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="urn:http://ws.webgains.com/aws.php" xmlns:enc="http://www.w3.org/2003/05/soap-encoding" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:getFullUpdatedEarningsResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return enc:itemType="ns1:fullLinesArray" enc:arraySize="1" xsi:type="ns1:fullReportArray"><item xsi:type="ns1:fullLinesArray"><transactionID xsi:type="xsd:int">39367137</transactionID><affiliateID xsi:type="xsd:int">59987</affiliateID><campaignName xsi:type="xsd:string">www.tikcode.com</campaignName><campaignID xsi:type="xsd:int">136755</campaignID><date xsi:type="xsd:dateTime">2013-05-13T15:04:48</date><validationDate xsi:type="xsd:dateTime">2013-05-13T15:04:48</validationDate><delayedUntilDate xsi:type="xsd:string"></delayedUntilDate><programName xsi:type="xsd:string">Miniinthebox - US</programName><programID xsi:type="xsd:int">4611</programID><linkID xsi:type="xsd:string">95661</linkID><eventID xsi:type="xsd:int">7285</eventID><commission xsi:type="xsd:float">0.06</commission><saleValue xsi:type="xsd:float">0.8</saleValue><status xsi:type="xsd:string">confirmed</status><paymentStatus xsi:type="xsd:string">notcleared</paymentStatus><changeReason xsi:nil="true"/><clickRef xsi:nil="true"/><clickthroughTime xsi:type="xsd:dateTime">2013-05-13T14:58:33</clickthroughTime><landingPage xsi:type="xsd:string">http%3A%2F%2Fwww.lightinthebox.com%2Fes%2F%3Flitb_from%3Daffiliate_webgains</landingPage><country xsi:type="xsd:string">ES</country><referrer xsi:type="xsd:string">http%3A%2F%2Flocalhost%3A8080%2Fcom.publidirecta.widget%2Fpromocion%2FverPromocion%3Fpromocion%3D</referrer></item></return></ns1:getFullUpdatedEarningsResponse></env:Body></env:Envelope>] 

我是相當新的網絡服務,所以如果任何人有任何想法,我真的很感激任何幫助

編輯:也嘗試用ws lite與相同的結果

+0

所以,他曾經讓Web服務認爲在XML標籤之間拋出一個「,」非常有趣。刪除了「,」,一切工作正常 – user1485182 2013-05-14 11:05:06

回答

0

它看起來像你第二次解析響應。爲什麼使用XmlSlurper解析return標籤的文本? return下的元素已被解析並可直接訪問。