2012-02-21 85 views
2

我正在爲WCF的Java客戶端工作,並有模板工作得很好。我最初使用eclipse的web服務客戶端項目,但後來發現android平臺不支持所需的庫。然後我打算用KSOAP,但它給了我很多的問題,所以我得到了一個工作SOAP請求副本請求正在包裝CDATA

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/ITransferService/getInt</Action> 
    </s:Header> 
    <s:Body> 
    <getInt xmlns="http://tempuri.org/"> 
     <i>42</i> 
    </getInt> 
    </s:Body> 
</s:Envelope> 

,並決定將,將採取在價值和它貼在那裏模板42去。當我打印出來時,它看起來應該很好,但我注意到當我追蹤到我的請求被包裝在CDATA標籤中時。

<MessageLogTraceRecord><![CDATA[<?xml version="1.0" encoding="utf-8"?> 
    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
     <s:Header> 
      <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/ITransferService/getInt</Action> 
     </s:Header> 
     <s:Body> 
      <getInt xmlns="http://tempuri.org/"> 
       <i>100</i> 
      </getInt> 
     </s:Body> 
    </s:Envelope> 
]]></MessageLogTraceRecord> 

我不確定爲什麼它被包裝在CDATA中,我使用HttpURLConnection來創建和發送連接。處理該代碼的代碼如下所示。

private static void sendRequest(String request) throws Exception 
    { 
     URL u = new URL(DEFAULT_SERVER); 
     URLConnection uc = u.openConnection(); 
     HttpURLConnection connection = (HttpURLConnection)uc; 

     connection.setRequestProperty("content-type", "text/html; charset=utf8"); 

     connection.setDoOutput(true); 
     connection.setDoInput(true); 
     connection.setRequestMethod("POST"); 
     connection.setRequestProperty("SOAPAction",SOAP_ACTION); 

     OutputStream out = connection.getOutputStream(); 
     Writer wout = new OutputStreamWriter(out); 

     wout.write(request); 
     wout.flush(); 
     wout.close(); 
     System.out.println(connection.getResponseMessage()); 
    } 

請求變量是上面顯示的內容,至少包含在CDATA標記中。當我調用System.out.println(connection.getResponseMessage());那麼它會告訴我不支持的媒體類型。 我正在使用文本作爲WCF服務器的綁定配置中的messageEncoding

有沒有人有任何關於如何讓我的java客戶端正確發送數據而不是在cdata包裝中的建議?

感謝 尼克龍

編輯: 我改變了這一行

connection.setRequestProperty("content-type", "text/html; charset=utf8"); 

這個

connection.setRequestProperty("content-type", "text/xml"); 

喜歡它大概應該已經開始。我現在得到500內部服務器錯誤,所以我不確定我是否接近或不接近。任何建議仍然非常感謝

+0

對不起,點擊提交之前,我的意思是,不知道這是怎麼回事 – nick 2012-02-21 20:29:03

+1

肯定會禮貌的爲那些downvoted不完整的問題,以糾正這一點。 – 2012-02-21 20:30:56

回答

0

我第一個變化是這樣的:

connection.setRequestProperty("content-type", "text/html; charset=utf8"); 

這個

connection.setRequestProperty("content-type", "text/xml"); 

這也正是擺脫了415錯誤。之後,我有500錯誤。我所做的修正,這是我把這個線

<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/ITransferService/getInt</Action> 

,並刪除它,使我的模板是:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
    </s:Header> 
    <s:Body> 
     <getInt xmlns="http://tempuri.org/"> 
      <i>%val%</i> 
     </getInt> 
    </s:Body> 
</s:Envelope> 

究其原因,我認爲,(有人請糾正我,如果我錯了),其我得到的500錯誤是,我不得不在該行與我刪除了行:

connection.setRequestProperty("SOAPAction",SOAP_ACTION); 

進行這些更改後,我的客戶端的偉大工程,我已經能夠把它帶到一個圖像共享客戶端的機器人。

相關問題