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?
>> 
> 

Reply via email to