2017-01-04 13 views
1

ファイルをアップロードするための休憩サービスを作成しました。私は残りのファイルを簡単にアップロードして使用しています。また、私は関連する質問のためにSOで見つけたすべてのソリューションを試しました。しかし、それは私のためには機能しません。 以下は私のエンドポイントの定義です。以下は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); 

私はこのエンドポイントを呼び出すときに私の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> 

で、残りは簡単依存性がエラーです。

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) 

ご協力いただければ幸いです。

+1

これは奇妙です:ジャージー!= CXF!= resteasy。 –

+0

@ Michael-O yeah私は同意するが、どうすれば解決できるか。依存関係や間違った依存関係が含まれていませんか? –

+0

完全なpom.xmlとweb.xmlを含めることができますか? – Veeram

答えて

0

それはあなたが提供したコードで間違っているものを言うことは非常に難しいですが、作品の下に、このコード:

の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(); 
     } 
    } 
} 
関連する問題