一日中検索した後でも、問題の解決策を見つけることができません。
次のWSDLファイルを提供するWebServiceがありますが、これをpastebinにアップロードすると、非常に大きくなります。
最初に、文字列値を使用して呼び出し、文字列値をクライアントに返すping関数を実装したいと思います。関連する部分は次のとおりです。
<wsdl:operation name="ping">
<wsdl:input message="tns:ping" name="ping"></wsdl:input>
<wsdl:output message="tns:pingResponse" name="pingResponse"></wsdl:output>
<wsdl:fault message="tns:ServerException" name="ServerException"></wsdl:fault>
<wsdl:fault message="tns:UserException" name="UserException"></wsdl:fault>
</wsdl:operation>
と:
<xs:complexType name="ping">
<xs:sequence>
<xs:element minOccurs="0" name="in" type="xs:string"/>
</xs:sequence>
</xs:complexType>
とにかく、実際のwsdlファイルを見て、これらが本当にその関連部分であるかどうかを教えていただければ非常に便利です。
したがって、Androidでこれにアクセスするには、ksoap2を使用しています。私のコードは次のようになります:
SoapObject request = new SoapObject("http://shared.bimserver.org/", "ping");
request.addProperty("in", "Hallo Welt");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE("http://10.0.0.5:8082/soap");
httpTransport.debug = true;
httpTransport.call("http://shared.bimserver.org/ping", envelope);
これにより、次のリクエストが作成されます。
<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><ping xmlns="http://shared.bimserver.org/" id="o0" c:root="1"><in i:type="d:string">Hallo Welt</in></ping></v:Body></v:Envelope>
しかし、私はこの応答を受け取ります:
<soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>Unmarshalling Error: unexpected element (uri:"http://shared.bimserver.org/", local:"in"). Expected elements are <{}in> </faultstring></soap:Fault></soap:Body>
したがって、パラメータ「in」に名前空間を含めることはできません。私は次のようなさまざまなことを試しました:
PropertyInfo info = new PropertyInfo();
info.setName("in");
info.setNamespace("");
info.setValue("Hallo Welt");
request.addProperty(info);
しかし、これは要求または応答を変更しませんでした。
また、soapオブジェクトから名前空間を削除しました。
SoapObject request = new SoapObject("", "ping");
それは私に次の要求を与えます:
<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><ping xmlns="" id="o0" c:root="1"><in i:type="d:string">Hallo Welt</in></ping></v:Body></v:Envelope>
そして次の応答:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>Unexpected wrapper element ping found. Expected {http://shared.bimserver.org/}ping.</faultstring></soap:Fault></soap:Body></soap:Envelope>
したがって、ここでは、パラメータ「in」に名前空間を含めることはできませんが、pingリクエストには名前空間を含める必要があります。
私を助けてください。私は想像できることなら何でも試しました。
編集: soapUIを使用すると、応答は次のようになるはずです。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:shar="http://shared.bimserver.org/">
<soapenv:Header/>
<soapenv:Body>
<shar:ping>
<!--Optional:-->
<in>Hallo</in>
</shar:ping>
</soapenv:Body>
</soapenv:Envelope>
私のリクエストは次のようになります:
<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>
<ping xmlns="http://shared.bimserver.org/">
<in i:type="d:string">test</in>
</ping>
</v:Body>
</v:Envelope>
リクエストを必要なリクエストのようにするにはどうすればよいですか?