Java8和Java6对SOAP响应的处理有何不同?

Java8和Java6对SOAP响应的处理有何不同?,java,soap,java-8,java-6,Java,Soap,Java 8,Java 6,有一些可以使用Java6但不能完全使用Java8的遗留代码。它发送一个SOAP请求并读取响应。使用Java8时,响应未正确解析,代码返回失败的结果 这里是代码的简化版本,我删掉了大部分请求构建代码,更改了服务器名称等等。请原谅任何打字错误 try { // Init the factories SOAPConnectionFactory SOAPConnFac = SOAPConnectionFactory.newInstance(); SOAPFactory SOAPF

有一些可以使用Java6但不能完全使用Java8的遗留代码。它发送一个SOAP请求并读取响应。使用Java8时,响应未正确解析,代码返回失败的结果

这里是代码的简化版本,我删掉了大部分请求构建代码,更改了服务器名称等等。请原谅任何打字错误

try {
    // Init the factories
    SOAPConnectionFactory SOAPConnFac = SOAPConnectionFactory.newInstance();
    SOAPFactory SOAPFac = SOAPFactory.newInstance();
    MessageFactory MessageFac = MessageFactory.newInstance();

    // Create the SOAP Connection
    SOAPConnection SOAPConn = SOAPConnFac.createConnection();

    // Build the SOAP request message
    SOAPMessage SOAPRequestMsg = MessageFac.createMessage();

    // Add info to the MIME header for .NET compatibility
    MimeHeaders hd = SOAPRequestMsg.getMimeHeaders();
    hd.addHeader("SOAPAction", "http://www.mysever.com/respond");

    // Remove the SOAP message header, it is not needed in this case
    SOAPHeader SOAPRequestHeader = SOAPRequestMsg.getSOAPHeader();
    SOAPRequestHeader.detachNode();

    // Build the SOAP body main element CheckIt
    SOAPBody SOAPRequestBody = SOAPRequestMsg.getSOAPBody();
    javax.xml.soap.Name nameRequestBody = SOAPFac.createName("CheckIt", "", "http://www.myserver.com/");
    SOAPBodyElement sbeRequestBodyEle = SOAPRequestBody.addBodyElement(nameRequestBody);

    // Add all child elements to the CheckIt element
    SOAPElement seNameNode = sbeRequestBodyEle.addChildElement("Name");
    seNameNode.addChildElement("FirstName").addTextNode("mary");
    seNameNode.addChildElement("LastName").addTextNode("smith");

    sbeRequestBodyEle.addChildElement("ID").addTextNode("3423");

    URL urlWebService = new URL ("http://webserver/BGC/");
    // Send the SOAP request message and get back the SOAP response message
    SOAPMessage SOAPResponseMsg = SOAPConn.call(SOAPRequestMsg, urlWebService);

    SOAPConn.close();

    // Pull out the SOAP response body
    SOAPBody SOAPResponseBody = SOAPResponseMsg.getSOAPBody();

    // Check for SOAP faults
    if (SOAPResponseBody.hasFault()) {
        SOAPFault newFault = SOAPResponseBody.getFault();
        strStatus = "SOAP FAULT:<br>";
        strStatus += "<br>code = " + newFault.getFaultCodeAsName();
        strStatus += "<br>message = " + newFault.getFaultString();
        strStatus += "<br>actor = " + newFault.getFaultActor()+"<br>";
        boolOK = false;
    } else {
        // Pull the CheckProspectResponse element out of the SOAP response body
        javax.xml.soap.Name nameResponseBody = SOAPFac.createName("CheckResponse", "", "http://www.mysever.com/");
        Iterator iterElement = SOAPResponseBody.getChildElements(nameResponseBody);
        if (iterElement.hasNext()){
            SOAPBodyElement sbeResponseBodyEle = (SOAPBodyElement) iterElement.next();
            // Check for success or failure
            String strResultMsg = ((sbeResponseBodyEle.getValue() == null) ? sbeResponseBodyEle.toString() : sbeResponseBodyEle.getValue());
            strStatus = "Check response came back from webserver as *" + strResultMsg + "*<br>";
            boolOK = (strResultMsg.trim().toUpperCase().indexOf("SUCCESS") > 0);
        } // End if (iterElement.hasNext())
    } // End if (SOAPResponseBody.hasFault())
} catch(Exception e) {
    strStatus = "Error : "+((e.getMessage() != null) ? e.getMessage() : e.toString());
    boolOK = false;
} // End try
返回一组空元素。不是null本身,集合至少有一个成员,但该成员为null。它应该有一个值“SUCCESS”,但它是空的。我已经查看了完整的响应,它看起来很好,一切都在那里,它可以与Java6一起工作,只是不能与Java8一起工作。典型的成功响应如下所示:

<?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>
        <CheckResponse xmlns="http://www.mysever.com/">
            <CheckResult>SUCCESS</CheckResult>
        </CheckResponse>
    </soap:Body>
</soap:Envelope>
根据和文档,在这种情况下,getValue的返回值应该是“SUCCESS”。这对于Java6是正确的,但是对于Java8是错误的

你知道为什么这个方法可以用Java6而不能用Java8吗?这是虫子吗

<?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>
        <CheckResponse xmlns="http://www.mysever.com/">
            <CheckResult>SUCCESS</CheckResult>
        </CheckResponse>
    </soap:Body>
</soap:Envelope>
getValue = null
getNodeValue = null
getLocalName = CheckResponse
getNodeName = CheckResponse
getNamespaceURI = http://www.mysever.com/
getPrefix = null
getTextContent = SUCCESS