-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 thank you very much Johannes, it works like a charme.
Christian On 21.01.2015 15:21, Johannes Brodwall wrote: > Hi Christian, Joakim > > The code was developed simply to get my application running with @WebServlet > annotations, so > it's not surprising that it has limitations. I explored Jetty's source code > to find out how > they handled these three annotations (listener, servlet and filter). > > The code for most of the other annotations seems to be in a separate part of > Jetty. I suspect > that you can deal with many of these by doing: > > webAppContext.addDecorator(new AnnotationDecorator(webAppContext)); > > That should hopefully take care of multipart. > > As to @HandlesType, I have not discovered any usage of this in the Jetty code > base, so I don't > know how to get started. > > > ~Johannes > > > > On Fri, Jan 16, 2015 at 5:16 PM, Christian Reuschling > <[email protected] > <mailto:[email protected]>> wrote: > > indeed, I tried to use Johannes code, and it seemed to work well, but > @MultipartConfig was not > recognized. I used WebAppContext instead of ServletContextHandler, but this > didn't do the > trick: > > > > WebAppContext contextHandler = new WebAppContext(); > contextHandler.setContextPath("/"); > contextHandler.setResourceBase("."); > > server.setHandler(contextHandler); > > // unnecessary, servlet will be started during annotation scanning // > contextHandler.addServlet(new ServletHolder(new ExampleDispatcherServlet()), > "/*"); > > > Set<AnnotationParser.Handler> handlers = new HashSet<>(); handlers.add(new > WebServletAnnotationHandler(contextHandler)); handlers.add(new > WebFilterAnnotationHandler(contextHandler)); handlers.add(new > WebListenerAnnotationHandler(contextHandler)); > > AnnotationParser annotationParser = new AnnotationParser(); > annotationParser.parse(handlers, > ExampleDispatcherServlet.class.getName(), new ClassNameResolver() { @Override > public boolean > shouldOverride(String name) { return false; } @Override public boolean > isExcluded(String name) > { return false; } }); > > server.start(); > > > The @WebInitParams were recognized, the servlet was loaded on startup. But no > Multipart > support. What will do the trick? I could manually add Multipart support with > this hack: > > > WebAppContext contextHandler = new WebAppContext() { @Override public void > doHandle(String > target, Request baseRequest, HttpServletRequest request, HttpServletResponse > response) throws > IOException, ServletException { String contentType = > request.getHeader("Content-Type"); > if(contentType != null && contentType.startsWith("multipart/form-data")) { > baseRequest.setAttribute(Request.__MULTIPART_CONFIG_ELEMENT, new > MultipartConfigElement(System.getProperty("java.io.tmpdir"))); } > > super.doHandle(target, baseRequest, request, response); } }; > > > but it doesn't feel like a final solution. > > by the way - is it planed to scan servlet 3.0 annotations by Jetty inside the > addServlet(..) > methods in the future? It's a gap, isn't it? > > > Christian > > > On 16.01.2015 16:50, Joakim Erdfelt wrote: >> Traditionally annotation scanning is part of the WebApp layer. Embedded >> Jetty focuses on >> direct declarations. > >> Johannes Brodwall's solution is creative, but only addresses a small subset >> of what, and >> how, annotations can be wired up. (which might be sufficient in most cases) >> Examples: * >> There's no good way to handle @HandlesType and ServletContainerInitializer >> his way. * There's >> no support for @MultipartConfig without a WebAppContext.metadata to hold >> that information * >> There's no support for @ServletSecurity without a WebAppContext.metadata to >> hold that >> information > >> Your example, however, uses @MultipartConfig, which is something that >> belongs in the >> WebAppContext's metadata. That information, found during annotation >> scanning, isn't retained >> in a ServletContextHandler. > > >> -- Joakim Erdfelt <[email protected] <mailto:[email protected]> >> <mailto:[email protected] > <mailto:[email protected]>>> webtide.com <http://webtide.com> >> <http://www.webtide.com/> - intalio.com/jetty <http://intalio.com/jetty> > <http://intalio.com/jetty> Expert advice, >> services and support from from the Jetty & CometD experts eclipse.org/jetty >> <http://eclipse.org/jetty> <http://eclipse.org/jetty/> - cometd.org >> <http://cometd.org> >> <http://cometd.org/> > >> On Fri, Jan 16, 2015 at 7:26 AM, Christian Reuschling >> <[email protected] >> <mailto:[email protected]> <mailto:[email protected] >> <mailto:[email protected]>>> wrote: > >> Hi, > >> we have no war file, nor some extra classpath, but simply want to add our >> servlet object >> instance to the embedded server, by taking it's servlet 3.0 parameters into >> account. > >> All the documentation on Jetty, and all examples and snippets we found for >> embedded + >> servlet 3.0 annotations deals with specifying a war file or a classpath, >> which will be >> scanned by AnnotationConfiguration then. > >> We tried a lot, but we were not able to do the same by simply adding the >> servlet with >> context.addServlet(). > >> Here is our code: > > >> Server server = new Server(iPort); > >> // tried: ServletHandler handler = new ServletHandler(); // tried: >> WebAppContext >> contextHandler = new WebAppContext(); ServletContextHandler contextHandler = >> new >> ServletContextHandler(); contextHandler.setContextPath("/"); > >> // tried: contextHandler.setConfigurations(new Configuration[] { // >> new >> AnnotationConfiguration() }); // tried: >> contextHandler.setConfigurationDiscovered(true); > >> contextHandler.addServlet(new ServletHolder(new ExampleServlet()), "/*"); >> server.setHandler(contextHandler); > >> server.start(); > > >> The Servlet is a simple HttpServlet with following annotations: > >> @WebServlet(urlPatterns = { "/example/*" }, loadOnStartup = 1, initParams = >> { >> @WebInitParam(name = "name1", value = "val1"), @WebInitParam(name = "name2", >> value = "val2") >> }) @MultipartConfig(fileSizeThreshold = 1024*1024*10) public class >> ExampleServlet extends >> HttpServlet {....} > > > >> How is it possible that the embedded Jetty server simply takes the >> annotations of the >> Servlet Object added to the server with context/handler.addServlet(..) into >> account, and >> nothing else, as the most simple scenario. > > >> Thanks for all answers! > >> Christian > > > >> _______________________________________________ jetty-users mailing list >> [email protected] <mailto:[email protected]> >> <mailto:[email protected] > <mailto:[email protected]>> To change your delivery options, >> retrieve your password, or unsubscribe from this list, visit >> https://dev.eclipse.org/mailman/listinfo/jetty-users > > > > >> _______________________________________________ jetty-users mailing list >> [email protected] <mailto:[email protected]> To change your >> delivery options, > retrieve your password, or unsubscribe >> from this list, visit https://dev.eclipse.org/mailman/listinfo/jetty-users > > > _______________________________________________ jetty-users mailing list > [email protected] <mailto:[email protected]> To change your > delivery options, > retrieve your password, or unsubscribe from this list, visit > https://dev.eclipse.org/mailman/listinfo/jetty-users > > > > > _______________________________________________ jetty-users mailing list > [email protected] To change your delivery options, retrieve your > password, or unsubscribe > from this list, visit https://dev.eclipse.org/mailman/listinfo/jetty-users > - -- ______________________________________________________________________________ Christian Reuschling, Dipl.-Ing.(BA) Software Engineer Knowledge Management Department German Research Center for Artificial Intelligence DFKI GmbH Trippstadter Straße 122, D-67663 Kaiserslautern, Germany Phone: +49.631.20575-1250 mailto:[email protected] http://www.dfki.uni-kl.de/~reuschling/ - ------------Legal Company Information Required by German Law------------------ Geschäftsführung: Prof. Dr. Dr. h.c. mult. Wolfgang Wahlster (Vorsitzender) Dr. Walter Olthoff Vorsitzender des Aufsichtsrats: Prof. Dr. h.c. Hans A. Aukes Amtsgericht Kaiserslautern, HRB 2313= ______________________________________________________________________________ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) iEYEARECAAYFAlTGZdAACgkQ6EqMXq+WZg+oUQCcCfcMdtnrsFltYzkjnAxux4eO kzwAnjZd88KBJf/TY3rk4KksvO8r4lbi =Fs9+ -----END PGP SIGNATURE----- _______________________________________________ jetty-users mailing list [email protected] To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://dev.eclipse.org/mailman/listinfo/jetty-users
