2017-01-04 1 views
1

J'ai créé un service de repos pour télécharger le fichier. J'utilise le reste facile pour le téléchargement de fichiers. Aussi pour mentionner j'ai essayé toutes les solutions que j'ai trouvées sur SO pour les questions connexes. Mais ça ne marche pas pour moi. Voici ma définition de point de terminaison.Aucun corps de message n'a été trouvé dans la classe com.sun.jersey.core.header.FormDataContentDisposition

@POST 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Path("/ckeditorUpload") 
public String uploadCkEditorFile(@FormDataParam("file") InputStream uploadedInputStream, 
@FormDataParam("file") FormDataContentDisposition fileMetaData); 

Ci-dessous le reste dans ma dépendance facile pom.xml

  <!-- JAXB provider --> 
    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jaxb-provider</artifactId> 
     <version>2.3.1.GA</version> 
    </dependency> 
    <!-- Multipart support --> 
    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-multipart-provider</artifactId> 
     <version>2.3.1.GA</version> 
    </dependency>  
</dependencies> 

Voici l'erreur quand j'invoque ce point de terminaison.

Jan 04, 2017 1:31:02 PM org.apache.cxf.jaxrs.utils.JAXRSUtils logMessageHandlerProblem 
SEVERE: No message body reader has been found for class com.sun.jersey.core.header.FormDataContentDisposition, ContentType: multipart/form-data;boundary=----WebKitFormBoundarynN0AeoPCBbeHw7OC 
Jan 04, 2017 1:31:02 PM org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse 
WARNING: javax.ws.rs.WebApplicationException: HTTP 415 Unsupported Media Type 
at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1313) 
at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:824) 
at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:787) 
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterc eptor.java:212) 
at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterce ptor.java:77) 
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.jav a:308) 
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserv er.java:121) 
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestina tion.java:251) 
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234) 
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208) 
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160) 
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:180) 
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:293) 
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:212) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:268) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) 
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) 
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:158) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:177) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:107) 
at com.moya.api.security.CrossScriptingFilter.doFilter(CrossScriptingFilter.java:27) 
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:112) 
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200) 
at com.moya.api.security.TokenAuthenticationFilter.doFilter(TokenAuthenticationFilter.java:350) 
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:112) 
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:121) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) 
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) 
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Unknown Source) 

Toute aide serait grandement appréciée!

+1

C'est bizarre: Jersey! = CXF! = Resteasy. –

+0

@ Michael-O ouais je suis d'accord, mais comment puis-je le résoudre. Est-ce que je manque une dépendance ou de mauvaises dépendances incluses? –

+0

Pouvez-vous inclure le fichier pom.xml et web.xml? – Veeram

Répondre

0

Il est très difficile de dire quel est le problème avec le code que vous avez fourni, mais ce code ci-dessous œuvres:

pom.xml

... 
    <dependencies> 
     <dependency> 
      <groupId>org.jboss.resteasy</groupId> 
      <artifactId>resteasy-jaxrs</artifactId> 
      <version>3.0.4.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.resteasy</groupId> 
      <artifactId>resteasy-multipart-provider</artifactId> 
      <version>3.0.4.Final</version> 
     </dependency> 
    </dependencies> 
    ... 

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 
    <display-name>JAXRS-RESTEasy</display-name> 

    <servlet-mapping> 
     <servlet-name>resteasy-servlet</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

    <!-- Auto scan REST service --> 
    <context-param> 
     <param-name>resteasy.scan</param-name> 
     <param-value>true</param-value> 
    </context-param> 

    <!-- this should be the same URL pattern as the servlet-mapping property --> 
    <context-param> 
     <param-name>resteasy.servlet.mapping.prefix</param-name> 
     <param-value>/rest</param-value> 
    </context-param> 

    <listener> 
     <listener-class> 
      org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap 
      </listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>resteasy-servlet</servlet-name> 
     <servlet-class> 
      org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher 
     </servlet-class> 
    </servlet> 

</web-app> 

RESTEasyFileUploadService. java

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.util.List; 
import java.util.Map; 

import javax.ws.rs.Consumes; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.core.MultivaluedMap; 
import javax.ws.rs.core.Response; 

import org.jboss.resteasy.plugins.providers.multipart.InputPart; 
import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput; 

@Path("/files") 
public class RESTEasyFileUploadService { 

    private static final String SERVER_UPLOAD_LOCATION_FOLDER = "C://path/where_to_store"; 

    @POST 
    @Path("/upload") 
    @Consumes("multipart/form-data") 
    public Response uploadFile(MultipartFormDataInput input) { 

     String fileName = ""; 

     Map<String, List<InputPart>> formParts = input.getFormDataMap(); 

     List<InputPart> inPart = formParts.get("file"); 

     for (InputPart inputPart : inPart) { 

      try { 

       // Retrieve headers, read the Content-Disposition header to obtain the original name of the file 
       MultivaluedMap<String, String> headers = inputPart.getHeaders(); 

       fileName = parseFileName(headers); 
       // Handle the body of that part with an InputStream 
       InputStream istream = inputPart.getBody(InputStream.class,null); 

       fileName = SERVER_UPLOAD_LOCATION_FOLDER + fileName; 

       saveFile(istream,fileName); 

       } catch (IOException e) { 
       e.printStackTrace(); 
       } 

      } 

       String output = "File saved to server location : " + fileName; 

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

    // Parse Content-Disposition header to get the original file name 
    private String parseFileName(MultivaluedMap<String, String> headers) { 

     String[] contentDispositionHeader = headers.getFirst("Content-Disposition").split(";"); 

     for (String name : contentDispositionHeader) { 

      if ((name.trim().startsWith("filename"))) { 

       String[] tmp = name.split("="); 

       String fileName = tmp[1].trim().replaceAll("\"",""); 

       return fileName; 

      } 

     } 

     return "randomName"; 

    } 

    // save uploaded file to a defined location on the server 
    private void saveFile(InputStream uploadedInputStream, 

     String serverLocation) { 

     try { 
      OutputStream 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) { 
      e.printStackTrace(); 
     } 
    } 
}