2011-10-20 83 views
5

使用薩翁寶石,我可以得到以下請求XML:薩翁紅寶石寶石增加ins0到標籤

<?xml version="1.0" encoding="UTF-8"?> 
    <soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:wsdl="URL" 
     xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
     xmlns:ins0="SOME URL"> 
     <soap:Body> 
      <ins0:Test xmlns="SOME URL"> 
      </ins0:Test> 
     </soap:Body> 
    </soap:Envelope> 

但它需要這個來代替:

<?xml version="1.0" encoding="UTF-8"?> 
    <soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:wsdl="URL" 
     xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
     <soap:Body> 
      <Test xmlns="SOME URL"> 
      </Test> 
     </soap:Body> 
    </soap:Envelope> 

通知ins0被刪除。

有什麼建議嗎?

+0

查看http://stackoverflow.com/questions/6720720/how-to-stop-savon-from-adding-prefixes-to-soap-body –

+0

試過,但我得到一個錯誤:'服務器無法識別HTTP Header SOAPAction的值:test.'因爲它採取了「Test」操作並將其設置爲小寫。 –

+0

其實我只是發現這個XML差異不會破壞任何東西,代碼工作正常。但它可能會破壞別人的代碼。 –

回答

2

這兩個XML文檔是等價的,所以只要文檔是由符合XML的代理進行分析的話就不會有問題。

Savon生成的文檔只是爲「SOME URL」命名空間創建ins0的命名空間前綴。這對於包含來自該名稱空間的許多元素的大型SOAP文檔很方便。在這個例子中,前綴並不是必須的。

我能看到的唯一潛在問題是Savion生成的文檔似乎要聲明兩次ins0名稱空間 - 一次在soap:Envelope中,然後再次在soap:Body中。看起來多餘且可能會出錯。