Java以编程方式请求SOAP Web服务问题

时间:2016-10-24 18:07:26

标签: java xml web-services soap

我试图通过Java以编程方式向端点发出SOAP请求。我对Java和Web服务比较陌生,所以我不确定我在这里做错了什么。

此外,我打印出SOAP消息并将其粘贴到邮递员等工具中并输入终点并且帖子成功。所以我觉得我的要求不合适。

这是我的代码:

    System.out.println("hey now!!!!");

    try {
        SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
        SOAPConnection connection = scf.createConnection();     

        MessageFactory mf = MessageFactory.newInstance();
        SOAPMessage message = mf.createMessage();
        SOAPBody body = message.getSOAPBody();  

        SOAPHeader header = message.getSOAPHeader();

        SOAPElement getOpenPOs = body.addChildElement("GetOpenPOs", "", "https://www.autocrib.net");

        SOAPElement U = getOpenPOs.addChildElement("U");
        U.addTextNode("u");
        SOAPElement P = getOpenPOs.addChildElement("P");
        P.addTextNode("p");
        SOAPElement N = getOpenPOs.addChildElement("N");
        N.addTextNode("n");         
        SOAPElement Processed = getOpenPOs.addChildElement("Processed");
        Processed.addTextNode("false");
        SOAPElement StationEnd = getOpenPOs.addChildElement("StationEnd");
        StationEnd.addTextNode("");         
        SOAPPart sp = message.getSOAPPart();
        SOAPEnvelope envelope = sp.getEnvelope();

        //MimeHeaders headers = message.getMimeHeaders();
        //header.setHeader("Content-Type", "text/xml");
        //message.getMimeHeaders().addHeader("SOAPAction", "GetOpenPOs");
        message.getMimeHeaders().addHeader("Content-Type", "text/xml");
        header.setAttribute("Content-Type", "text/xml");

        message.saveChanges();

        System.out.println("Envelope Body");

        message.writeTo(System.out);
        System.out.println();

        SOAPMessage reply = connection.call(message, 
                "https://www24.autocrib.net/WebServices/AutoCribWS.asmx");

        //String reply2 = connection.call(message, "https://www24.autocrib.net/WebServices/AutoCribWS.asmx").toString();

        //sp = reply.getSOAPPart();
        //envelope = sp.getEnvelope();
        //body = envelope.getBody();

        //System.out.println(body.toString());
        System.out.println("Done!!!!!!!!!!!!!!!!!!!");

    } catch (Throwable t) {
        System.out.println("Something went wrong!!! " + t.toString());
    }
}

运行此代码时出现此错误:

  

2016年10月24日下午1:56:57 com.sun.xml.internal.messaging.saaj.soap.MessageImpl identifyContentType   严重:SAAJ0537:内容类型无效。可能是错误消息而不是SOAP消息   有些不对劲!!! com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl:com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl:Invalid Content-Type:text / html。这是一条错误消息而不是SOAP响应吗?

我猜我需要添加Content-Type标头。我做错了吗?任何指导都会很棒。

谢谢, 添

2 个答案:

答案 0 :(得分:0)

  

com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl:无效   内容类型:text / html的。

SAAJ API抛出异常,因为它认为您的Web服务返回为响应text / html内容而不是soap / xml内容。

所以,有人建议:研究邮递员返回的内容。你确定它是soap / xml格式吗?您注意到它不是soap / xml内容,可以处理WS的实现,如果需要,还可以使返回符合SOAP规范。

答案 1 :(得分:0)

威尔科我想给你答案,但我不认为我可以这样做以征求意见。你的提示帮助我弄清楚它确实是返回text / html,因为我有用户代理头。

再次感谢!!