简体   繁体   English

错误:com.ctc.wstx.exc.WstxParsingException:非法处理指令目标(“xml”); xml(不区分大小写)由规范保留

[英]Error: com.ctc.wstx.exc.WstxParsingException: Illegal processing instruction target ("xml"); xml (case insensitive) is reserved by the specs

Scenario I'm trying to upload the multipart file which has xml content, the xml data will be parse one by one and stored in the database.场景我正在尝试上传包含 xml 内容的多部分文件,xml 数据将被一个一个地解析并存储在数据库中。

Sample XML Data样本 XML 数据

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Table>
     <Copyright>
          <applicationno>1641/2001</applicationno>
          <applicationdate>11/15/2001 12:00:00 AM</applicationdate>
          <TitleEnglish>DURA PLUS</TitleEnglish>
          <applicantname>FARMIGEA PAKISTAN (PVT) LTD.</applicantname>
          <class>ARTISTIC WORK</class>
          <City>LAHORE</City>
          <Country>PAKISTAN</Country>
          <status>Application Registered</status>
     </Copyright>
     <Copyright>
          <applicationno>1644/2001</applicationno>
          <applicationdate>11/15/2001 12:00:00 AM</applicationdate>
          <TitleEnglish>OCUGEL FARMIGEA</TitleEnglish>
          <applicantname>FARMIGEA PAKISTAN (PVT) LTD.</applicantname>
          <class>ARTISTIC WORK</class>
          <City>LAHORE</City>
          <Country>PAKISTAN</Country>
          <status>Application Registered</status>
     </Copyright>
<Table>

API API

<?xml version="1.0" encoding="UTF-8"?>
<api context="/ipo" name="IPOSearch" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="POST" uri-template="/send">
        <inSequence>
            <property name="messageType" scope="axis2" type="STRING" value="multipart/form-data"/>
            <property expression="//mediate/ipo" name="Table" scope="default" type="STRING"/>
            <property expression="base64Decode(get-property('Table'))" name="DecodeTable" scope="default" type="STRING"/>
            <payloadFactory media-type="xml">
                <format>
                    <root>$1</root>
                </format>
                <args>
                    <arg evaluator="xml" expression="get-property('DecodeTable')"/>
                </args>
            </payloadFactory>
            <foreach expression="//Table/Copyright" id="foreach_copyright">
                <sequence>
                    <dbreport>
                        <connection>
                            <pool>
                                <driver>org.postgresql.Driver</driver>
                                <url>jdbc:postgresql://XXXXXX:5432/secpleapdev?currentSchema=secpleap</url>
                                <user>postgres</user>
                                <password>root</password>
                            </pool>
                        </connection>
                        <statement>
                            <sql><![CDATA[INSERT INTO secpleap.ipo_copyright
(application_no, application_date, title_english, applicant_name, class_name, city, country, status)
VALUES(?, ?, ?, ?, ?, ?, ?, ?);
]]></sql>
                            <parameter expression="//applicationno" type="VARCHAR" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"/>
                            <parameter expression="//applicationdate" type="VARCHAR" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"/>
                            <parameter expression="//TitleEnglish" type="VARCHAR" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"/>
                            <parameter expression="//applicantname" type="VARCHAR" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"/>
                            <parameter expression="//class" type="VARCHAR" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"/>
                            <parameter expression="//City" type="VARCHAR" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"/>
                            <parameter expression="//Country" type="VARCHAR" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"/>
                            <parameter expression="//status" type="VARCHAR"/>
                        </statement>
                    </dbreport>
                </sequence>
            </foreach>
        </inSequence>
        <outSequence>
            <log level="custom">
                <property name="add" value="Records added!!!!"/>
            </log>
            <payloadFactory media-type="json">
                <format>{&#xd;
    "status" : "Records added",&#xd;
    &#xd;
}</format>
                <args/>
            </payloadFactory>
            <respond/>
        </outSequence>
        <faultSequence>
            <payloadFactory media-type="json">
                <format>&#xd;
{&#xd;
    "status" : "Failure",&#xd;
    "records" : "0"&#xd;
}</format>
                <args/>
            </payloadFactory>
            <respond/>
        </faultSequence>
    </resource>
</api>

Error错误

