服务器无法识别SOAPAction的HTTP标头

时间:2015-12-28 19:54:10

标签: java soap

我正在尝试收到VIES的回复(一项验证增值税号码的服务)。我正在尝试发送SOAP消息,这些消息显示在他们的网站上。 这是他们希望我发送的SOAP消息:

SOAP Request

我尝试使用这两种方法来做到这一点:

public static void main(String[] args) {
    try {
        SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
        SOAPConnection soapConnection = soapConnectionFactory.createConnection();

        // Send SOAP Message to SOAP Server
        String url = "http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx";
        SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url);

        // print SOAP Response
        System.out.print("Response SOAP Message:");
        soapResponse.writeTo(System.out);

        soapConnection.close();
    } catch (SOAPException e) {
        e.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

private static SOAPMessage createSOAPRequest() {
    try {
        MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage soapMessage = messageFactory.createMessage();
        SOAPPart soapPart = soapMessage.getSOAPPart();

        String serverURI = "urn:ec.europa.eu:taxud:vies:services:checkVat:types";

        // SOAP Envelope
        SOAPEnvelope envelope = soapPart.getEnvelope();
        envelope.addNamespaceDeclaration("urn", serverURI);

    /*
    Constructed SOAP Request Message:
     <soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/
        xmlns:urn="urn:ec.europa.eu:taxud:vies:services:checkVat:types">
           <soapenv:Header/>
           <soapenv:Body>
              <urn:checkVat>
                <urn:countryCode>MS</urn:countryCode>
                <urn:vatNumber>TESTVATNUMBER</urn:vatNumber>
              </urn:checkVat>
           </soapenv:Body>
        </soapenv:Envelope>

    Constructed SOAP Request Message:
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:example="http://ws.cdyne.com/">
        <SOAP-ENV:Header/>
        <SOAP-ENV:Body>
            <example:VerifyEmail>
                <example:email>mutantninja@gmail.com</example:email>
                <example:LicenseKey>123</example:LicenseKey>
            </example:VerifyEmail>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
     */

        // SOAP Body
        SOAPBody soapBody = envelope.getBody();
        SOAPElement soapBodyElem = soapBody.addChildElement("checkVat", "urn");
        SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("countryCode", "urn");
        soapBodyElem1.addTextNode("CENSORED");
        SOAPElement soapBodyElem2 = soapBodyElem.addChildElement("vatNumber", "urn");
        soapBodyElem2.addTextNode("CENSORED");

        MimeHeaders headers = soapMessage.getMimeHeaders();
        headers.addHeader("SOAPAction", serverURI);

        soapMessage.saveChanges();

    /* Print the request message */
        System.out.print("Request SOAP Message:");
        soapMessage.writeTo(System.out);
        System.out.println();

        return soapMessage;
    } catch (SOAPException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    }

    return null;
}

然后它给了我这个错误:

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>Server did not recognize the value of HTTP Header SOAPAction: urn:ec.europa.eu:taxud:vies:services:checkVat:types.</faultstring><detail /></soap:Fault></soap:Body></soap:Envelope>

我可以改进哪些想法让它发挥作用?

提前致谢, Guus Huizen

0 个答案:

没有答案