我使用以下路线:
<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>
endpoint:
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 MB,则会发生以下异常:(Camel-Jetty超文本传输协议代理大响应数据原因问题:超出缓冲容量)
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
问题:
有没有办法避免这种缓冲问题?(可能使用另一个组件代替jetty?)
由于码头endpoint中的主体没有改变,我想知道是否有可能将主体直接“绕过”到下一个endpoint。
使用<代码>
我是第一次使用Camel。我的试验项目是编写一个应用程序,该应用程序接收HTTP GET请求(使用Jetty)并通过Thrift将请求传递到另一台服务器。然后将收到的答案传递回客户端。(即,如果您愿意,我正在编写超文本传输协议-get请求和Thrift支持的服务器之间的数据交换机或中间件应用程序。) 我有一个完美的非驼峰版本,现在我正在尝试将驼峰等效物组合在一起。目前,我只想将jetty请求写入一
我想在Camel环境中使用Jetty组件。这是我的spring配置的摘录。xml: 下面是用于返回字符串的代码: 本地地址有效(http://127.0.0.1/enc)但是浏览器没有正确显示字符串(显示为“abcÃö¼ÃŸ”–äääääŒääää‰)。我假设问题是一些编码。如何设置像“utf-8”这样的编码? 我在这里找不到任何提示(http://camel.apache.org/jetty.
在Apache Camel中是否有可能注册一个处理程序来管理由于已达到延续超时而无法写入jettyendpointhttp响应的交换?
我知道有一些方法可以捆绑应用程序并将其部署在Tomcat或Jetty中。但是,如果我这样做了,最大的问题就变成了如何与Restlet集成。 我做了进一步的挖掘。我举了骆驼附带的一个tomcat例子。然后我试着让它具有RESTLET功能。差不多管用了。现在的问题是参数没有传递到路由。我希望当调用这个服务器:http://x.x.x.x.x:8080/rs/user/?name=Paul时,我会得到:
我正在用apache Camel构建一个spring boot应用程序。我想让camel中的DSL监听spring boot启动时的相同端口。 我尝试了这个链接,但如果不使用组件,就无法解析它。我不希望我的路由看起来像,而是希望直接使用jetty Build.Gradle
我很难让Spring Camel获得注册为Bean的HeaderFilterStrategy类,这样就可以通过Camel路线找到它。我试图注释HeaderFilterStrategy自定义类似乎是徒劳的。。。那么如何注册这个东西,以便在运行时找到它呢? 我有一个驼峰应用程序,其中一条路线使用定制的HeaderFilterStrategy 策略类看起来像: 我注册它与骆驼使用一个简单的注册表: 我在