You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SOAP UI测试WebService时XML请求解析失败求助

WebService SOAP请求解析失败问题排查

问题背景

使用SOAP UI工具进行WebService测试,依据WSDL编写脚本后,请求未被正常处理,服务器返回XML解析错误。

预期响应结果

<134>1 2024-02-22T12:42:35+01:00 - java - - - com.sagemcom.dc.spain.ws.server.requests.Orders order      [order] idPet 53, format 0, priority 3, fini 20240222124347000W, ffin 20240222124647000W 
<Order xmlns="http://stgdc/ws/B07" IdReq="B07" IdPet="53" Version="4.0">
    <Cnc Id="SAG6300004F92">
        <B07>
        <GENERAL  CheckSTG="N" />
        <MULTI_STG>
            <STG STGid="STG1" PortSTG="8080" ipStg="172.25.0.55" StgProtocol="http" StgPath="/WS_STG/WS_STG.asmx" nRetryWS="3" tRetryWS="30" toutWS="10"   FtpProtocol="FTP" DestDirReport="/cycles" ipFtp="172.25.0.55" nRetryFtp="5" tRetryFtp="300" toutFtp="300" FtpRandomDelay="100" FtpUserReport="hola" FtpPwdReport="hola"  ipFtpDCUpg="172.25.0.55" UserFtpDCUpg="DCUPGRADE" PwdFtpDCUpg=""  ipFtpMeterUpg="172.25.0.55" UserFtpMeterUpg="CNTUPGRADE" PwdFtpMeterUpg="" />
            <STG STGid="STG2" PortSTG="8030" ipStg="192.168.1.35" StgProtocol="http" StgPath="/WS_STG/WS_STG.asmx" nRetryWS="1" tRetryWS="30" toutWS="10"   FtpProtocol="FTP" DestDirReport="/downloads" ipFtp="192.168.1.35" nRetryFtp="0" tRetryFtp="1" toutFtp="1" FtpRandomDelay="0" FtpUserReport="hola" FtpPwdReport="hola"  ipFtpDCUpg="192.168.1.35" UserFtpDCUpg="DCUPGRADE" PwdFtpDCUpg=""  ipFtpMeterUpg="192.168.1.35" UserFtpMeterUpg="CNTUPGRADE" PwdFtpMeterUpg="" />
        </MULTI_STG>
        <EVENTS  SpontSTGDest="4" />
        </B07>
    </Cnc>
</Order>

构造的SOAP请求

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="urn:stgdc/dc/ws">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:Order>
         <ws:IdPet>111</ws:IdPet>
         <ws:Format>0</ws:Format>
         <ws:Order>xmlns="http://stgdc/ws/B07" IdReq="B07" Version="4.0"&lt;Cnc Id="SAG6300004F92"&lt;B07&gt;&lt;GENERAL  CheckSTG="N" /&gt;&lt;MULTI_STG&gt;&lt;STG STGid="STG1" PortSTG="8080" ipStg="172.25.0.55" StgProtocol="http" StgPath="/WS_STG/WS_STG.asmx" nRetryWS="3" tRetryWS="30" toutWS="10"   FtpProtocol="FTP" DestDirReport="/cycles" ipFtp="172.25.0.55" nRetryFtp="5" tRetryFtp="300" toutFtp="300" FtpRandomDelay="100" FtpUserReport="hola" FtpPwdReport="hola"  ipFtpDCUpg="172.25.0.55" UserFtpDCUpg="DCUPGRADE" PwdFtpDCUpg=""  ipFtpMeterUpg="172.25.0.55" UserFtpMeterUpg="CNTUPGRADE" PwdFtpMeterUpg="" /&gt;&lt;/MULTI_STG&gt;&lt;EVENTS  SpontSTGDest="4" /&gt;&lt;/B07&gt;&lt;/Cnc&gt;&gt;</ws:Order>
         <ws:Fini>20240226154024000W</ws:Fini>
         <ws:Ffin>20240226154824000W</ws:Ffin>
         <ws:Priority>1</ws:Priority>
      </ws:Order>
   </soapenv:Body>
