Empfangen einer Version Mismatch SOAP-Fault auch, wenn die Richtigen namespaces verwendet werden

Bin ich mit dem apache commons httpclient version 4.2 zum ausführen einer einfachen web service auf der Basis von SOAP 1.2. Ich bin in der Lage, um das Feuer der web-Dienst ordnungsgemäß über SOAP-UI, aber ich bin nicht in der Lage, das gleiche zu tun mit Java.

Folgenden ist die Methode, die ich verwende, um den Dienst aufzurufen.

private static byte[] callSOAPServer(String body, String SOAP_ACTION,
        String SERVER_URL) {

    byte[] result = null;

    HttpParams httpParameters = new BasicHttpParams();
    //Set the timeout in milliseconds until a connection is established.
    int timeoutConnection = 15000;
    HttpConnectionParams.setConnectionTimeout(httpParameters,
            timeoutConnection);
    //Set the default socket timeout (SO_TIMEOUT)
    //in milliseconds which is the timeout for waiting for data.
    int timeoutSocket = 35000;
    HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

    DefaultHttpClient httpclient = new DefaultHttpClient(httpParameters);

    /*
     * httpclient.getCredentialsProvider().setCredentials( new
     * AuthScope("os.icloud.com", 80, null, "Digest"), new
     * UsernamePasswordCredentials(username, password));
     */
    HttpPost httppost = new HttpPost(SERVER_URL);
    httppost.setHeader("soapaction", SOAP_ACTION);
    httppost.setHeader("Content-Type", "text/xml; charset=utf-8");

    System.out.println("executing request" + httppost.getRequestLine());
    //now create a soap request message as follows:
    final StringBuffer soap = new StringBuffer();
    soap.append("\n");
    soap.append("");
    //this is a sample data..you have create your own required data BEGIN
    soap.append(" \n");
    soap.append(" \n");
    soap.append("" + body);
    soap.append(" \n");
    soap.append(" \n");

    /* soap.append(body); */
    //END of MEssage Body
    soap.append("");
    System.out.println("SOAP Request : " + soap.toString());
    //END of full SOAP request message
    try {
        HttpEntity entity = new StringEntity(soap.toString(), HTTP.UTF_8);
        httppost.setEntity(entity);
        HttpResponse response = httpclient.execute(httppost);//calling
                                                                //server
        HttpEntity r_entity = response.getEntity(); //get response
        System.out.println("Reponse Header:Begin..."); //response headers
        System.out.println("Reponse Header StatusLine:"
                + response.getStatusLine());
        Header[] headers = response.getAllHeaders();
        for (Header h : headers) {
            System.out.println("Reponse Header " + h.getName() + ": "
                    + h.getValue());
        }
        System.out.println("Reponse Header END...");
        if (r_entity != null) {
            result = new byte[(int) r_entity.getContentLength()];
            if (r_entity.isStreaming()) {
                DataInputStream is = new DataInputStream(
                        r_entity.getContent());
                is.readFully(result);
            }
        }
    } catch (Exception E) {
        System.out.println("Exception While Connecting " + E.getMessage());
        E.printStackTrace();
    }

    httpclient.getConnectionManager().shutdown(); //shut down the
                                                    //connection
    return result;
}

Folgende ist meine SOAP-Anfrage als auch der Endpunkt.

String soapRequest = "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:typ=\"http://skash.service.sahaj.com/types/\">"
            + "<soap:Header/>"
            + "<soap:Body>"
            + "<typ:remoteSKASHDeductionElement>"
            + "<typ:vleId>?</typ:vleId>"
            + "<typ:paidAmt>?</typ:paidAmt>"
            + "<typ:refTxnId>?</typ:refTxnId>"
            + "</typ:remoteSKASHDeductionElement>"
            + "</soap:Body>"
            + "</soap:Envelope>";
    String soapEndPoint = "http://xxx.xxx.xxx.xxx:xxxx/skashws/remoteSKASHDeductionSoap12HttpPort";
    String soapAction = "http://xxx.xxx.xxx.xxx:xxxx//remoteSKASHDeduction";
    //executeSOAPRequest(soapRequest, soapEndPoint, soapAction);
    byte[] resp = callSOAPServer(soapRequest, soapAction, soapEndPoint);
    System.out.println(IOUtils.toString(resp));

Kann ich sehen, dass der namespace gesetzt, um den Umschlag-tag ist für SOAP 1.2 und ist gut eingestellt. Ich bin mir nicht sicher, wohin ich gehe falsch. Ich erhalte die folgende version mismatch error.

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header>
    <env:Upgrade>
        <env:SupportedEnvelope xmlns:soap12="http://www.w3.org/2003/05/soap-envelope" qname="soap12:Envelope"/>
    </env:Upgrade>
</env:Header>
<env:Body>
    <env:Fault xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
        <faultcode>env:VersionMismatch</faultcode>
        <faultstring>Version Mismatch</faultstring>
        <faultactor>http://schemas.xmlsoap.org/soap/actor/next</faultactor>
    </env:Fault>
</env:Body>

Schreibe einen Kommentar