Thank you JB!

Best regards,
Alex soto




> On Feb 5, 2020, at 3:09 PM, Jean-Baptiste Onofre <[email protected]> wrote:
> 
> 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] 
>> <mailto:[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?
>>>> 
>>> 
>> 
> 

Reply via email to