xml - WSO2 REST API 在 WSO2 EI 6.1.1 中捕获无效/有效 xml 请求
问题描述
我正在使用 WSO2 EI 6.1.1。我设计了 Rest API,它接收 xml 有效负载作为请求。在这种情况下,如果请求有效,我可以使用日志调解器打印传入的请求有效负载,通常如果请求错误,不幸的是不能能够获得发送到我的系统的确切请求。
收到无效的 xml 请求时出现异常。
Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character ' ' (code 32) (missing name?)
我需要捕获客户端发送的输入请求是否有效。请帮我解决这个问题。
API 代码:
<?xml version="1.0" encoding="UTF-8"?>
<api context="/WSO2API" name="WSO2API" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="POST">
<inSequence>
<log level="custom">
<property name="API Logger"
value="====Inside QRSag_NAC Lead Creation API Process Started====" />
<property name="===Input Request Logger===" expression="$body" />
</log>
<log level="full" />
<payloadFactory media-type="json" description="Form Response Payload">
<format>{"StatusCode":"$1","Message":"$2"}</format>
<args>
<arg value="200" />
<arg value="Success" />
</args>
</payloadFactory>
<log level="custom">
<property name="==Response==" expression="json-eval($.)"></property>
</log>
<property name="HTTP_SC" value="400" scope="axis2" type="STRING"
description="HTTPStatusCode" />
<property name="messageType" value="application/json" scope="axis2"
type="STRING" description="HttpMessageType" />
<respond />
</inSequence>
<outSequence />
<faultSequence>
<log level="custom" separator=",**, " description="FaultSequence">
<property name="=====Faulty Response=====" value="Inside default Fault Sequence" />
<property name="=====message=====" expression="get-property('ERROR_MESSAGE')" />
</log>
<payloadFactory media-type="json" description="Form Response Payload">
<format>{"StatusCode":"$1","Message":"$2"}</format>
<args>
<arg value="400" />
<arg value="Failure" />
</args>
</payloadFactory>
<property name="HTTP_SC" value="400" scope="axis2" type="STRING"
description="HTTPStatusCode" />
<property name="messageType" value="application/json" scope="axis2"
type="STRING" description="HttpMessageType" />
<log level="custom">
<property name="==Response==" expression="json-eval($.)"></property>
</log>
<respond />
</faultSequence>
</resource>
</api>
有效请求:
<leaddetails>
<customer>
<extdburn>0</extdburn>
<title/>
<forename>Jared</forename>
<surname>Parker</surname>
<mobile>0406008974</mobile>
<email>Jwparke888@hotmail.com</email>
</customer>
</leaddetails>
无效的请求:
<leaddetails>
<customer>
<extdburn>0</extdburn>
<title/>
<forename>**Jared & Justin**</forename>
<surname>Parker</surname>
<mobile>0406008000</mobile>
<email>Jwparke888@hotmail.com</email>
</customer>
</leaddetails>
日志:
[2021-03-05 17:27:54,003] [] INFO - LogMediator API Logger = ====Inside QRSag_NAC Lead Creation API Process Started====, ===Input Request Logger=== = <soapenv:Body xmlns:soapenv="h
ttp://schemas.xmlsoap.org/soap/envelope/"/>
[2021-03-05 17:27:54,004] [] ERROR - LogMediator Could not build full log message: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character ' ' (code 32) (missing name?)
at [row,col {unknown-source}]: [6,26]
org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character ' ' (code 32) (missing name?)
at [row,col {unknown-source}]: [6,26]
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)
at org.apache.axiom.om.impl.llom.OMElementImpl.buildNext(OMElementImpl.java:653)
at org.apache.axiom.om.impl.llom.OMNodeImpl.getNextOMSibling(OMNodeImpl.java:122)
at org.apache.axiom.om.impl.traverse.OMChildrenIterator.getNextNode(OMChildrenIterator.java:36)
at org.apache.axiom.om.impl.traverse.OMAbstractIterator.hasNext(OMAbstractIterator.java:58)
at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:554)
at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875)
at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:555)
at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875)
at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:555)
at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875)
at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:555)
at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875)
at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.internalSerialize(SOAPEnvelopeImpl.java:230)
at org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:125)
at org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:113)
at org.apache.axiom.om.impl.llom.OMElementImpl.toString(OMElementImpl.java:988)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuffer.append(StringBuffer.java:265)
at org.apache.synapse.mediators.builtin.LogMediator.getFullLogMessage(LogMediator.java:203)
at org.apache.synapse.mediators.builtin.LogMediator.getLogMessage(LogMediator.java:138)
at org.apache.synapse.mediators.builtin.LogMediator.mediate(LogMediator.java:101)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:97)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
at org.apache.synapse.rest.Resource.process(Resource.java:343)
at org.apache.synapse.rest.API.process(API.java:399)
at org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:123)
at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:101)
at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:69)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:304)
at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:78)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:326)
at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:372)
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:151)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character ' ' (code 32) (missing name?)
at [row,col {unknown-source}]: [6,26]
at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:639)
at com.ctc.wstx.sr.StreamScanner.parseFullName(StreamScanner.java:1924)
at com.ctc.wstx.sr.StreamScanner.parseEntityName(StreamScanner.java:2050)
at com.ctc.wstx.sr.StreamScanner.resolveNonCharEntity(StreamScanner.java:1479)
at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2788)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1072)
at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next(XMLStreamReaderWrapper.java:225)
at org.apache.axiom.util.stax.dialect.DisallowDoctypeDeclStreamReaderWrapper.next(DisallowDoctypeDeclStreamReaderWrapper.java:34)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:681)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214)
... 39 more
[2021-03-05 17:27:54,015] [] ERROR - WSO2API Could not build full log message: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character ' ' (code 32) (missing name?)
at [row,col {unknown-source}]: [6,26]
org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character ' ' (code 32) (missing name?)
at [row,col {unknown-source}]: [6,26]
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)
at org.apache.axiom.om.impl.llom.OMElementImpl.buildNext(OMElementImpl.java:653)
at org.apache.axiom.om.impl.llom.OMNodeImpl.getNextOMSibling(OMNodeImpl.java:122)
at org.apache.axiom.om.impl.traverse.OMChildrenIterator.getNextNode(OMChildrenIterator.java:36)
at org.apache.axiom.om.impl.traverse.OMAbstractIterator.hasNext(OMAbstractIterator.java:58)
at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:554)
at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875)
at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:555)
at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875)
at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:555)
at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875)
at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:555)
at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875)
at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.internalSerialize(SOAPEnvelopeImpl.java:230)
at org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:125)
at org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:113)
at org.apache.axiom.om.impl.llom.OMElementImpl.toString(OMElementImpl.java:988)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuffer.append(StringBuffer.java:265)
at org.apache.synapse.mediators.builtin.LogMediator.getFullLogMessage(LogMediator.java:203)
at org.apache.synapse.mediators.builtin.LogMediator.getLogMessage(LogMediator.java:138)
at org.apache.synapse.mediators.builtin.LogMediator.mediate(LogMediator.java:101)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:97)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
at org.apache.synapse.rest.Resource.process(Resource.java:343)
at org.apache.synapse.rest.API.process(API.java:399)
at org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:123)
at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:101)
at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:69)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:304)
at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:78)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:326)
at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:372)
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:151)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character ' ' (code 32) (missing name?)
at [row,col {unknown-source}]: [6,26]
at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:639)
at com.ctc.wstx.sr.StreamScanner.parseFullName(StreamScanner.java:1924)
at com.ctc.wstx.sr.StreamScanner.parseEntityName(StreamScanner.java:2050)
at com.ctc.wstx.sr.StreamScanner.resolveNonCharEntity(StreamScanner.java:1479)
at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2788)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1072)
at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next(XMLStreamReaderWrapper.java:225)
at org.apache.axiom.util.stax.dialect.DisallowDoctypeDeclStreamReaderWrapper.next(DisallowDoctypeDeclStreamReaderWrapper.java:34)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:681)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214)
... 39 more
[2021-03-05 17:27:54,036] [] INFO - LogMediator =====Faulty Response===== = Inside default Fault Sequence,**, =====message===== = Could not build full log message: com.ctc.wstx.exc
.WstxUnexpectedCharException: Unexpected character ' ' (code 32) (missing name?)
[2021-03-05 17:27:54,037] [] INFO - LogMediator ==Response== = {"StatusCode":"400","Message":"Failure"}
解决方案
礼炮!我有一个类似的问题,也许用 Unicode 替换符号 '**' 会对你有所帮助。您可以找到所需的代码,例如 [1]:https ://unicode-table.com/
推荐阅读
- windows-iot-core-10 - 在 Win10 IoT Core 上安装 Azure IoT Edge 导致启动失败
- sql - 如何将 DataGrip SQL 格式化程序与复合 WHERE 子句一起使用
- python - tensorflow 使用占位符与 tf.convert_to_tensor() 将 numpy 数组传递给图形
- typescript - 在辅助函数和异步等待中拆分云函数
- javascript - 是否有 rangeselector 事件来获取数据范围之外的日期?
- vbscript - CDO.Message 适用于 VBS 但不适用于 ASP
- pouchdb - 多个数据库或类型字段
- javascript - 根据url添加span类
- c++ - IDirect3DDevice9::Reset 异常的原因是什么?
- reactjs - react/jsx-a11y eslint 为控制/标签抛出意外错误