【问题标题】:SoapUI responds with 400 bad requestSoapUI 响应 400 错误请求
【发布时间】:2018-05-16 09:55:13
【问题描述】:

我需要向 Web 服务发出发布请求。 Web 服务具有以下结构:

    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:kn="http://..//soapAction">
   <soap:Header/>
   <soap:Body>
    <kn:InsertOrders>
      <!--Optional:-->
      <kn:XmlOrders>?</kn:XmlOrders>
      <kn:stringLength>?</kn:stringLength>
      <!--Optional:-->
      <kn:LoadListId>?</kn:LoadListId>
   </kn:InsertOrders>
 </soap:Body>
</soap:Envelope>

XmlOrders 接受一个字符串,我正在尝试在其中传递以下 xml 字符串:

    <?xml version="1.0" encoding="utf-8"?> <EXAMPLE xmlns="EXAMPLE"> <HEADER> <ID>G112233</ID> <TR>AB123</TR> </HEADER> <HEADER> <ID>G123123</ID> <TR>AB1234</TR> </HEADER> <DETAIL> <DETAILID>123123123</DETAILID> <TXT>ATR_123</TXT> </DETAIL> <DETAIL> <DETAILID>123123123</DETAILID> <TXT>ATR_123</TXT> </DETAIL> </EXAMPLE>

但是,SoapUI 返回 400 bad request:

    Wed May 16 12:41:19 EEST 2018:DEBUG:Receiving response: HTTP/1.1 400 Bad Request
    Wed May 16 12:41:19 EEST 2018:DEBUG:Connection can be kept alive indefinitely

有人知道吗?

【问题讨论】:

    标签: soap soapui


    【解决方案1】:

    我在这里发布这个答案是因为这解决了我的问题。我将 XML 字符串包装在里面: "&lt;![CDATA[" + myXMLString + "]]&gt;" 它实际上解析了 XML 字符串而不对其进行编码,或者转义字符 &gt; , &lt; , &amp; , ', "

    【讨论】:

    • 这是一个非常有用的解决方案。它解决了错误的请求问题。如果您遇到错误的 requet 400 消息,您会想到请求标头并忽略正文。但是请求体也可能导致这个错误的请求问题。
    【解决方案2】:

    是的,您可以将 XML 转换为字符串并将其设置为方法调用。

    最终,当 XML 转换为字符串时

    ' is replaced with &apos;
    
    " is replaced with &quot;
    
    & is replaced with &amp;
    
    < is replaced with &lt;
    
    > is replaced with &gt;
    

    请参阅 XML escaping 了解更多详情。

    您的示例 XML 将变为--

     &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;EXAMPLE xmlns=&quot;EXAMPLE&quot;&gt; &lt;HEADER&gt; &lt;ID&gt;G112233&lt;/ID&gt; &lt;TR&gt;AB123&lt;/TR&gt; &lt;/HEADER&gt; &lt;HEADER&gt; &lt;ID&gt;G123123&lt;/ID&gt; &lt;TR&gt;AB1234&lt;/TR&gt; &lt;/HEADER&gt; &lt;DETAIL&gt; &lt;DETAILID&gt;123123123&lt;/DETAILID&gt; &lt;TXT&gt;ATR_123&lt;/TXT&gt; &lt;/DETAIL&gt; &lt;DETAIL&gt; &lt;DETAILID&gt;123123123&lt;/DETAILID&gt; &lt;TXT&gt;ATR_123&lt;/TXT&gt; &lt;/DETAIL&gt; &lt;/EXAMPLE&gt;
    

    【讨论】:

    • 非常感谢您的回复,它似乎有效。但是,它返回以下错误消息:&lt;faultstring&gt;Server was unable to read request. ---&gt; There is an error in XML document (7, 46). ---&gt; Input string was not in a correct format.&lt;/faultstring&gt;。当我使用代码时,它会从我的字符串中为您上面给出的、修改的字符串返回此消息:x=x.replaceAll("&lt;","&amp;lt;"); x=x.replaceAll("&gt;","&amp;gt;"); x=x.replaceAll("\"","&amp;quot;"); x=x.replaceAll("'","&amp;apos;");
    • @JohnBrant,我不确定您的 XML 是否正确,我在您的示例 XML 中看到了两次
      节点。
    • @JohnBrant 再有一个想法,您可以使用我添加到答案中的编码 XML,看看它是否有效,或者尝试取消您在执行 replaceAll 后创建的 XML 并查看其是否有效XML。
    • 红男孩,非常感谢您的帮助。您的回答实际上是有道理的,但不是我的情况。如果您对解决我的问题感兴趣,我发布了一个答案。
    猜你喜欢
    • 1970-01-01
    • 2014-08-19
    • 2015-04-28
    • 2021-01-07
    • 2023-03-23
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多