【问题标题】:How to send request through SOAP UI with CDATA within CDATA to Java Application?如何通过带有 CDATA 中的 CDATA 的 SOAP UI 向 Java 应用程序发送请求?
【发布时间】:2018-04-16 02:56:59
【问题描述】:

解析 XML 时出现以下异常

org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed.

我正在发送的 SOAP 请求:

<soap:Envelope>
   <soap:Header/>
   <soap:Body>
      <ver:ReceiveOnlineBatchExternalAttachment>
         <web:username>user</web:username>
         <web:passwd>pass</web:passwd>
         <web:receiversReference>1232323</web:receiversReference>
         <web:sequenceNumber>1</web:sequenceNumber>
         <web:batch>
            <![CDATA[
              <?xml version="1.0" encoding="UTF-8"?> 
              <DataBatch>
                <DataUnits>
                 <DataUnit>
                  <FormTask>
                   <ServiceCode>323015</ServiceCode>
                   <Form>
                    <FormData>
                            <![CDATA[<melding> </melding>]]
                    </FormData>
                   </Form>
                  </FormTask>
               </DataUnit>
             </DataUnits>
           </DataBatch>
         ]]>>
        </web:batch>
      </ver:ReceiveOnlineBatchExternalAttachment>
   </soap:Body>
</soap:Envelope>

我对 CDATA 进行了多次更改,但出现相同的错误。 谁能建议如何在此请求中处理 CDATA 中的 CDATA?

尝试以下但失败:

         <![CDATA[ <elements> <![CDATA[<melding> </melding>]] <elements> ]]>>
         <![CDATA[ <elements> <![CDATA[<melding> </melding>]]> <elements> ]]>
         <![CDATA[ <elements> &lt;![CDATA[<melding> </melding>]]&gt; <elements> ]]>

【问题讨论】:

标签: java xml soapui cdata


【解决方案1】:

我推测您的问题实际上是由嵌套的CDATA 内容引起的。您可以尝试以下方法吗:

<![CDATA[
    <DataBatch>
      <DataUnits>
         <DataUnit>
          <FormTask>
           <ServiceCode>323015</ServiceCode>
           <Form>
            <FormData>
                    <![CDATA[
                        <melding> </melding>
                    ]]]]><![CDATA[>
            </FormData>
           </Form>
          </FormTask>
       </DataUnit>
     </DataUnits>
   </DataBatch>
 ]]>

这里技巧的要点是,当解析器遇到内部嵌套的&lt;![CDATA[ 时,它实际上会忽略它。然后,当它碰到这个时:

]]]]><![CDATA[>

第一个 ]] 也将被忽略,接下来的 ]]&gt; 将被消耗,关闭外部 CDATA,然后立即再次打开一个新的 CDATA,这应该持续到外部关闭为此。

@fatherazrael 编辑:

移除 XML 标签&lt;?xml version="1.0" encoding="UTF-8"?&gt;

参考:Nested CDATA - correctly

【讨论】:

  • 同样的错误。 >
  • 我有点怀疑这...你确定你使用了我的确切代码吗?另外,检查我提供的链接。我相当肯定嵌套的 CDATA 标签是这里的罪魁祸首,你需要解决这个问题。
  • 我仔细检查过,但我正在按照您所说的那样做。但得到同样的错误。我需要在第二个 CDATA 或类似的东西中添加 吗?
  • 不...第一个 CDATA 和中间 ]]]]&gt; 之间的所有内容都应该被忽略。
  • 把问题分开。移除内部的 CDATA 标签,看看它是否有效。
猜你喜欢
  • 2021-01-23
  • 2014-07-24
  • 2014-03-02
  • 2021-09-03
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多