[英]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>{
"status" : "Records added",

}</format>
<args/>
</payloadFactory>
<respond/>
</outSequence>
<faultSequence>
<payloadFactory media-type="json">
<format>
{
"status" : "Failure",
"records" : "0"
}</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题
payload
, its giving me the error which is mentioned above.payload
时循环之前,它给了我上面提到的错误。 Any resolution to that?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.