WSO2 EI Maximum lock count exceeded 错误响应时

WSO2 EI Maximum lock count exceeded error when respond

我们在 WSO2 EI 6 中有一个输入序列,它接收 JSON,通过 java 中的自定义中介接受 JSON 并使用该信息发送多个请求,完成 JSON 和 returns 它作为字符串到我们作为 output_body 的序列。一旦进入序列,它通过过滤器 Origin = 1 进入,使用 JSON 向 SIL API 发出请求,输入检测是否有必要发送电子邮件以查找错误的序列最后我们有一个 PAYLOAD,它将 JSON 的 STRING 转换为 JSON 并将其添加到输出的主体,最后我们进行回复。

上次响应失败,出现以下错误:

[2021-01-13 16:48:58,070] [-1234] [] [PassThroughMessageProcessor-46] ERROR {org.wso2.carbon.integrator.core.json.JsonStreamFormatter} -  Error occurred while writing to application/json
java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor77.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:109)
    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.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:220)
    at org.apache.synapse.mediators.builtin.RespondMediator.mediate(RespondMediator.java:35)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:109)
    at org.apache.synapse.mediators.filters.FilterMediator.mediate(FilterMediator.java:237)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:267)
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.mediateFromContinuationStateStack(Axis2SynapseEnvironment.java:805)
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:303)
    at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:578)
    at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:195)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:265)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool.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: java.lang.Error: Maximum lock count exceeded
    at java.util.concurrent.locks.ReentrantLock$Sync.nonfairTryAcquire(ReentrantLock.java:141)
    at java.util.concurrent.locks.ReentrantLock$NonfairSync.tryAcquire(ReentrantLock.java:213)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1198)
    at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
    at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
    at org.apache.synapse.transport.passthru.Pipe$ByteBufferOutputStream.flushContent(Pipe.java:598)
    at org.apache.synapse.transport.passthru.Pipe$ByteBufferOutputStream.write(Pipe.java:573)
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1793)
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1769)
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1744)
    at org.apache.synapse.commons.json.JsonUtil.writeJsonStream(JsonUtil.java:955)
    at org.apache.synapse.commons.json.JsonUtil.writeAsJson(JsonUtil.java:273)
    at org.apache.synapse.commons.json.JsonStreamFormatter.writeTo(JsonStreamFormatter.java:70)
    ... 22 more

有什么帮助吗?我是否需要在我的自定义调解器中“关闭”某些内容或增加任何 WSO2 参数以支持此操作?

干杯

我们也遇到过这个问题,我们是通过以下方式解决的:

显然我们在没有 json body 的情况下从后端得到了 200 OK 的响应,这似乎使 ESB 在我们尝试给出带有 [=19= 的 200 OK 最终响应时失败了] body 可能是由于某些 header 导致了错误。

最后我们要求后端将 200 OK 更改为 204 No Content,一切都开始工作了