2015-10-14 2 views
0

У меня есть передний конец веб-приложение, которое загружает файл и другие данные с помощью простой формы:Как обрабатывать загрузку файлов с помощью компонента restache apache-camel?

<form action="/document/invoice/entity/777" enctype="multipart/form-data"> 
    <input name="file" type="file"> 
    <input name="userId"> 
    <button>Upload File</button> 
    </form> 

и на стороне сервера должен быть апач верблюдица маршрут, который обрабатывает загруженные данные с Restlet компонентом, что-то похожее на это:

<restContext id="myApi" xmlns="http://camel.apache.org/schema/spring"> 

    <rest path="/document"> 
     <post uri="/{documentType}/entity/{entityId}" outType="documentService.Result" 
      consumes="multipart/form-data" produces="application/json"> 
      <route> 
       <to uri="bean:documentService?method=validate(${body.file}, ${body.userId}, ${header.documentType}, ${header.entityId})"/> 
      </route> 
     </post> 
    </rest> 

</restContext> 

При такой конфигурации я получаю эту ошибку:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ 
    at com.google.gson.Gson.fromJson(Gson.java:822) 
    at com.google.gson.Gson.fromJson(Gson.java:748) 
    at org.apache.camel.component.gson.GsonDataFormat.unmarshal(GsonDataFormat.java:105) 
    at org.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:67) 
    at org.apache.camel.processor.binding.RestBindingProcessor.process(RestBindingProcessor.java:175) 
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) 
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:448) 
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191) 
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:118) 
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:80) 
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191) 
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109) 
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:87) 
    at org.apache.camel.component.http.CamelServlet.service(CamelServlet.java:144) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) 
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ 
    at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:387) 
    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:183) 
    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145) 
    at com.google.gson.Gson.fromJson(Gson.java:810) 
    ... 36 more 

Как я могу загрузить файлы и флористику r для конечной точки останова apache-camel?

ответ

0

Похоже, что у вас есть несколько проблем с настройкой того, как вы передаете свои данные в компонент восстановления верблюда. Я бы порекомендовал прочитать релаксационную документацию на сайте верблюда: http://camel.apache.org/restlet.html И если у вас все еще есть проблемы, вот ссылка на полный проект, реализующий сервер-релакс с верблюдом: http://www.ofbizian.com/2012/02/apache-camel-rest-example.html.

Если у вас по-прежнему возникают проблемы после проверки этих ресурсов, пожалуйста, уточните, было ли это исключение на стороне клиента или сервера.

+0

Я уже несколько раз читал документацию, не желая загружать файлы. У меня нет проблем с созданием конечной точки CRUD, но загрузка файла и других данных для меня сложная. Благодарю. –

0

Вы пытаетесь загрузить некоторые данные или файл, но в соответствии с ошибкой он ожидает данные JSON, «com.google.gson.JsonSyntaxException», и вместо этого он получает что-то еще. Вы уверены, что базовая часть настроена правильно в соответствии с тем, что вы отправляете?

+0

Вопрос заключается в том, как правильно настроить остальную конечную точку для обработки загрузки с такого типа сообщений? Благодарю. –

+0

Поскольку вы получаете ошибки JSON, вам нужно посмотреть в коде, потому что вы создаете = «application/json». Итак, вы действительно выпускаете JSON в качестве ответа? –