2015-09-11 3 views
0

Я пытаюсь создать службу поддержки, которая загружает файл. Я следовал этапы:Загрузка файла JJEE Jersey - вход всегда null

http://examples.javacodegeeks.com/enterprise-java/rest/jersey/jersey-file-upload-example/

http://www.mkyong.com/webservices/jax-rs/file-upload-example-in-jersey/

Но, когда я загрузить файл (например, .pdf), входной FormDataMultiPart всегда NULL, и я не понимаю, почему. Я использую libs «jersey-multipart» и «jersey-core». Мой код:

Restful обслуживание:

@Path("/reservation") 
    public class ReservationWs { 

     /** The Constant log. */ 
     private static final Logger LOGGER = LoggerFactory.getLogger(ReservationWs.class.getName()); 

     private static final String SERVER_UPLOAD_LOCATION_FOLDER = "C://opt/share/reservation/"; 

     @POST 
     @Path("/upload") 
     @Consumes(MediaType.MULTIPART_FORM_DATA) 
     public Response uploadFile(
       @FormDataParam("file") InputStream uploadedInputStream, 
       @FormDataParam("file") FormDataContentDisposition fileDetail) { 

      String uploadedFileLocation = SERVER_UPLOAD_LOCATION_FOLDER 
        + fileDetail.getFileName(); 

      // save it 
      saveFile(uploadedInputStream, uploadedFileLocation); 

      String output = "File uploaded to : " + uploadedFileLocation; 

      return Response.status(200).entity(output).build(); 

     } 

     @POST 
     @Path("/upload2") 
     @Consumes(MediaType.MULTIPART_FORM_DATA) 
     public Response uploadFile2(FormDataMultiPart form) { 

      FormDataBodyPart filePart = form.getField("file"); 

      ContentDisposition headerOfFilePart = filePart.getContentDisposition(); 

      InputStream fileInputStream = filePart.getValueAs(InputStream.class); 

      String filePath = SERVER_UPLOAD_LOCATION_FOLDER + headerOfFilePart.getFileName(); 

      // save the file to the server 
      saveFile(fileInputStream, filePath); 

      String output = "File saved to server location using FormDataMultiPart : " + filePath; 
      System.out.println(output); 

      return Response.status(200).entity(output).build(); 

     } 
    } 

Мой клиент:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Form Page</title> 
</head> 
<body> 
<h1>Upload a File</h1> 

    <form action="reservation/upload" method="post" enctype="multipart/form-data"> 

     <p> 
     Select a file : <input type="file" name="file" size="55" /> 
     </p> 

     <input type="submit" value="Upload It" /> 
    </form> 

</body> 
</html> 

Когда я пытаюсь позвонить в "загрузить", вход нуль и журналы ошибок:

GRAVE: El Servlet.service() para el servlet [rest_1288520529] en el contexto con ruta [/ check] lanzó la excepción [Ошибка выполнения ssing запрос вебсервис] кон саиза Raiz java.lang.NullPointerException на com.checking.reservation.ws.ReservationWs.uploadFile (ReservationWs.java:74) в sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) на солнце. reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) на sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) на java.lang.reflect.Method.invoke (Method.java:497) при орг .apache.openejb.server.cxf.rs.PojoInvoker.performInvocation (PojoInvoker.java:43) at org.apache.cxf.service.invoker.AbstractInvoker.invoke (AbstractInvoker.java:96) at org.apache. cxf.jaxrs.JAXRSInvoke r.invoke (JAXRSInvoker.java:165) на org.apache.cxf.jaxrs.JAXRSInvoker.invoke (JAXRSInvoker.java:89) на org.apache.openejb.server.cxf.rs.AutoJAXRSInvoker.invoke (AutoJAXRSInvoker. Java: 68) в org.apache.cxf.interceptor.ServiceInvokerInterceptor $ 1.run (ServiceInvokerInterceptor.java:57) на org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage (ServiceInvokerInterceptor.java:93) в org.apache.cxf.phase.PhaseInterceptorChain.doIntercept (PhaseInterceptorChain.java:263) на org.apache.cxf.transport.ChainInitiationObserver.onMessage (ChainInitiationObserver.java:121) на org.apache.cxf.transport. http.Abstr actHTTPDestination.invoke (AbstractHTTPDestination.java:240) на org.apache.openejb.server.cxf.rs.CxfRsHttpListener.onMessage (CxfRsHttpListener.java:187) на org.apache.openejb.server.rest.RsServlet. сервис (RsServlet.java:53) в javax.servlet.http.HttpServlet.service (HttpServlet.java:727) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:303) в орг .apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) на org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:52) на org.apache.catalina.core .ApplicationFilterChain.int ernalDoFilter (ApplicationFilterChain.java:241) по адресу org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.Java: 208) на net.bull.javamelody.MonitoringFilter.doFilter (MonitoringFilter.java:198) на net.bull.javamelody.MonitoringFilter.doFilter (MonitoringFilter.java:176) на org.apache.catalina .core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:241) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) на org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve .java: 220) at org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:122) at org.apache.t omee.catalina.OpenEJBValve.invoke (OpenEJBValve.java:44) на org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:501) на org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:171) на org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:103) на org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:950) на org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:116) на org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:408) в org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:1070) на org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:611) в org.apache.tomcat.util .net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:316) на java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor .java: 617) в org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java:61) в java.lang.Thread.run (Thread.java:745)

