PHPSOAPWebサービスを呼び出そうとしています。WPFプロジェクトでWebサービスを正常に使用しているので、Webサービスが正しく機能することを知っています。同じWebサービスを使用して、Androidでアプリを構築しています。
WSDLファイルはここにあります:http ://www.wegotcha.nl/servicehandler/service.wsdl
これはAndroidアプリの私のコードです:
String SOAP_ACTION = "http://www.wegotcha.nl/servicehandler/CheckLogin";
String NAMESPACE = "http://www.wegotcha.nl/servicehandler";
String METHOD_NAME = "CheckLogin";
String URL = "http://www.wegotcha.nl/servicehandler/servicehandler.php";
String resultData = "";
SoapSerializationEnvelope soapEnv = new SoapSerializationEnvelope(SoapEnvelope.VER11);
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapObject UserCredentials = new SoapObject("Types", "UserCredentials6");
UserCredentials.addProperty("mail", params[0]);
UserCredentials.addProperty("password", md5(params[1]));
request.addSoapObject(UserCredentials);
soapEnv.setOutputSoapObject(request);
HttpTransportSE http = new HttpTransportSE(URL);
http.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
http.debug = true;
try {
http.call(SOAP_ACTION, soapEnv);
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
SoapObject results = null;
results = (SoapObject)soapEnv.bodyOut;
if(results != null)
resultData = results.getProperty(0).toString();
return resultData;
fiddlerを使用して、次の情報を取得しました。Androidリクエスト:
<?xml version="1.0" encoding="utf-8"?>
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"><v:Header />
<v:Body>
<n0:CheckLogin id="o0" c:root="1" xmlns:n0="http://www.wegotcha.nl/servicehandler">
<n1:UserCredentials6 i:type="n1:UserCredentials6" xmlns:n1="Types">
<mail i:type="d:string">myemail</mail>
<password i:type="d:string">myhashedpass</password>
</n1:UserCredentials6>
</n0:CheckLogin>
</v:Body>
</v:Envelope>
次の応答を取得します。
Procedure 'CheckLogin' not present
WPFアプリによって生成された私の要求は完全に異なって見えます:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<UserCredentials6 xmlns="Types">
<mail>mymail</mail>
<password>mypassword</password>
</UserCredentials6>
</s:Body>
</s:Envelope>
お尻をググってみたら、この問題を自分で解決することはできませんでした。それ以来、私は多くのことを変更したので、Javaコードに奇妙なことがいくつかある可能性があります。皆さんが私を助けてくれることを願っています、ありがとう。
編集:
私のWebサービスはドキュメント/リテラルエンコーディングスタイルです。調査を行った結果、SoepEnvelope
代わりに使用できるはずであることがわかりましSoapSerializationEnvelope
た。ただし、これを置き換えると、try cacheブロックの前にエラーが発生し、アプリがクラッシュします。
エラー:
11-04 16:23:26.786:E / AndroidRuntime(26447):原因:java.lang.ClassCastException:org.ksoap2.serialization.SoapObjectをorg.kxml2.kdom.Nodeにキャストできません
これはこれらの行によって引き起こされます:
request.addSoapObject(UserCredentials);
soapEnv.setOutputSoapObject(request);
これは解決策かもしれませんが、どうすればこれを実行できますか?この素晴らしいチュートリアルを除いて、SoapSerializationEnvelopeの代わりにSoapEnvelopeを使用することについては何も見つかりませんでした。
http://ksoap.objectweb.org/project/mailingLists/ksoap/msg00849.html