Anybody can validate this approach? As I said, it appears to work, except in my case I don’t see how to specify the context.id <http://context.id/> property in the Camel Servlet. JB?
> On Jan 31, 2020, at 1:30 PM, Alex Soto <[email protected]> wrote: > > This seems to work for me, but I have my doubts. Following the example > here: > https://github.com/ops4j/org.ops4j.pax.web/tree/master/samples/whiteboard-extended > > <https://github.com/ops4j/org.ops4j.pax.web/tree/master/samples/whiteboard-extended> > I made the following changes. > > In my blueprint: > > <service > interface="org.ops4j.pax.web.service.whiteboard.HttpContextMapping"> > <service-properties> > <entry key="httpContext.id <http://httpcontext.id/>"> > <value>externalAPIContext</value> > </entry> > </service-properties> > > <bean > class="org.ops4j.pax.web.extender.whiteboard.runtime.DefaultHttpContextMapping"> > <property name="httpContextId" > value="externalAPIContext" /> > <property name="path" > value="#{context.path}#{api.root.path}" /> > <property name="parameters"> > <map> > <entry key="httpContext.virtualhosts" > value="127.0.0.1"/> > <entry key="httpContext.connectors" > value="externalAPIConnector"/> > </map> > </property> > </bean> > </service> > > <bean id="camelServlet" > class="org.apache.camel.component.servlet.CamelHttpTransportServlet"/> > > <reference id="httpService" > interface="org.osgi.service.http.HttpService" /> > <bean > class="org.apache.camel.component.servlet.osgi.OsgiServletRegisterer" > init-method="register" > destroy-method="unregister"> > > <property name="alias" value="#{context.path}#{api.root.path}" > /> > <property name="httpService" ref="httpService" /> > <property name="servlet" ref="camelServlet" /> > <property name="servletName" value="ResponderRestApiServlet"/> > <property name="matchOnUriPrefix" value="true"/> > </bean> > > > In my jetty.xml: > > <Call name="addConnector"> > <Arg> > <New class="org.eclipse.jetty.server.ServerConnector"> > <Arg name="server"> > <Ref refid="Server" /> > </Arg> > <Arg name="factories"> > <Array > type="org.eclipse.jetty.server.ConnectionFactory"> > <Item> > <New > class="org.eclipse.jetty.server.HttpConnectionFactory"> > <Arg > name="config"> > <Ref > refid="httpConfig" /> > </Arg> > </New> > </Item> > </Array> > </Arg> > <Set name="host"> > <Property name="jetty.host" > default="127.0.0.1" /> > </Set> > <Set name="port"> > <Property name="jetty.port" > default="8285" /> > </Set> > <Set name="idleTimeout"> > <Property name="http.timeout" > default="30000" /> > </Set> > <Set name="name">externalAPIConnector</Set> > </New> > </Arg> > </Call> > > > In my Camel Context: > > <restConfiguration > component="servlet" > bindingMode="xml" > contextPath="{{context.path}}{{api.root.path}}" > port="{{port}}" > enableCORS="false" > clientRequestValidation="true"> > > <componentProperty key="matchOnUriPrefix" value="true"/> > <endpointProperty key="servletName" > value="ResponderRestApiServlet"/> > </restConfiguration> > > > But, I am wondering if this correct, because in the example the Servlet is > registered with service property httpContext.id <http://httpcontext.id/>, > which I am not setting anywhere. The Jetty Connector name is configured in > the org.ops4j.pax.web.service.whiteboard.HttpContextMapping, but I don’t > see how it is matched to my Camel Servlet. Notice that the > org.apache.camel.component.servlet.osgi.OsgiServletRegisterer bean is the one > registering the servlet with the OSGi HTTP Service, but there is no way to > specify the httpContext.id <http://httpcontext.id/> property. Is this > property required to match the HttpContextMapping to the Servlet? > > Any insight is appreciated. > > Best regards, > Alex soto > > > > >> On Jan 31, 2020, at 9:29 AM, Alex Soto <[email protected] >> <mailto:[email protected]>> wrote: >> >> Thanks JB and Markus, >> >> This is very close to what I am looking for (I still need to read more the >> examples) but in my particular case, I am using Camel Rest DSL (with servlet >> component) connecting it to the OSGi managed >> org.osgi.service.http.HttpService. In other words, I am not using the Camel >> Jetty component for my rest services. This is how I am setting up Camel to >> use the OSGi HTTP Service: >> >> <reference id="httpService" >> interface="org.osgi.service.http.HttpService" /> >> <bean id="camelServlet" >> class="org.apache.camel.component.servlet.CamelHttpTransportServlet"/> >> <bean >> class=“org.apache.camel.component.servlet.osgi.OsgiServletRegisterer" >> init-method="register" destroy-method="unregister”> >> <property name="alias" value="#{context.path}#{api.root.path}" >> /> >> <property name="httpService" ref="httpService" /> >> <property name="servlet" ref="camelServlet" /> >> <property name="servletName" value="RestApiServlet"/> >> <property name="matchOnUriPrefix" value="true"/> >> </bean> >> >> <restConfiguration component=“servlet" bindingMode="xml" >> contextPath="{{context.path}}{{api.root.path}}" >> port="{{port}}" >> enableCORS="false" >> clientRequestValidation="true"> >> <componentProperty key="matchOnUriPrefix" value="true"/> >> <endpointProperty key="servletName" >> value="RestApiServlet”/> >> ... >> >> >> So, the question is how do I bind the Camel servlet to a specific Jetty >> connection? >> Would the MANIFEST headers do it? If so, then that applies to the entire >> bundle. >> >> Best regards, >> Alex soto >> >> >> >> >>> On Jan 31, 2020, at 9:06 AM, Markus Rathgeb <[email protected] >>> <mailto:[email protected]>> wrote: >>> >>> Hi JB, >>> >>> as I comment that link already in the first thread and also answered >>> to your link in the second thread: >>> >>>> Isn't this similar to this thread (at least after some comments): >>>> https://lists.apache.org/thread.html/69182ee8feef88896f840efde48146053997119e820ef037853c1c9b@%3Cuser.karaf.apache.org%3E >>>> >>>> <https://lists.apache.org/thread.html/69182ee8feef88896f840efde48146053997119e820ef037853c1c9b@%3Cuser.karaf.apache.org%3E> >>>> You also referenced to http://blog.nanthrax.net/?p=352 >>>> <http://blog.nanthrax.net/?p=352> >>>> My observations has been that it should work for "Web Bundles" and I >>>> did not found (that time) a way to get it working for servlets. >>> >>> May I ask you if you already checked that this is really still working >>> for servlets? >> >
