2012-02-21 7 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としてTextを使用しています

cdataラッパーではなくデータを正しく送信する方法については、

おかげ ニック・ロング

編集: は、私はそれはおそらくで開始することとなっている必要がありますように、この

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

にこのライン

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

を変更しました。私は今500の内部サーバーエラーを取得するので、もし私が近いかどうかはわかりません。 415エラーを処分した何だったこの

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

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

:任意の提案は、まだ実際に私が作った最初の変更は、このだった

+0

申し訳ありませんが、私はそれがどうなったのかわからない前にヒット提出 – nick

+1

それを修正するために不完全な質問をdownvoted人々のために確かに礼儀正しいでしょう。 –

答えて

0

を高く評価しています。その後、私は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> 

理由は、私は(私が間違っている場合、誰かが私を修正してください)信じるのことこれらの変更を行った後

connection.setRequestProperty("SOAPAction",SOAP_ACTION); 

、私のクライアントは素晴らしい作品、と私はのための画像共有クライアントにそれを取ることができました:私は500エラーが、私はこの行と私は削除行を持っていたことだったなっていましたアンドロイド。

関連する問題