[2022-12-28 18:39:52,890] ERROR {SequenceMediator} - {api:IPOSearch} com.ctc.wstx.exc.WstxParsingException: Illegal processing instruction target ("xml"); xml (case insensitive) is reserved by the specs.
 at [row,col {unknown-source}]: [1,62] org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxParsingException: Illegal processing instruction target ("xml"); xml (case insensitive) is reserved by the specs.
 at [row,col {unknown-source}]: [1,62]
        at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)
        at org.apache.axiom.om.impl.llom.OMSerializableImpl.build(OMSerializableImpl.java:78)
        at org.apache.axiom.om.impl.llom.OMElementImpl.build(OMElementImpl.java:722)
        at org.apache.axiom.om.impl.llom.OMElementImpl.detach(OMElementImpl.java:700)
        at org.apache.axiom.om.impl.llom.OMNodeImpl.setParent(OMNodeImpl.java:105)
        at org.apache.axiom.om.impl.llom.OMElementImpl.addChild(OMElementImpl.java:296)
        at org.apache.axiom.om.impl.llom.OMElementImpl.addChild(OMElementImpl.java:212)
        at org.apache.axiom.soap.impl.llom.SOAPBodyImpl.addChild(SOAPBodyImpl.java:231)
        at org.apache.synapse.mediators.transform.PayloadFactoryMediator.mediate(PayloadFactoryMediator.java:132)
        at org.apache.synapse.mediators.transform.PayloadFactoryMediator.mediate(PayloadFactoryMediator.java:111)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:110)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72)
        at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
        at org.apache.synapse.api.Resource.process(Resource.java:342)
        at org.apache.synapse.api.API.process(API.java:477)
        at org.apache.synapse.api.AbstractApiHandler.apiProcess(AbstractApiHandler.java:93)
        at org.apache.synapse.api.AbstractApiHandler.dispatchToAPI(AbstractApiHandler.java:71)
        at org.apache.synapse.api.rest.RestRequestHandler.dispatchToAPI(RestRequestHandler.java:90)
        at org.apache.synapse.api.rest.RestRequestHandler.process(RestRequestHandler.java:76)
        at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:54)
        at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:344)
        at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:101)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
        at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:376)
        at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:435)
        at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:183)
        at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.ctc.wstx.exc.WstxParsingException: Illegal processing instruction target ("xml"); xml (case insensitive) is reserved by the specs.
 at [row,col {unknown-source}]: [1,62]
        at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:606)
        at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:479)
        at com.ctc.wstx.sr.BasicStreamReader.readPIPrimary(BasicStreamReader.java:3940)
        at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2816)
        at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1072)
        at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:681)
        at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214)
        ... 29 more

Question

  1. I've converted base64 encoded data but before looping when I'm generating a new payload , its giving me the error which is mentioned above.我已经转换了 base64 编码数据,但在我生成新payload时循环之前,它给了我上面提到的错误。 Any resolution to that?对此有什么解决办法吗?
  2. If lets say I don't use payload factory before foreach mediator, how could I use DecodeTable property values as expression of foreach mediator?如果说我在foreach中介之前不使用payload factory ,我怎么能使用DecodeTable属性值作为foreach中介的表达式?

The issue is you are trying to include the XML Declaration ( <?xml version="1.0" encoding="utf-8" standalone="yes"?> ) in the Payload which is incorrect.问题是您试图在不正确的有效载荷中包含XML 声明( <?xml version="1.0" encoding="utf-8" standalone="yes"?> )。

Inorder to resolve the issue, instead of a type="STRING" property try using an type="OM" property.为了解决这个问题,请尝试使用type="OM"属性而不是type="STRING"属性。 Then the XML will be parsed correctly and you will have an XML node tree that you can easily traverse.然后 XML 将被正确解析,您将拥有一个可以轻松遍历的 XML 节点树。 Then use that in your Payloadfactory.然后在您的 Payloadfactory 中使用它。

<property expression="base64Decode(get-property('Table'))" name="DecodeTable" scope="default" type="OM"/>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 XML 读卡器错误:com.ctc.wstx.exc.WstxIOException:无效 UTF-8 起始字节 0x8b(在 char #2,字节 #-1)WSO2 ESB - XML reader error: com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 start byte 0x8b (at char #2, byte #-1) WSO2 ESB 线程 1:获取数据时的 EXC_BAD_INSTRUCTION - Thread 1: EXC_BAD_INSTRUCTION when fetching data flutter firebase querysnapshot: dart代码中不区分大小写的方法 - flutter firebase querysnapshot: case insensitive method in dart code Google Cloud Platform 上的托管站点返回 XML 错误 - Hosting site on Google Cloud Platform returns XML error Mongo Atlas 搜索索引,用于部分匹配和不区分大小写的查询 - Mongo Atlas search index for both partial matches and case-insensitive queries 错误:解析 XML 输入 stream 时映射失败错误。 当前上下文不是 Object 而是 root - ERROR: Mapping failed Error while parsing XML input stream. Current context not Object but root 找到了满足“Firebase/Functions”依赖性的规范,但它们需要更高的最低部署目标 - Specs satisfying the `Firebase/Functions` dependency were found, but they required a higher minimum deployment target WSO2 XML 声明 - WSO2 XML Declaration 使用 PySpark 解析嵌套的 XML - Parsing Nested XML with PySpark Flutter iOS 崩溃并出现 EXC_BAD_ACCESS 错误 - Flutter iOS crash with EXC_BAD_ACCESS error
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM