私は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");
:任意の提案は、まだ実際に私が作った最初の変更は、このだった
申し訳ありませんが、私はそれがどうなったのかわからない前にヒット提出 – nick
それを修正するために不完全な質問をdownvoted人々のために確かに礼儀正しいでしょう。 –