简体   繁体   English

CXF-找不到类附件的消息正文阅读器

[英]CXF - no message body reader has been found for class Attachment

I'm trying since a couple days to upload a file on my web service REST using Apache CXF and TomEE v7. 几天以来,我一直在尝试使用Apache CXF和TomEE v7在我的Web服务REST上上传文件。 Despite of googleing and test solutions again and again nothing work for me. 尽管谷歌和测试解决方案一次又一次对我不起作用。

There is my Maven dependencies 有我的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 endpoint 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 client 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>

But I'm always getting this error 但是我总是收到这个错误

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)

What am I doing wrong ? 我究竟做错了什么 ? Your help will be appreciated. 您的帮助将不胜感激。

if you have binary (non-alphanumeric) data (or a significantly sized payload) to transmit, use multipart/form-data. 如果您要传输二进制(非字母数字)数据(或有效载荷大小很大),请使用multipart / form-data。 Otherwise, use application/x-www-form-urlencoded since it says "WARNING - javax.ws.rs.WebApplicationException: HTTP 415 Unsupported Media Type". 否则,请使用application / x-www-form-urlencoded,因为它显示“警告-javax.ws.rs.WebApplicationException:HTTP 415不支持的媒体类型”。

First of all I'm not sure if your CXF REST service is up and running with given pom.xml. 首先,我不确定您的CXF REST服务是否已通过给定的pom.xml启动并运行。 If not you need to add following additional dependencies. 如果不是,则需要添加以下其他依赖项。

        <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>

And finally make sure your Attachment class is from package org.apache.cxf.jaxrs.ext.multipart or org.apache.cxf.message 最后确保您的Attachment类来自包org.apache.cxf.jaxrs.ext.multipartorg.apache.cxf.message

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 CXF RESTful:未找到请求类的消息正文阅读器,ContentType : application/json - CXF RESTful: No message body reader has been found for request class, ContentType : application/json Apache CXF作为Restful API的客户端-找不到该类的消息正文编写器 - Apache CXF as Client for restful API - No message body writer has been found for class 没有找到类com.sun.jersey.core.header.FormDataContentDisposition的消息正文阅读器 - No message body reader has been found for class com.sun.jersey.core.header.FormDataContentDisposition 找不到类com.sun.jersey.core.header.FormDataContentDisposition,ContentType:multipart / form-data的邮件正文阅读器 - No message body reader has been found for class com.sun.jersey.core.header.FormDataContentDisposition, ContentType: multipart/form-data 在osgi中使用带有cxf的jackson提供程序(未找到消息正文编写器) - Using jackson provider with cxf in osgi (no message body writer has been found) 找不到响应类ArrayList [jboss 7]的消息正文编写器 - No message body writer has been found for response class ArrayList [jboss 7] 未找到响应类 ArrayList 的消息正文编写器 - No message body writer has been found for response class ArrayList 访问服务时,未找到响应类别的消息正文编写器 - No message body writer has been found for response class when accessing the service 严重:未找到 class java.util.Vector 的消息正文编写器,ContentType:application/xml - SEVERE: No message body writer has been found for class java.util.Vector, ContentType: application/xml 找不到Java类的消息正文阅读器(非Maven) - Message body reader for Java class not found (non-Maven)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM