Посредник проверки микросхемы WSO2 Micro Integrator завершился неудачно из-за неподдерживаемой операции

Работа с Integration Studio в Windows 10.

Когда я пытаюсь проверить свою полезную нагрузку из тела REST API с помощью последовательности с проверкой посредника, я получаю сообщение об ошибке. Ошибка:

[2020-03-10 11:07:29,295]  INFO {TRACE_LOGGER} - Building message. Sequence <SequenceMediator> is content aware
[2020-03-10 11:07:29,309] ERROR {org.apache.synapse.mediators.base.SequenceMediator} - Unsupported Operation org.apache.axiom.om.OMException: Unsupported Operation
at org.apache.axiom.om.impl.llom.OMTextImpl.getInputStream(OMTextImpl.java:422)
at org.apache.synapse.mediators.builtin.ValidateMediator.mediate(ValidateMediator.java:231)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:214)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71)
at org.apache.synapse.config.xml.AnonymousListMediator.mediate(AnonymousListMediator.java:37)
at org.apache.synapse.config.xml.SwitchCase.mediate(SwitchCase.java:69)
at org.apache.synapse.mediators.filters.SwitchMediator.mediate(SwitchMediator.java:134)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
at org.apache.synapse.rest.Resource.process(Resource.java:331)
at org.apache.synapse.rest.API.process(API.java:440)
at org.apache.synapse.rest.RESTRequestHandler.apiProcessNonDefaultStrategy(RESTRequestHandler.java:149)
at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:95)
at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:71)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:325)
at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:98)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:367)
at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:412)
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:181)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

Затем я пытаюсь проверить это:

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="Reserves" statistics="enable" trace="enable" xmlns="http://ws.apache.org/ns/synapse">
<validate cache-schema="false" source="json-eval($)">
    <schema key="conf:/schemas/ReservesRoot.json"/>
    <on-fail>
        <payloadFactory media-type="json">
            <format>{"Error":$1"}</format>
            <args>
                <arg evaluator="xml" expression="$ctx:ERROR_MESSAGE"/>
            </args>
        </payloadFactory>
        <property name="HTTP_SC" scope="axis2" type="STRING" value="500"/>
        <respond/>
    </on-fail>
</validate>
</sequence>

Схема JSON:

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {
        "Type": {
            "type": "string"
        }
    },
    "required": [
        "Type"
    ]
}

Когда я получаю схему в свойстве, я вижу строку схемы.

<property value="get-property('registry', 'conf:/schemas/ReservesRoot.json')" name="ReservesSchema"/>
<log>
    <property expression="get-property('ReservesSchema')" name="JSON_P"/>
</log>

person Cuba    schedule 10.03.2020    source источник


Ответы (2)


Эта проблема возникает, когда сохраненная в реестре схема JSON не имеет правильного типа носителя (должно быть application / json). Не могли бы вы дважды проверить это в представлении редактора ресурсов Integration Studio.

Вы можете получить доступ к представлению редактора ресурсов, щелкнув правой кнопкой мыши проект ресурсов реестра -> Редактор ресурсов реестра.

person Lahiru Madushanka    schedule 11.03.2020

Эта проблема возникает с микроинтегратором. Микроинтегратор не имеет артефактов реестра rdbms. Следовательно, мы не можем указать тип носителя. Чтобы решить эту проблему, нужно добавить файл локальной записи с проверочной схемой json и передать его в синапс.

<validate cache-schema="false">
                      <schema key="createotpvalidate"/>
                        <on-fail>
                            <payloadFactory media-type="json">
                                <format>{"Error":$1"}</format>
                                <args>
                                    <arg evaluator="xml" expression="$ctx:ERROR_MESSAGE"/>
                                </args>
                            </payloadFactory>
                            <property name="HTTP_SC" scope="axis2" type="STRING" value="500"/>
                            <respond/>
                            <!-- <schema key="conf:/schema/CreateOTPSchema.json"/> -->
                        </on-fail>
                    </validate>

Local Entry file:
<?xml version="1.0" encoding="UTF-8"?>
<localEntry key="createotpvalidate" xmlns="http://ws.apache.org/ns/synapse"><![CDATA[{  "$schema": "http://json-schema.org/draft-04/schema#",  "type": "object",  "properties": {            "request_type": {              "type": "string"            },"mobile": {              "type": "string"            },"otp": {              "type": "string"            }          },          "required": [            "request_type","mobile","otp"          ]        }]]></localEntry>
person Ananth Raj    schedule 18.02.2021