のために私はここでOK SOAPUIでソープ障害VersionMismatch KSOAP2は、Android
http://srilanka.lk:9080/services/CropServiceProxy?wsdl
作品をホストされているWebサービスにアクセスしようとしています。私はそれに適切な応答を得る。
SOAPUI要求
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:v1="http://schemas.icta.lk/xsd/crop/handler/v1/">
<soap:Header/>
<soap:Body>
<v1:getCropDataList>
<v1:code>ABK</v1:code>
</v1:getCropDataList>
</soap:Body>
</soap:Envelope>
SOAPUI応答
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Body>
<ns1:getCropDataListResponse xmlns:ns1="http://schemas.icta.lk/xsd/crop/handler/v1/">
<ns1:cropInfo>
<ns1:name>Ambul Kesel</ns1:name>
<ns1:price>35.0</ns1:price>
<ns1:location>Dambulla</ns1:location>
</ns1:cropInfo>
<ns1:cropInfo>
<ns1:name>Ambul Kesel</ns1:name>
<ns1:price>40.0</ns1:price>
<ns1:location>Dambulla</ns1:location>
</ns1:cropInfo>
</ns1:getCropDataListResponse>
</soapenv:Body>
</soapenv:Envelope>
しかしKsoap2でSOAP応答をAndroid用エラーです。以下はそれぞれrequestDumpとresponseDumpです。
requestDump
<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:getCropDataList id="o0" c:root="1" xmlns:n0="http://schemas.icta.lk/xsd/crop/handler/v1/">
<code i:type="d:string">CNT</code>
</n0:getCropDataList>
</v:Body>
</v:Envelope>
responseDump
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsa:Action>http://www.w3.org/2005/08/addressing/soap/fault</wsa:Action>
<wsa:RelatesTo>urn:uuid:3257ABC779195052D01293913466558</wsa:RelatesTo>
</soapenv:Header>
<soapenv:Body>
<soapenv:Fault>
<faultcode>VersionMismatch</faultcode>
<faultstring>Only SOAP 1.1 or SOAP 1.2 messages are supported in the system</faultstring>
<detail />
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
は、ここに私のコードです。
public void btnOnClick(View v){
String NAMESPACE = "http://schemas.icta.lk/xsd/crop/handler/v1/";
String URL = "http://220.247.225.202:9080/services/CropServiceProxy.CropServiceProxyHttpSoap12Endpoint";
String METHOD_NAME = "getCropDataList";
String SOAP_ACTION = "http://schemas.icta.lk/xsd/crop/handler/v1/getCropDataList";
SoapObject soap_request = new SoapObject(NAMESPACE, METHOD_NAME);
soap_request.addProperty("code", "ABK");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.setOutputSoapObject(soap_request);
envelope.addMapping(NAMESPACE, "cropInfo", CropInfo.class);
envelope.dotNet=false;
Marshal floatMarshal = new MarshalFloat();
floatMarshal.register(envelope);
System.out.println("body out : " + envelope.bodyOut.toString());
AndroidHttpTransport http_transport = new AndroidHttpTransport(URL);
//HttpTransportSE http_transport = new HttpTransportSE(URL);
http_transport.debug = true;
try {
http_transport.call(SOAP_ACTION, envelope);
//because we should expect a vector, two kinds of prices are given
Vector<CropInfo> result_array = (Vector<CropInfo>)envelope.getResponse();
if(result_array != null){
for (CropInfo current_crop: result_array){
System.out.println(current_crop.getName());
System.out.println(Float.toString(current_crop.getPrice()));
}
}
} catch (Exception e) {
e.printStackTrace();
answer.setText("error caught");
System.out.print("REQUEST: ");
System.out.println(http_transport.requestDump);
System.out.print("RESPONSE: ");
System.out.println(http_transport.responseDump);
}
}
このためにKsoap2で適切な応答を得るにはどうすればよいですか?
バージョン1.1を使用しましたか? – bigstones
ちょうど私の5セント - それはメインのUIスレッド上で実行されるので、クリックリスナーですべてのものを行うことは非常に危険です。したがって、コード全体が実行されるまで、UIはブロックされます。無線範囲が悪い(ネットワーク速度が遅い)ケースを想像してください - ANR(アプリケーションが応答しない)エラーポップアップを取得するのは非常に簡単です。これを避けるために、クリックリスナーは他の(UI以外の) 'Thread'を起動する必要があります。そうしないと、' AsyncTask'を使うことを好むでしょう。 –
1.1では、次のエラーが発生します。 soapenv:サーバー org.apache.axis2.databinding。ADBException:予期せぬサブ要素コード faultstring> soapenv:Fault> –
Chamila