1

一日中検索した後でも、問題の解決策を見つけることができません。

次の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 &lt;{}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>

リクエストを必要なリクエストのようにするにはどうすればよいですか?

4

2 に答える 2

0

.Net Web サービスをリクエストする方法は次のとおりです。ここでは「Login」という名前の関数を呼び出しています。関数リンク行に示されている SOAP エンベロープ形式でサービスの名前空間を見つけることができるので、ここで「http://www.example. com/ " 名前空間と関数名 id Login. 詳細については、このリンクを確認してください

    private static final String URL = "http://www.example.com/service.asmx";
    private static final String NAMESPACE = "http://www.example.com/";
    最終文字列 SOAP_ACTION = NAMESPACE+"ログイン";
    最終文字列 METHOD_NAME ="ログイン";
    文字列応答 = null;
    SoapObject request=new SoapObject(NAMESPACE,METHOD_NAME);

        request.addProperty("ユーザー名",user_name);
        request.addProperty("パスワード", パスワード);

        SoapSerializationEnvelope エンベロープ=新しい SoapSerializationEnvelope(SoapEnvelope.VER11);
        エンベロープ.setAddAdornments(false);

        エンベロープ.implicitTypes = true;
        封筒.ドットネット=真;
        エンベロープ.setOutputSoapObject(リクエスト);
        MarshalBase64 marshal = 新しい MarshalBase64();
        marshal.register(封筒);
        HttpTransportSE httpTransport = 新しい HttpTransportSE(URL);
        httpTransport.call(SOAP_ACTION, エンベロープ);
        SoapPrimitive soap_primitive = null;
            soap_primitive=(SoapPrimitive)envelope.getResponse();
            response=String.valueOf(soap_primitive);

于 2013-03-13T12:24:33.003 に答える
0

プロパティの名前空間を追加します。

PropertyInfo info = new PropertyInfo();
info.setNamespace("http://www.w3.org/2001/XMLSchema-instance");
info.setName("in");
info.setValue("Hallo Welt");
info.setType(PropertyInfo.STRING_CLASS);
request.addProperty(info);
于 2013-03-14T13:15:55.313 に答える