multipart/form-data引起的实例化错误;客户端向服务器发送请求。

4

我实现了一个用户界面和一个 Web 服务。通信是通过 REST 进行的,两者都在 Tomcat 服务器上运行。如果我想发送请求,就会出现错误:

HTTP Status 500 – Internal Server Error

javax.servlet.ServletException: Servlet execution threw an exception
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Root Cause

java.lang.InstantiationError: org.apache.james.mime4j.message.BodyFactory
org.apache.james.mime4j.message.MessageBuilder.<init>(MessageBuilder.java:56)
org.apache.james.mime4j.message.Message.<init>(Message.java:140)
org.apache.james.mime4j.message.Message.<init>(Message.java:100)
org.jboss.resteasy.plugins.providers.multipart.MultipartInputImpl.parse(MultipartInputImpl.java:76)
org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataReader.readFrom(MultipartFormDataReader.java:52)
org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataReader.readFrom(MultipartFormDataReader.java:20)
org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.readFrom(AbstractReaderInterceptorContext.java:66)
org.jboss.resteasy.core.interception.jaxrs.ServerReaderInterceptorContext.readFrom(ServerReaderInterceptorContext.java:61)
org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:56)
org.jboss.resteasy.plugins.interceptors.GZIPDecodingInterceptor.aroundReadFrom(GZIPDecodingInterceptor.java:123)
org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:59)
org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBodyParameterInjector.java:147)
org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInjectorImpl.java:92)
org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:115)
org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:294)
org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:248)
org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:235)
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:398)
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:205)
org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:228)
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

前端部分:

 function uploadFile(url, data){
            console.log(url);
            return $.ajax({
                method: "POST",
                type: 'POST',
                url: url,
                data: data,
                cache: false,
                processData: false,
                contentType: false,
                headers: {
                    "Authorization" : "Bearer " + window.sessionStorage.getItem("authToken"),
                    "User"  : window.sessionStorage.getItem("userID")
                }
            })
        }

后端部分:

    @POST
    @Path("url")
    @PermitAll
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public static Response uploadEvents(MultipartFormDataInput input, @Context HttpHeaders headers) throws Exception {
}

我已经尝试在前端内容类型中设置multipart/form-data,但仍然收到此错误消息。

本地配置正在运行。如果我使用该功能,则在Web服务器上运行时会遇到错误消息。

编辑: 在我更新了POM为新的restay版本3.9.0.Final之后,错误变成了:

The server encountered an unexpected condition that prevented it from fulfilling the request.</p><p><b>Exception</b></p><pre>javax.servlet.ServletException: Servlet execution threw an exception
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
</pre><p><b>Root Cause</b></p><pre>java.lang.InstantiationError: org.apache.james.mime4j.message.BodyFactory
    org.apache.james.mime4j.message.MessageBuilder.&lt;init&gt;(MessageBuilder.java:56)
    org.jboss.resteasy.plugins.providers.multipart.MultipartInputImpl$BinaryOnlyMessageBuilder.&lt;init&gt;(MultipartInputImpl.java:112)
    org.jboss.resteasy.plugins.providers.multipart.MultipartInputImpl$BinaryOnlyMessageBuilder.&lt;init&gt;(MultipartInputImpl.java:81)
    org.jboss.resteasy.plugins.providers.multipart.MultipartInputImpl$BinaryMessage.&lt;init&gt;(MultipartInputImpl.java:183)
    org.jboss.resteasy.plugins.providers.multipart.MultipartInputImpl$BinaryMessage.&lt;init&gt;(MultipartInputImpl.java:169)
    org.jboss.resteasy.plugins.providers.multipart.MultipartInputImpl.parse(MultipartInputImpl.java:235)
    org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataReader.readFrom(MultipartFormDataReader.java:53)
    org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataReader.readFrom(MultipartFormDataReader.java:23)
    org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.readFrom(AbstractReaderInterceptorContext.java:66)
    org.jboss.resteasy.core.interception.jaxrs.ServerReaderInterceptorContext.readFrom(ServerReaderInterceptorContext.java:61)
    org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:56)
    org.jboss.resteasy.plugins.interceptors.GZIPDecodingInterceptor.aroundReadFrom(GZIPDecodingInterceptor.java:123)
    org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:59)
    org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBodyParameterInjector.java:147)
    org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInjectorImpl.java:92)
    org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:115)
    org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:294)
    org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:248)
    org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:235)
    org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:398)
    org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:205)
    org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:228)
    org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
    org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
</pre><p><b>Note</b> The full stack trace of the root cause is available in the server logs.</p><hr class="line" /><h3>Apache Tomcat/8.5.45</h3></body></html>
2个回答

0

我的war文件里有两个不同版本的identify jar文件。我必须删除较新的那个版本。


0

如果您遇到上述异常,请检查您是否拥有以下jar包:

  • apache-mime4j-.jar
  • apache-mime4j-core-*.jar
  • apache-mime4j-dom-*.jar

如果您移除了core和dom jar包,您的问题将得到解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接