2016-11-15 3 views
0

Я использую следующий маршрут:верблюжьей молы: буферная емкость превышена

<route> 
    <from uri="file:... 
    <setHeader headerName="CamelHttpMethod"> 
      <constant>PUT</constant> 
    </setHeader> 
    <to uri="jetty:http://localhost:55556/extract?restletMethod=PUT"/> 
    <to uri="ejb:java:global/Abc/Bean?method=doSomething(${body}, ${headers})"/> 
</route> 

Конечная точка:

public InputStream extract(@Body InputStream inputStream, @Headers Map<String, Object> headers) throws Exception { 

    byte[] b = IOUtils.toByteArray(inputStream); 

    // do some stuff 

    headers.put("extraction", ...); 

    return new ByteArrayInputStream(b); 
} 

Если размер файла превышает 2 МБ происходит следующее исключение: (Camel-Jetty http proxy + large response data casue issue: Buffering capacity exceeded)

JettyClient failed cause by: Buffering capacity exceeded. Exchange[ID-debianjk-scsynergy-local-43219-1479191420664-41-8]. Caused by: [java.lang.IllegalArgumentException - Buffering capacity exceeded] 
     at org.apache.camel.component.jetty9.JettyContentExchange9.doTaskCompleted(JettyContentExchange9.java:156) 
     at org.apache.camel.component.jetty9.JettyContentExchange9$2.onComplete(JettyContentExchange9.java:222) 
     at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:193) 
     at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:185) 
     at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:453) 
     at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:434) 
     at org.eclipse.jetty.client.HttpReceiver.responseContent(HttpReceiver.java:360) 
     at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.content(HttpReceiverOverHTTP.java:254) 
     at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.content(HttpReceiverOverHTTP.java:38) 
     at org.eclipse.jetty.http.HttpParser.parseContent(HttpParser.java:1472) 
     at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1245) 
     at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:156) 
     at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:117) 
     at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:69) 
     at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:89) 
     at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:123) 
     at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) 
     at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
     at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.IllegalArgumentException: Buffering capacity exceeded 
     at org.eclipse.jetty.client.util.BufferingResponseListener.onContent(BufferingResponseListener.java:114) 
     at org.eclipse.jetty.client.api.Response$Listener$Adapter.onContent(Response.java:245) 
     at org.eclipse.jetty.client.ResponseNotifier.notifyContent(ResponseNotifier.java:124) 
     at org.eclipse.jetty.client.ResponseNotifier.access$100(ResponseNotifier.java:35) 
     at org.eclipse.jetty.client.ResponseNotifier$ContentCallback.process(ResponseNotifier.java:274) 
     at org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:246) 
     at org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:208) 
     at org.eclipse.jetty.client.ResponseNotifier.notifyContent(ResponseNotifier.java:117) 
     at org.eclipse.jetty.client.HttpReceiver.responseContent(HttpReceiver.java:322) 
     ... 13 more 

Вопросы:

Есть ли способ избежать этой проблемы с буферизацией? (Может быть, используя другой компонент вместо причала?)

Поскольку тело не изменилось в оконечной точке, мне было интересно, можно ли «обходить» тело непосредственно на следующую конечную точку.

ответ

0

Использование <to uri="http://localhost:55556/extract?restletMethod=PUT"/> исправлено для меня.