Under Jetty 8.1.8 you have to explicitly enable Multipart support using a
flag in the web.xml or using the @Multipartconfig annotation.

I have a project that uses embedded Jetty with no xml configs and with no
WebAppContext, it is simply a few handlers directly added to the server
(simplified example below).

After looking at this (
https://bugs.eclipse.org/bugs/show_bug.cgi?id=395000#c0) bug report, the
solutions offered to get annotations working to enable multipart support do
not seem applicable to Handlers (or, at least setting the
"org.eclipse.jetty.webapp.configuration"
attributes on the server instance have no effect)

Is it possible to enable servlet 3.0 multipart support for handlers with
this setup?

Thanks,
Neil

package anno;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.util.log.Log;


public class AnnoTest {
  public static void main(String[] args) throws Exception {
    Log.getRootLogger().setDebugEnabled(true);
    Server server = new Server(9000);

    // String[] configuration = new String[] {
    // "org.eclipse.jetty.webapp.WebInfConfiguration",
    // "org.eclipse.jetty.webapp.WebXmlConfiguration",
    // "org.eclipse.jetty.webapp.MetaInfConfiguration",
    // "org.eclipse.jetty.webapp.FragmentConfiguration",
    // "org.eclipse.jetty.plus.webapp.EnvConfiguration",
    // "org.eclipse.jetty.plus.webapp.PlusConfiguration",
    // "org.eclipse.jetty.annotations.AnnotationConfiguration",
    // "org.eclipse.jetty.webapp.JettyWebXmlConfiguration" };
    // server.setAttribute("org.eclipse.jetty.webapp.configuration",
configuration);

    server.setHandler(new PostHandler());
    server.start();
    server.join();
  }

  @MultipartConfig
  public static class PostHandler extends ContextHandler {
    public PostHandler() {
      super("/post");
    }

    @Override
    public void doHandle(String target, Request baseRequest,
HttpServletRequest request,
        HttpServletResponse response) throws IOException, ServletException {
      System.out.print(request.getContentType());
      Part p = request.getPart("content");
      System.out.print(p.getSize());
      baseRequest.setHandled(true);
    }
  }
}

Calls to /post/ will result in the following:
java.lang.IllegalStateException: No multipart config for servlet
at org.eclipse.jetty.server.Request.getPart(Request.java:2002)
at anno.AnnoTest$PostHandler.doHandle(AnnoTest.java:49)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1010)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:361)
at
org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)
at
org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:937)
at
org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:998)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:856)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
at
org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at
org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628)
at
org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Unknown Source)
_______________________________________________
jetty-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/jetty-users

Reply via email to