簡體   English   中英

WSO2 - 如何讓調用中介忽略有效載荷(比如它是空的,甚至不是空的)?

[英]WSO2 - how to make call mediator to ignore payload (like it is null, not even empty)?

我正在嘗試這個代碼:

         <sequence key="ssl-validation-sequence"/> <!-- returns valid json body -->


         <payloadFactory media-type="json">   <!-- Resetting payload -->
            <format/>
            <args/>
         </payloadFactory>
         <property name="NO_ENTITY_BODY" value="true" scope="axis2" type="BOOLEAN"/>
         <property name="FORCE_POST_PUT_NOBODY" value="true" scope="axis2" type="BOOLEAN"/>
         <property name="FORCE_HTTP_CONTENT_LENGTH" value="true" scope="axis2"/>
         <property name="COPY_CONTENT_LENGTH_FROM_INCOMING" value="false" scope="axis2"/>
         <header name="Accept" scope="transport" value="application/json"/>
         <header name="Content-Length" scope="transport" value="0"/>

         <!-- call further api -->

               <call>
                  <endpoint>
                     <http method="POST" uri-template="http://10.208.35.57:8280/medium/getemployees"/>
                  </endpoint>
               </call>

/medium/getemployees上的進一步 api 調用 wso2ei 數據庫服務:

         <!-- Call data-service -->

         <header name="Accept" scope="transport" value="application/json"/>
         <call>
            <endpoint>
               <http method="GET" uri-template="http://localhost:8280/services/employee_DataService/employees"/>
            </endpoint>
         </call>

/employee_DataService/employees返回有效的 json-body。

在沒有 ssl-validation 的情況下一切正常,返回 json-body,在這種情況下,數據庫服務只需要 Accept 頭來返回 json 有效負載。

但是只要在數據服務調用之前出現任何 json 有效負載,那么任何數據服務調用都會失敗。

從 wso2ei 得到的錯誤:

[2020-03-30 17:25:10,533] [] ERROR - JsonStreamFormatter Error occurred while writing to application/json
java.lang.reflect.InvocationTargetException
        at sun.reflect.GeneratedMethodAccessor115.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.wso2.carbon.integrator.core.json.JsonStreamFormatter.writeTo(JsonStreamFormatter.java:107)
        at org.apache.synapse.transport.passthru.PassThroughHttpSender.submitResponse(PassThroughHttpSender.java:626)
        at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:285)
        at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
        at org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver.invokeBusinessLogic(AbstractInOutSyncMessageReceiver.java:45)
        at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:110)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
        at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:338)
        at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:159)
        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)
Caused by: java.lang.NullPointerException: charsetName
        at java.io.OutputStreamWriter.<init>(OutputStreamWriter.java:99)
        at org.apache.axis2.json.gson.JsonFormatter.writeTo(JsonFormatter.java:61)
        ... 16 more
[2020-03-30 17:25:10,543] [] ERROR - PassThroughHttpSender Failed to submit the response
org.apache.axis2.AxisFault
        at org.wso2.carbon.integrator.core.json.JsonStreamFormatter.writeTo(JsonStreamFormatter.java:113)
        at org.apache.synapse.transport.passthru.PassThroughHttpSender.submitResponse(PassThroughHttpSender.java:626)
        at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:285)
        at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
        at org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver.invokeBusinessLogic(AbstractInOutSyncMessageReceiver.java:45)
        at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:110)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
        at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:338)
        at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:159)
        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)
[2020-03-30 17:25:10,549] [] ERROR - ServerWorker Error processing GET request for : /services/employee_DataService/employees
org.apache.axis2.AxisFault: Failed to submit the response
        at org.apache.synapse.transport.passthru.PassThroughHttpSender.handleException(PassThroughHttpSender.java:688)
        at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:287)
        at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
        at org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver.invokeBusinessLogic(AbstractInOutSyncMessageReceiver.java:45)
        at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:110)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
        at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:338)
        at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:159)
        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)
Caused by: org.apache.axis2.AxisFault
        at org.wso2.carbon.integrator.core.json.JsonStreamFormatter.writeTo(JsonStreamFormatter.java:113)
        at org.apache.synapse.transport.passthru.PassThroughHttpSender.submitResponse(PassThroughHttpSender.java:626)
        at org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:285)
        ... 10 more

作為回應:

<faultstring>Failed to submit the response</faultstring>

有沒有辦法讓它工作?

謝謝你。

解決了!

這工作正常:

     <property name="NO_ENTITY_BODY" value="true" scope="axis2" type="BOOLEAN"/>
     <property name="TRANSPORT_HEADERS" scope="axis2" action="remove"/>
     <header name="Accept" scope="transport" value="application/json"/>

           <call>
              <endpoint>
                 <http method="POST" uri-template="http://10.208.35.57:8280/medium/getemployees"/>
              </endpoint>
           </call>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM