ServiceMix中的Camel ReST代理路由无法进行Base64上传

时间:2013-09-11 17:21:56

标签: rest apache-camel apache-servicemix

我已在SMX上部署了以下路由,该路由将所有ReST请求代理到真正的ReST服务提供程序(Tomcat)。所有对SMX的ReST调用都成功路由,但上传PDF文件的saveDocument服务失败。

public void configure() throws Exception {
from("jetty:http://{{smx.host}}:{{smx.rest-proxy-port}}/{{smx.context}}matchOnUriPrefix=true")
.log("ReST call received (Java DSL)")
.to("jetty:http://{{real-server-address}}:{{real-ws-port}}/{{context}}?bridgeEndpoint=true&throwExceptionOnFailure=false")
.log("Rest call proxied (Java DSL)");
}

在servicemix.log中记录以下异常。

19:53:57,065 |警告| HttpClient-137 | HttpExchange | 111 - org.eclipse.jetty.util - 7.5.4.v20111024 | EXCEPTION JettyContentExchange @ 188af650 = POST // real-server-address ...:8080 / contextpath ... / saveDocument #SENDING(3ms) - > EXCEPTED(0ms)发送= 3ms java.lang.IndexOutOfBoundsException

在将呼叫重定向到真正的ReST服务之前,我是否必须在base64上执行一些额外的处理?

在我之前的帖子上更新。 这似乎在我使用txt文件时有效,但对于pdf或doc失败。

更新2:当txt大小超过7KB时,它也会失败。

是否可以将camel jetty设置为接受大尺寸文件?

1 个答案:

答案 0 :(得分:0)

如果使用Multipart WS,这可以解决。 我已经实现了一个Multipart CXF ReST文件上传服务,用于在多部分WS的情况下测试路由。

The following route works OK for multipart:
from("jetty:http://.../?matchOnUriPrefix=true&enableMultipartFilter=false")
        .noStreamCaching()
        .log("Service Proxied")
        .to("jetty:http://...:../?bridgeEndpoint=true&throwExceptionOnFailure=false");

仍然无法找到第一个WS出了什么问题。

此问题也会被跟踪here