[英]WSO2 REST API to capture invalid/valid xml request in WSO2 EI 6.1.1
I am using WSO2 EI 6.1.1.I have designed Rest API which received xml payload as request.In this if request is valid i can able to print incoming request payload by using log mediator, often if request is wrong, unfortunately can't able to get exact request that sent into my system. I am using WSO2 EI 6.1.1.I have designed Rest API which received xml payload as request.In this if request is valid i can able to print incoming request payload by using log mediator, often if request is wrong, unfortunately can't能够获得发送到我的系统的确切请求。
Getting below exception when receives invalid xml request.收到无效的 xml 请求时出现以下异常。
Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character ' ' (code 32) (missing name?)
I need to capture the input request that sent by client whether it is valid or not.我需要捕获客户端发送的输入请求是否有效。 Kindly help me to resolve this issue.请帮我解决这个问题。
API Code: 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>
Valid Request:有效请求:
<leaddetails>
<customer>
<extdburn>0</extdburn>
<title/>
<forename>Jared</forename>
<surname>Parker</surname>
<mobile>0406008974</mobile>
<email>Jwparke888@hotmail.com</email>
</customer>
</leaddetails>
Invalid request:无效的请求:
<leaddetails>
<customer>
<extdburn>0</extdburn>
<title/>
<forename>**Jared & Justin**</forename>
<surname>Parker</surname>
<mobile>0406008000</mobile>
<email>Jwparke888@hotmail.com</email>
</customer>
</leaddetails>
Logs:日志:
[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"}
Salute, I had a similar problem.致敬,我也有类似的问题。 perhaps replacing the symbols '**' with Unicode one will help you: You can find codes you need for example [1]: https://unicode-table.com/也许用 Unicode 替换符号 '**' 会对您有所帮助:您可以找到所需的代码,例如 [1]: https://unicode-table.com/
With the above API configurations and with the invalid request payload, this issue can be easily reproducible with WSO2 EI 6.1.1.使用上述 API 配置和无效的请求负载,可以使用 WSO2 EI 6.1.1 轻松重现此问题。
[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]
The above error has been thrown when WSO2 EI is trying to build the message payload inside a full log mediator.当 WSO2 EI 尝试在完整日志中介内构建消息有效负载时,会引发上述错误。 The issue is happening because of the '&' character in your invalid request payload.由于无效请求有效负载中的“&”字符,问题正在发生。 This is a special character and WSO2 EI cannot handle special characters like these and hence it will throw an exception.这是一个特殊字符,WSO2 EI 不能处理这些特殊字符,因此会抛出异常。
If you really want to use the '&' character in your request payload you need to use escape characters (&) to avoid breaking the flow.如果您真的想在请求负载中使用“&”字符,则需要使用转义字符 (&) 以避免中断流程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.