Hi Alex, I will add a full example tomorrow. I’m fully busy today.
Regards JB > Le 5 févr. 2020 à 19:23, Alex Soto <[email protected]> a écrit : > > 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] >> <mailto:[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? >>> >> >
