【问题标题】:Unable to view reply in SOAP call无法在 SOAP 调用中查看回复
【发布时间】:2019-09-15 23:39:29
【问题描述】:

我目前正在处理对我无法控制的特定域的自定义 SOAP 调用。我知道 SOAP 调用失败,但我似乎无法获取返回的(错误)值。

现在我正在使用下面的代码:

                    Document document = convertStringToDocument(this.MeldingString);
                // System.out.println(document);
                SOAPConnectionFactory myFct = SOAPConnectionFactory.newInstance();
                MessageFactory myMsgFct = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
                SOAPMessage message = myMsgFct.createMessage();
                SOAPConnection myCon = myFct.createConnection();

                // Adding parts
                SOAPPart mySPart = message.getSOAPPart();
                SOAPEnvelope myEnvp = mySPart.getEnvelope();

                // Escape the password for usage in header
                String escpwd = StringEscapeUtils.escapeJava(this.Password);

                // Header
                MimeHeaders headers = message.getMimeHeaders();
                headers.setHeader("Content-Type", "application/soap+xml;charset=UTF-8");
                headers.setHeader("Authorization", this.Username + ":" + escpwd);

                // Body
                SOAPBody body = myEnvp.getBody();
                body.addDocument(document);

                // Sending
                Core.getLogger("GetResultSOAPmsg").trace("Started");
                URL endPt = new URL(
                        "URL-TO-MY-SERVICE");
                System.setProperty("java.net.useSystemProxies", "true");
                try {
                    SOAPMessage reply = myCon.call(message, endPt); "UTF-8");

            }
            catch(Exception e)
            {
                e.printStackTrace();
            }

这会产生以下错误,这在整个 SO 中都很常见:

SEVERE: SAAJ0537: Invalid Content-Type. Could be an error message instead of a SOAP message
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Invalid Content-Type:text/html. Is this an error message instead of a SOAP response?

现在我已经阅读了这些主题的大部分内容,它们解释了通常如何解决这个问题(命名空间、转义 URL 等),但我似乎无法弄清楚我的情况出了什么问题。这是一项私人服务,不幸的是,对方无法在这种情况下为我提供帮助。错误可能是从错误的证书到拼写错误的 URL。

因此,我想在屏幕上实际查看拨打电话时收到的实际回复。这将对我有所帮助(假设它类似于 503、404 或其他页面)。无论我做什么以及在哪里设置断点,都没有关于回复的信息。这有点道理,因为它无法创建所述对象,但整个消息似乎被丢弃了。

在我的呼叫被丢弃之前,我可以通过什么方式查看对我的呼叫的实际回复?

【问题讨论】:

  • 您可以尝试从肥皂消息或肥皂部分中学习原始内容,如this thread中建议的那样
  • This blog post 建议使用自定义处理程序来记录原始 SOAP 请求和响应
  • @RomanVottner:感谢您的回复。我会调查这些帖子。

标签: java soap


【解决方案1】:

我认为你的标题有问题

headers.setHeader("Content-Type", "application/soap+xml;charset=UTF-8");

试试类似的东西

headers.setHeader("Content-Type", "application/xml;charset=UTF-8");

headers.setHeader("Content-Type", "application/json;charset=UTF-8");

取决于服务接受的内容类型

【讨论】:

  • 嗨伯爵。也许我完全错了,但我不明白这应该如何解决我的问题。我知道预期的响应与实际的响应不同(我期望的是 SOAP 消息,而是得到纯 HTML)。我想知道什么时候需要干预才能真正看到回复输出(在本例中为 HTML)。即使标题错误,也可能存在其他错误。我非常感谢您为编写此答案所付出的努力。
猜你喜欢
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 2020-09-01
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 2017-04-03
相关资源
最近更新 更多