0

wsdl ファイルと xsd ファイルがあり、Python で Web サーバーへの SOAP リクエストを作成したいと考えています。私はこれまで石けんを扱ったことがなかったので、質問はおそらく単純ですが、4 時間を費やしても解決策が見つかりませんでした。

低レベルのリクエストと Android での KSOAP2 の 2 つの方法を試します。

wsdl

    <wsdl:message name="<some request>">
    <wsdl:part element="txh:<some request>" name="parameters"/>
</wsdl:message>
<wsdl:message name="<some response>">
    <wsdl:part element="txh:<some response>" name="parameters"/>
</wsdl:message>

xsd

    <xs:element name=""<some request>">
    <xs:annotation>
        <xs:documentation>"<text>"</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:sequence>
            <xs:element name="mode" type="response-mode"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name="<some response>">
    <xs:complexType>
        <xs:annotation>
            <xs:documentation>"<text>"</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element ref="<text>"/>
            <xs:element name="<another text>" minOccurs="0">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="<name a>" type="xs:int"/>
                        <xs:element name="<name b>" type="xs:int"/>
                        <xs:element name="<name c>" type="xs:int"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Android のコード:

private final static String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                         "<SOAP-ENV:Envelope " +
                         "xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
                         "xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" " +
                         "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
                         "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
                        "<SOAP-ENV:Header>" +
                        "</SOAP-ENV:Header>" +
                        "<SOAP-ENV:Body xmlns:ns1=\"<namespace>\">" +
                        "    <xs:element name=\"<request>\"> " +
                        "<xs:annotation>" +
                            "<xs:documentation>"<text>"</xs:documentation>" +
                        "</xs:annotation>" +
                        "<xs:complexType>" +
                            "<xs:sequence>" +
                                "<xs:element name=\""<text>"\" type=\"response-mode\"/>" +
                            "</xs:sequence>" +
                        "</xs:complexType>" +
                    "</xs:element>" +
                        "</SOAP-ENV:Body>" +
                        "</SOAP-ENV:Envelope>";



 public Entity execute(final String body) {
    Log.d(TAG, "Start request ");
    Entity result = new Entity();
    AndroidHttpClient client = AndroidHttpClient.newInstance(TAG);
    HttpParams params = client.getParams();
    HttpConnectionParams.setConnectionTimeout(params, 10000);
    HttpConnectionParams.setSoTimeout(params, 15000);
    HttpProtocolParams.setUseExpectContinue(params, true);

    HttpPost post = new HttpPost(url);
    post.setParams(params);
    post.setHeader("soapaction", NAMESPACE.concat("/").concat(METHOD));
    post.setHeader("Content-Type", "text/xml; charset-utf8");
    try {
        String request = createRequest(xml);
        HttpEntity entityToRequest = new StringEntity(request);
        post.setEntity(entityToRequest);
        Log.d(TAG, post.toString());

        HttpResponse response = client.execute(post);
        final int status = response.getStatusLine().getStatusCode();
        if (HttpStatus.SC_OK == status) {
            HttpEntity entity = response.getEntity();
            String str = EntityUtils.toString(entity);
            Log.d(TAG, str);
        }

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

このリクエストで 500 サーバーコードを取得したので、リクエストの問題だと思います。うまく形成されていると思いますか?

4

1 に答える 1

0

私は解決策を見つけました。スープ UI と同様のインストルメントは、ソープ要求の構造を理解するのに役立ちます。

于 2012-08-16T09:54:18.817 に答える