Когда я пытаюсь позвонить в "upload2", вход нуль и журналы ошибок:

11 сентября 2015 9:12:21 AM org.apache.catalina.core.StandardWrapperValve Invoke GRAVE: El Servlet.service() para el servlet [rest_348842263] ru el contexto con ruta [/ проверка] lanzó la excepción [Обработка ошибок запрос webservice] con causa raíz java.lang.NullPointerException at com.checking.reservation. ws.ReservationWs.uploadFile2 (ReservationWs.java:90) at sun.reflect.NativeMethodAccessorImpl.invoke0 (родной метод) в sun.reflect.Nat iveMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) на sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) на java.lang.reflect.Method.invoke (Method.java:497) при org.apache .openejb.server.cxf.rs.PojoInvoker.performInvocation (PojoInvoker.java:43) at org.apache.cxf.service.invoker.AbstractInvoker.invoke (AbstractInvoker.java:96) at org.apache.cxf. jaxrs.JAXRSInvoker.invoke (JAXRSInvoker.java:165) at org.apache.cxf.jaxrs.JAXRSInvoker.invoke (JAXRSInvoker.java:89) в org.apache.openejb.server.cxf.rs.AutoJAXRSInvoker.invoke (AutoJAXRSInvoker.java:68) по адресу org.apache.cxf.interceptor.ServiceInvokerInterceptor $ 1.run (ServiceInvokerInterceptor.java:57) на org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage (ServiceInvokerInterceptor.java:93) на org.apache.cxf.phase.PhaseInterceptorChain.doIntercept (PhaseInterceptorChain.java : 263) на org.apache.cxf.transport.ChainInitiationObserver.onMessage (ChainInitiationObserver.java:121) на org.apache.cxf.transport.http.AbstractHTTPDestination.invoke (AbstractHTTPDestination.java:240) в org.apache.openejb.server.cxf.rs.CxfRsHttpListener.onMessage (CxfRsHttpListener.java:187) по адресу org.apache.openejb.server.rest.RsServlet.service (RsServlet. Java: 53) в javax.servlet.http.HttpServlet.service (HttpServlet.java:727) при org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:303) на org.apache.catalina .core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) на org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:52) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:241) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) на net.bull.javamelody.MonitoringFilter.doFilter (MonitoringFilter.java:198) на net.bull.javamelody.MonitoringFilter.doFilter (MonitoringFilter.java:176) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:241) на org.apache.catalina. core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) на org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:220) на org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve. java: 122) по адресу org.apache.tomee.catalina.OpenEJBValve.invoke (OpenEJBValve.java:44) по адресу org.apache.catalina.authe nticator.AuthenticatorBase.invoke (AuthenticatorBase.java:501) на org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:171) на org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve. Java: 103) на org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:950) на org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:116) в орг .apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:408) по адресу org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:1070) по адресу org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:611) на org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:316) в java.util .concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) в org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable .run (TaskThread.java:61) в java.lang.Thread.run (Thread.java:745)

Любая идея?

ответ

0

На данный момент я нашел неплохое решение.

@POST 
@Path("/upload") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response uploadFile(@FormDataParam("file") InputStream file, @FormDataParam("file") FormDataContentDisposition fileDetail, @QueryParam("fileName") String fileName){ 
    ... 
    ... 
    String uploadedFileLocation = SERVER_UPLOAD_LOCATION_FOLDER+ fileName;//fileDetail.getFileName(); 

    // save it 
    saveFile(file, uploadedFileLocation); 
    ... 

    //Logic of the service. 
    ... 

    //Delete file from local. 
} 

private void saveFile(InputStream uploadedInputStream, String serverLocation) throws IOException { 

    OutputStream outpuStream=null; 
    try { 
      outpuStream = new FileOutputStream(new File(serverLocation)); 
      int read = 0; 
      byte[] bytes = new byte[1024]; 
      outpuStream = new FileOutputStream(new File(serverLocation)); 
      while ((read = uploadedInputStream.read(bytes)) != -1) { 
       outpuStream.write(bytes, 0, read); 
      } 
      outpuStream.flush(); 
      outpuStream.close(); 

    } catch(IOException e){ 
     LOGGER.debug("[UploadWs - saveFile] - error: "+e); 
    } finally{ 
     if(outpuStream!=null){ 
      outpuStream.close(); 
     } 
    } 
} 

«fileDetail» всегда пустой, и я не знаю, почему (если кто знает решение, сказать), так что я добавить параметр «имя_файла» (имя файла), что клиент посылает меня. Я создаю местоположение, я сохраняю файл локально, выполняется логика службы (в моем случае я отправляю электронное письмо с этим файлом), и я удаляю файл из локального.

Это нехорошее решение, потому что я добавляю параметр nonecesarry, и я сохраняю файл в локальном.

Смежные вопросы