2017-07-13 35 views
1

我試圖用幾天時間在我的Web服務REST上使用Apache CXF和TomEE v7上的文件。儘管谷歌和測試解決方案一次又一次沒有爲我工作。CXF - 沒有發現郵件正文閱讀器的類附件

還有就是我的Maven依賴

<dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-core</artifactId> 
    <version>3.1.11</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-bundle</artifactId> 
    <version>3.0.0-milestone2</version> 
</dependency> 
<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
</dependency> 
<dependency> 
    <groupId>javax.ws.rs</groupId> 
    <artifactId>javax.ws.rs-api</artifactId> 
    <version>2.0.1</version> 
</dependency> 

Java的端點

@POST 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response uploadImage(@Multipart(value = "file") Attachment attr) throws IOException { 

    { ... } 

    return Response.status(Response.Status.CREATED).entity("File succesfully uploaded").build(); 
} 

HTML客戶

<form action="http://localhost:8080/.../api/images" method="post" enctype="multipart/form-data"> 

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

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

但我總是得到這個錯誤

SEVERE - No message body reader has been found for class org.apache.cxf.message.Attachment, ContentType: multipart/form-data;boundary=----WebKitFormBoundary7Qs4JcL6GAdGZwfN 
WARNING - javax.ws.rs.WebApplicationException: HTTP 415 Unsupported Media Type 
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1315) 
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:826) 
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:789) 
    at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:212) 
    at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:77) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) 
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) 
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:254) 
    at org.apache.openejb.server.cxf.rs.CxfRsHttpListener.doInvoke(CxfRsHttpListener.java:251) 
    at org.apache.tomee.webservices.CXFJAXRSFilter.doFilter(CXFJAXRSFilter.java:94) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:65) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) 
    at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110) 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

我在做什麼錯?您的幫助將不勝感激。

回答

0

如果您有二進制(非字母數字)數據(或大小有效載荷)進行傳輸,請使用multipart/form-data。否則,請使用application/x-www-form-urlencoded,因爲它顯示「WARNING - javax.ws.rs.WebApplicationException:HTTP 415 Unsupported Media Type」。

0

首先,我不確定您的CXF REST服務是否啓動並運行給定的pom.xml。如果不是,則需要添加以下附加依賴項。

 <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-transports-http</artifactId> 
      <version>3.1.11</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxrs --> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-frontend-jaxrs</artifactId> 
      <version>3.1.11</version> 
     </dependency> 

最後請確保您的附件類是包org.apache.cxf.jaxrs.ext.multipartorg.apache.cxf.message