Soap客户端:SAAJ0514无法从给定源创建信封,因为根元素未命名为Envelope

时间:2018-02-14 17:00:49

标签: java web-services soap soap-client

我正在尝试实现一个SOAP客户端(我发现了代码here并且我正在尝试使其适应我的问题(将文件发送到endPointURL))。 我只有soapAction和endPointURL将我的消息发送到服务器。

public class SOAPClient {

private static final Logger logger = LoggerFactory.getLogger(SOAPClient.class);
private static File file = null;

public static void main(String args[]) {

    String soapEndpointUrl = "url?wsdl";
    String soapAction = "soapAction(https)"
    file = new File("myFileToSend.xml");
    callSoapWebService(soapEndpointUrl, soapAction,file);
}

private static void createSoapEnvelope(SOAPMessage soapMessage,Document doc) throws SOAPException {


    SOAPPart soapPart = soapMessage.getSOAPPart();

    DOMSource domSource = new DOMSource(doc);
    soapPart.setContent(domSource);

    //Error here !
    SOAPEnvelope envelope = soapMessage.getSOAPPart().getEnvelope();

    SOAPHeader header = envelope.getHeader();



}

private static void callSoapWebService(String soapEndpointUrl, String soapAction,File f) {
    try {
        file = f;
        // Create SOAP Connection
        SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
        SOAPConnection soapConnection = soapConnectionFactory.createConnection();

        // Send SOAP Message to SOAP Server
        SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(soapAction), soapEndpointUrl);

        if(soapResponse!=null){
            // Print the SOAP Response
            logger.info("Response SOAP Message:");
            soapResponse.writeTo(System.out);
            logger.info("----------------------------------------------");

            logger.info("soap reponse : "+soapResponse);

        }
        soapConnection.close();
    } catch (Exception e) {
        logger.error("\nError occurred while sending SOAP Request to Server!\n");
        e.printStackTrace();
    }
}

private static SOAPMessage createSOAPRequest(String soapAction) throws Exception {
    Document doc = addXmlFile();
    SOAPMessage soapMessage = null;

    if(doc!=null){

        MessageFactory messageFactory = MessageFactory.newInstance();
        soapMessage = messageFactory.createMessage();
        createSoapEnvelope(soapMessage,doc);
        soapMessage.saveChanges();

        logger.info(soapMessage.toString());

        /* Print the request message, just for debugging purposes */
        logger.info("Request SOAP Message:");
        soapMessage.writeTo(System.out);
    }

    return soapMessage;
}


@SuppressWarnings("finally")
private static Document addXmlFile() {
    Document doc = null;
    try {

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        doc = builder.parse(file.getAbsoluteFile());
        return doc;

    } catch (SAXException | IOException e) {
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    }

    finally {

        return doc;

    }
}

实际上当我尝试启动此代码时,我收到错误:SAAJ0514无法从给定源创建信封,因为根元素未命名为Envelope。 错误SAAJ0511:无法从给定的来源创建信封

com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source: 
    at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:117)
    at com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelopeFromSource(SOAPPart1_1Impl.java:69)
    at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:125)
    at SOAPClient.createSoapEnvelope(SOAPClient.java:70)
    at SOAPClient.createSOAPRequest(SOAPClient.java:132)
    at SOAPClient.callSoapWebService(SOAPClient.java:103)
    at SOAPClient.main(SOAPClient.java:39)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source because the root element is not named "Envelope"
    at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.lookForEnvelope(SOAPPartImpl.java:154)
    at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:121)
    at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:110)
    ... 6 more

我在许多网站上看到了一些类似的错误,但没有一个真正帮助我找到如何纠正这个问题(有些解释了删除服务器上的一些参数)。

感谢您的答案。

1 个答案:

答案 0 :(得分:0)

在与我合作的公司中发生了错误,删除?wsdl部分是我需要做的确切工作。