简体   繁体   English

WSO2 REST API to capture invalid/valid xml request in WSO2 EI 6.1.1

[英]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 (&amp;) to avoid breaking the flow.如果您真的想在请求负载中使用“&”字符,则需要使用转义字符 (&amp;) 以避免中断流程。

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM