1

ping メソッドにアクセスしたい Web サービスがあります。このメソッドは単純に文字列を受け取り、文字列を返します。

Android デバイスで ksoap2 ライブラリを使用してアクセスしたいと考えています。何日も正しい結果を達成できなかった後、SoapUI を使用して、リクエストが次のように見える必要があることがわかりました。

// Generated with SoapUI
<v:Envelope xmlns:ns="http://shared.bimserver.org/" 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>
    <ns:ping>
      <in>test</in>
    </ns:ping>
  </v:Body>
</v:Envelope>

これは私のコードです:

String namespace = "http://shared.bimserver.org/";
String method = "ping";
String url = "http://10.0.0.5:8082/soap?WSDL";

SoapObject request = new SoapObject(namespace, method);
request.addProperty("in", "test");

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);

これが私のコードによって生成されたリクエストです。

<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>

Web サービスが 4 行目を気に入らないことがわかりました

<ping xmlns="http://shared.bimserver.org/">

これは、soapUI で生成された上記の (動作中の) 要求のようにフォーマットする必要があります。どういうわけか、Web サービスは名前空間が ping タグで直接定義されることを好みません。でも。私のコードでは、次の応答が得られます。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Client</faultcode>
         <faultstring>Unmarshalling Error: unexpected element (uri:"http://shared.bimserver.org/", local:"in"). Expected elements are &lt;{}in></faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

では、ping タグからエンベロープ タグまでの名前空間を取得するにはどうすればよいでしょうか。

4

0 に答える 0