</soapenv:Envelope>

实际返回结果

<134>1 2024-02-26T17:35:49+01:00 - java - - - com.sagemcom.dc.spain.ws.server.requests.Orders order     [order] idPet 111, format 0, priority 1, fini 20240226154024000W, ffin 20240226154824000W
xmlns="http://stgdc/ws/B07" IdReq="B07" Version="4.0"<Cnc Id="SAG6300004F92"<B07><GENERAL  CheckSTG="N" /><MULTI_STG><STG STGid="STG1" PortSTG="8080" ipStg="172.25.0.55" StgProtocol="http" StgPath="/WS_STG/WS_STG.asmx" nRetryWS="3" tRetryWS="30" toutWS="10"   FtpProtocol="FTP" DestDirReport="/cycles" ipFtp="172.25.0.55" nRetryFtp="5" tRetryFtp="300" toutFtp="300" FtpRandomDelay="100" FtpUserReport="hola" FtpPwdReport="hola"  ipFtpDCUpg="172.25.0.55" UserFtpDCUpg="DCUPGRADE" PwdFtpDCUpg=""  ipFtpMeterUpg="172.25.0.55" UserFtpMeterUpg="CNTUPGRADE" PwdFtpMeterUpg="" /></MULTI_STG><EVENTS  SpontSTGDest="4" /></B07></Cnc>>
<135>1 2024-02-26T17:35:49+01:00 - java - - - sun.net.httpserver.ServerImpl logReply    POST /WS_DC/WS_DC.asmx HTTP/1.1 [200  OK] ()
<13>1 2024-02-26T17:35:49+01:00 - pik - - - [Fatal Error] :1:1: Content is not allowed in prolog.
<131>1 2024-02-26T17:35:49+01:00 - java - - - com.sagemcom.dc.spain.ws.server.requests.OrdersParsingThread run
com.sagemcom.scheduler.spain.orders.InvalidOrderException: Invalid xml org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog. (5)
        at com.sagemcom.dc.spain.ws.server.requests.OrdersParsingThread.createOrderTask(OrdersParsingThread.java:145)
        at com.sagemcom.dc.spain.ws.server.requests.OrdersParsingThread.run(OrdersParsingThread.java:116)

问题原因及修复建议

核心原因

  1. XML结构完全破坏:请求中<ws:Order>内部的内容处理错误,既错误转义了XML标签(使用&lt;),又存在标签未闭合的问题(比如<Cnc Id="SAG6300004F92"缺少闭合>),导致服务器解析时无法识别合法XML结构,把开头的xmlns="..."当成XML声明外的非法内容,触发"prolog中不允许内容"的错误。
  2. 节点命名冲突与格式违规:外层已使用<ws:Order>节点,内部又嵌套同名节点,且内部节点内容并非合法XML子节点,而是转义后的文本,完全不符合SOAP请求的XML规范。

修复建议

  • 修正XML嵌入方式:如果需要将内部Order作为XML节点嵌入,无需转义<和>,应正确设置命名空间,将其作为合法XML子节点插入,示例如下:
    <ws:Order>
       <ws:IdPet>111</ws:IdPet>
       <ws:Format>0</ws:Format>
       <Order xmlns="http://stgdc/ws/B07" IdReq="B07" Version="4.0">
           <Cnc Id="SAG6300004F92">
               <B07>
                   <GENERAL CheckSTG="N" />
                   <!-- 其他子节点保持原样 -->
               </B07>
           </Cnc>
       </Order>
       <!-- 其他参数 -->
    </ws:Order>
    
  • 修复标签闭合错误:确保所有XML标签正确闭合,比如将<Cnc Id="SAG6300004F92"改为<Cnc Id="SAG6300004F92">。
  • 区分命名空间:通过命名空间明确区分外层<ws:Order>和内部<Order>,避免解析混淆。

内容的提问来源于stack exchange,提问作者Nabil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 08:07:03