存在中介政策时,为什么WSO2 API管理器无法执行PUT请求?

时间:2019-06-28 15:02:47

标签: wso2

我有用于请求和响应的中介设置: enter image description here

用于请求(jms_in_flow)

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="jms_in_flow" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<property name="transactionId" expression="get-property('MessageID')"/>
<clone continueParent="true">
    <target>
        <sequence>
            <property action="remove" name="OUT_ONLY" value="true"/>
            <property expression="$ctx:api.ut.api_version" name="api_version" scope="transport" type="STRING"/>
            <property expression="$ctx:api.ut.version" name="api_short_version" scope="transport" type="STRING"/>
            <property expression="$ctx:api.ut.requestTime" name="api_request_time" scope="transport" type="STRING"/>
            <property expression="$ctx:REST_API_CONTEXT" name="api_context" scope="transport" type="STRING"/>
            <property expression="$ctx:API_NAME" name="api_name" scope="transport" type="STRING"/>
            <property name="api_message_id" expression="get-property('transactionId')" scope="transport"/>
            <property value="REQUEST" name="api_message_type" scope="transport" type="STRING"/>
            <property expression="$ctx:REST_FULL_REQUEST_PATH" name="api_request_path" scope="transport" type="STRING"/>
            <property expression="$ctx:api.ut.HTTP_METHOD" name="api_method" scope="transport" type="STRING"/>
            <property expression="$ctx:api.ut.application.name" name="api_app_name" scope="transport" type="STRING"/>
            <property expression="$ctx:api.ut.userName" name="api_username" scope="transport" type="STRING"/>
            <call>
                <endpoint>
                    <address uri="jms:"AAA"/>
                </endpoint>
            </call>
            <drop/>
            <send/>
        </sequence>
    </target>
</clone>

用于响应(jms_out_flow):

<sequence name="jms_out_flow" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<clone continueParent="true">
    <target>
        <sequence>
            <property name="RESPONSE" value="true"/>
            <property name = "api_response_time" expression = "get-property('SYSTEM_TIME')" scope="transport"/> 
            <property name="api_message_id" expression="get-property('transactionId')" scope="transport"/>
            <property value="RESPONSE" name="api_message_type" scope="transport" type="STRING"/>
            <property expression="$axis2:HTTP_SC" name="http_status" scope="transport" type="STRING"/>
            <call>
                <endpoint>
                    <address uri="jms:/AAA"/>
                </endpoint>
            </call>
            <drop/>
        </sequence>
    </target>
</clone>

当我在WSO2 Manager上执行GET请求时,它会快速且成功地执行,并且PUT请求不会执行,并且会在时间到期(〜2分钟)后消失。当我删除请求(jms_in_flow)的中介程序设置时,PUT请求开始正常工作。
我认为该错误是在 jms_in_flow 中的,但是我找不到它。 我在Google中找到了:Enter link description here enter image description here get和put方法的处理不同,但是我不知道如何应用它。 更新。 日志

[2019-07-01 13:38:06,083] ERROR -  Unexpected error during sending message out {org.apache.synapse.core.axis2.Axis2Sender}
   org.apache.axis2.AxisFault: Did not receive a JMS response within 30000 ms to destination : temp-queue://ID:c115c33d0c81-45342-543:1:1 with JMS correlation ID : ID:c115c33d0c81-45342-543:1:1:1:1
at org.apache.axis2.transport.base.AbstractTransportSender.handleException(AbstractTransportSender.java:234)


at org.apache.axis2.transport.jms.JMSSender.waitForResponseAndProcess(JMSSender.java:435)


at org.apache.axis2.transport.jms.JMSSender.sendOverJMS(JMSSender.java:369)


at org.apache.axis2.transport.jms.JMSSender.sendMessage(JMSSender.java:192)


at org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112)


at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)


at org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.send(DynamicAxisOperation.java:185)


at org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.executeImpl(DynamicAxisOperation.java:167)


at org.apache.axis2.client.OperationClient.execute(OperationClient.java:149)


at org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:603)


at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:85)


at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:511)


at org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:384)


at org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:65)


at org.apache.synapse.mediators.builtin.CallMediator.handleNonBlockingCall(CallMediator.java:276)


at org.apache.synapse.mediators.builtin.CallMediator.mediate(CallMediator.java:121)


at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:108)


at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70)


at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)


at org.apache.synapse.mediators.MediatorWorker.run(MediatorWorker.java:80)


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)

1 个答案:

答案 0 :(得分:0)

我不确定这是否相关。但我认为您也需要按顺序<property action="remove" name="OUT_ONLY" value="true"/>