Maybe I'm wrong, but the camelHttpTransportServlet and servlet look generic, so maybe they can be done by the component itself when deployed in osgi ?
On Tue, Jan 11, 2011 at 16:40, Willem Jiang <[email protected]> wrote: > It's hard to determine what kind of HttpContext and servlet name, alien can > be used for the CamelServlet. > So I did some work on the CAMEL-3485 to help user to bind the Servlet with > CamelServlet by looking the CamelServletService from the service registry > like this. > > <osgi:reference id="camelHttpTransportServlet" > interface="org.apache.camel.component.servlet.CamelServletService"/> > > <bean id="servlet" > class="org.apache.camel.component.servlet.ServletComponent"> > <property name = "camelServletService" ref="camelHttpTransportServlet" > /> > </bean> > > <bean id="servletProcessor" > class="org.apache.camel.itest.osgi.servlet.ServletProcessor" /> > > <camelContext xmlns="http://camel.apache.org/schema/spring"> > <camel:route> > <camel:from uri="servlet:///hello"/> > <camel:process ref="servletProcessor"/> > </camel:route> > </camelContext> > > Willem > > Guillaume Nodet wrote: > Just raised https://issues.apache.org/jira/browse/CAMEL-3490 for that > > On Mon, Jan 3, 2011 at 18:22, Guillaume Nodet <[email protected]> wrote: > > On Mon, Jan 3, 2011 at 17:55, Charles Moulliard <[email protected]> > wrote: > >> What you suggest (component=servlet) is by example what has been done in > >> this project of camel --> org.apache.camel.component.paxlogging ? > > > > Yes, the same way as for paxlogging camel component. > > > >> Question: Is there a way to check that pax-web has well registered the > >> servlet defined in the web.xml file and deployed as a jar in hot deploy > >> directory ? > > > > If we were to rely on the osgi http service instead of pax-web, it > > would be a bit more portable. > > Just adding an osgi activator to camel-servlet would work fine for > > that imho, as the activator could register both the servlet in the > > osgi http service and the component resolver. > > > > Btw, this discussion is much more related to camel than karaf ;-) > > > >> On 03/01/11 17:33, Guillaume Nodet wrote: > >>> > >>> I think it should work, it may be a class loader issue. > >>> I think you have two solutions overall: > >>> * either you create you own jetty server using camel-jetty and you > >>> set up the jetty server yourself > >>> * you can use a wab packaging > >>> * or you want to reuse the osgi http service and you need to set up > >>> a servlet and configure the security on the servlet > >>> For the later, the packaging does not have to be a war, but if you > >>> don't use a war, you'll have to write the code that will do the > >>> security and will register the servlet in the osgi http service. > >>> I think the easiest is using a wab, you just need to make sure you > >>> don't include the camel-servlet component or any camel jar into the > >>> war. > >>> Actually, if should start with an exploded war and a simple web.xml to > >>> make sure you don't include any code in the war itself. I guess the > >>> trick is to expose the component so that other camel will find it. It > >>> can be done by registering a ComponentResolver with a property > >>> (component=servlet) that would always register the same servlet > >>> component instance. > >>> > >>> On Mon, Jan 3, 2011 at 17:01, Charles Moulliard<[email protected]> > >>> wrote: > >>>> > >>>> I don't think that packaging camel-servlet in a war will work. Even if > >>>> we create a jar (=WAB, WAB) containing a web.xml with description of > >>>> servlet > >>>> > >>>> <servlet> > >>>> <servlet-name>CamelServlet</servlet-name> > >>>> <display-name>Camel Http Transport Servlet</display-name> > >>>> <servlet-class> > >>>> org.apache.camel.component.servlet.CamelHttpTransportServlet > >>>> </servlet-class> > >>>> <init-param> > >>>> <param-name>matchOnUriPrefix</param-name> > >>>> <param-value>true</param-value> > >>>> </init-param> > >>>> <load-on-startup>1</load-on-startup> > >>>> > >>>> </servlet> > >>>> > >>>> Caused by: java.lang.IllegalArgumentException: Cannot find the > >>>> deployed servlet, please configure the ServletComponent or configure a > >>>> org.apache.camel.component.servlet.CamelHttpTransportServlet servlet > >>>> in web.xml > >>>> at > >>>> > org.apache.camel.component.servlet.ServletComponent.getCamelServlet(ServletComponent.java:55) > > >>>> at > >>>> > org.apache.camel.component.servlet.ServletComponent.connect(ServletComponent.java:109) > > >>>> at > >>>> > org.apache.camel.component.http.HttpEndpoint.connect(HttpEndpoint.java:148) > >>>> at > >>>> > org.apache.camel.component.http.HttpConsumer.doStart(HttpConsumer.java:52) > >>>> at > >>>> org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:65) > >>>> at > >>>> org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:52) > >>>> at > >>>> > org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:52) > >>>> at > >>>> > org.apache.camel.impl.DefaultCamelContext.startServices(DefaultCamelContext.java:1484) > > >>>> at > >>>> > org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRouteConsumers(DefaultCamelContext.java:1750) > > >>>> at > >>>> > org.apache.camel.impl.DefaultCamelContext.doStartRouteConsumers(DefaultCamelContext.java:1703) > > >>>> at > >>>> > org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:1629) > > >>>> at > >>>> > org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:1419) > > >>>> at > >>>> > org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1314) > > >>>> at > >>>> > org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1213) > > >>>> at > >>>> > org.apache.camel.spring.SpringCamelContext.doStart(SpringCamelContext.java:164) > > >>>> at > >>>> org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:65) > >>>> at > >>>> org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:52) > >>>> at > >>>> > org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1191) > > >>>> at > >>>> > org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:203) > > >>>> at > >>>> > org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:101) > > >>>> > >>>> > >>>> it will not be possible for camel to find the CamelHttpServlet > >>>> > >>>> Regards, > >>>> > >>>> Charles Moulliard > >>>> > >>>> Sr. Principal Solution Architect - FuseSource > >>>> Apache Committer > >>>> > >>>> Blog : http://cmoulliard.blogspot.com > >>>> Twitter : http://twitter.com/cmoulliard > >>>> Linkedin : http://www.linkedin.com/in/charlesmoulliard > >>>> Skype: cmoulliard > >>>> > >>>> > >>>> > >>>> On Mon, Dec 20, 2010 at 3:06 PM, Achim Nierbeck< > [email protected]> > >>>> wrote: > >>>>> > >>>>> Just one more comment from me, a OSGi-War (aka wab) can also be used > :) > >>>>> Totally forgot to mention that when Charles asked me directly, and I > >>>>> didn't > >>>>> have a real good answer ;) > >>>>> > >>>>> 2010/12/20 Guillaume Nodet<[email protected]> > >>>>> > >>>>>> On Mon, Dec 20, 2010 at 14:42, Charles Moulliard< > [email protected]> > >>>>>> wrote: > >>>>>>> > >>>>>>> Hi, > >>>>>>> > >>>>>>> I would like to start a discussion around the following point as it > >>>>>>> does > >>>>>> > >>>>>> not > >>>>>>> > >>>>>>> seem obvious to find an answer. To authenticate a HTTP user with > camel > >>>>>>> on > >>>>>>> Karaf we can use the component camel-jetty and camel-servlet. Jetty > + > >>>>>> > >>>>>> JAAS + > >>>>>>> > >>>>>>> camel can be easily configured using Spring beans + securityHandler > >>>>>>> with > >>>>>>> camel but this does not seem the case with camel-servlet. > >>>>>>> > >>>>>>> The component camel-servlet does not accept as parameter a > handler(s) > >>>>>>> for > >>>>>>> Jetty. This is normal as camel can be deployed in different > >>>>>>> Application > >>>>>>> Servers which are not build with Jetty. So what alternative(s) > exist > >>>>>>> to > >>>>>>> configure camel-servlet with Jetty + JAAS on Karaf ? Using > jetty.xml > >>>>>>> (in > >>>>>> > >>>>>> etc > >>>>>>> > >>>>>>> folder) but how to link camel servlet with jetty security handler ? > >>>>>>> > >>>>>> Unless I'm wrong, when you use camel-servlet, you're responsible for > >>>>>> setting up the CamelHttpTransportServlet servlet. > >>>>>> In OSGi, it could be done either using a standard web application > >>>>>> (deployed using the war support), or directly using the OSGi HTTP > >>>>>> service. In the former case, you'd have to configure the web.xml > for > >>>>>> security. In the latter case, you need to use the OSGi HTTP service > >>>>>> api to properly configure the security bits (by implementing > >>>>>> org.osgi.service.http.HttpContext interface). > >>>>>> > >>>>>> I agree we could have an example of showing the last way in camel . > >>>>>> Configuring the war for security isn't specific to OSGi or Camel > fwiw. > >>>>>> > >>>>>>> Regards, > >>>>>>> > >>>>>>> Charles > >>>>>>> > >>>>>> > >>>>>> > >>>>>> -- > >>>>>> Cheers, > >>>>>> Guillaume Nodet > >>>>>> ------------------------ > >>>>>> Blog: http://gnodet.blogspot.com/ > >>>>>> ------------------------ > >>>>>> Open Source SOA > >>>>>> http://fusesource.com > >>>>>> > >>> > >>> > >> > > > > > > > > -- > > Cheers, > > Guillaume Nodet > > ------------------------ > > Blog: http://gnodet.blogspot.com/ > > ------------------------ > > Open Source SOA > > http://fusesource.com > > > > -- > Willem > ---------------------------------- > FuseSource > Web: http://www.fusesource.com > Blog: http://willemjiang.blogspot.com (English) > http://jnn.javaeye.com (Chinese) > Twitter: willemjiang > -- Cheers, Guillaume Nodet ------------------------ Blog: http://gnodet.blogspot.com/ ------------------------ Open Source SOA http://fusesource.com
