A servlet runs with a context (path).

As we'll define and deploy the Blueprint files/bundles independently they 
should nevertheless share the same servlet context to avoid the unique context 
path for every HTTP consumer.

Best
Gerald

> Alex Soto <alex.s...@envieta.com> hat am 19.08.2020 19:19 geschrieben:
> 
>  
> I am not sure you can do that but can try.
> Also, I don’t understand why you would want to share a servlet across bundles.
> 
> Best regards,
> Alex soto
> 
> 
> 
> 
> > On Aug 19, 2020, at 12:02 PM, Gerald Kallas <catsh...@mailbox.org> wrote:
> > 
> > Thanks Alex.
> > 
> > That seems to be a problem as I'll have every Blueprint file is being 
> > deployed separately and resides so far in a dedicated bundle.
> > 
> > I wonder if I could access the servlet in the registry anyway from a 
> > dedicated bundle/Blueprint file as it is registered with
> > 
> > org.apache.camel.component.osgi.OsgiServletRegisterer
> > 
> > Best
> > Gerald
> > 
> >> Alex Soto <alex.s...@envieta.com> hat am 19.08.2020 15:33 geschrieben:
> >> 
> >> 
> >> Hi Gerald,
> >> 
> >> All Blueprint files in the same bundle share the same namespace/context, 
> >> so yes, a bean defined in one file is visible in another, as long as it is 
> >> the same bundle.  I usually have one file “beans.xml” where all beans are 
> >> declared, and a separate file “camel-context.xml” defining the camel 
> >> context.  Furthermore, you can move routes to separate files by using 
> >> “routeContextRef”, for example:
> >> 
> >> 
> >> <camelContext xmlns="http://camel.apache.org/schema/blueprint";  
> >> id=“my-context">
> >>            <routeContextRef ref="common-routes”/>
> >> . . . 
> >> 
> >> Then, in a separate file:
> >> 
> >> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
> >>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> >>    xsi:schemaLocation="
> >>           http://www.osgi.org/xmlns/blueprint/v1.0.0 
> >> https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd";>
> >> 
> >>    <routeContext id="common-routes" 
> >> xmlns="http://camel.apache.org/schema/blueprint”>
> >>            <route id=“sample">
> >>                    <from uri=“direct:sample”/>
> >>                    . . . 
> >>            </route>
> >>    </routeContext>
> >> 
> >> Again, all files need to be  in the same bundle.
> >> 
> >> Best regards,
> >> Alex soto
> >> 
> >> 
> >> 
> >> 
> >>> On Aug 19, 2020, at 7:59 AM, Gerald Kallas <catsh...@mailbox.org> wrote:
> >>> 
> >>> Thanks Daniel.
> >>> 
> >>> Not sure if I did explain right.
> >>> 
> >>> I want to define
> >>> 
> >>>   <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.osgi.OsgiServletRegisterer"
> >>>        init-method="register"
> >>>        destroy-method="unregister">
> >>>           <property name="servletName" value="WEB2SFO" />
> >>>           <property name="alias" value="/web2sfo" />
> >>>           <property name="httpService" ref="httpService" />
> >>>           <property name="servlet" ref="camelServlet" />
> >>>   </bean>
> >>> 
> >>> in one common Blueprint file and refer in an other blueprint file to the 
> >>> registered servlet above like
> >>> 
> >>> <from uri="servlet://get?servletName=WEB2SFO" />
> >>> 
> >>> Is there a way in the second Blueprint to get a reference to the servlet 
> >>> defined in the first one?
> >>> 
> >>> Best
> >>> Gerald
> >>> 
> >>>> Daniel Langevin <daniel.lange...@shq.gouv.qc.ca> hat am 19.08.2020 13:48 
> >>>> geschrieben:
> >>>> 
> >>>> 
> >>>> Hi Gerald,
> >>>> 
> >>>> the only way i know to do that is to refer this way.
> >>>> 
> >>>> uri="direct-vm:xxxxxxxxxxxxxx?block=true&amp;timeout=300000"
> >>>> 
> >>>> 
> >>>> 
> >>>> 
> >>>> hope this help!
> >>>> 
> >>>> 
> >>>> 
> >>>> Daniel
> >>>>>>> 
> >>>> De :     Gerald Kallas <catsh...@mailbox.org>    
> >>>> À :      <users@camel.apache.org>, Daniel Langevin 
> >>>> <daniel.lange...@shq.gouv.qc.ca>      
> >>>> Date :   2020-08-19 00:15        
> >>>> Objet :  Re: Rép. : Camel REST DSL with servlet - API URL?       
> >>>> The idea is to define a servlet once and to re-use it with it's context 
> >>>> in multiple routes in different Blueprint files.
> >>>> 
> >>>> Best
> >>>> Gerald
> >>>> 
> >>>>> Gerald Kallas <catsh...@mailbox.org> hat am 18.08.2020 22:35 
> >>>>> geschrieben:
> >>>>> 
> >>>>> 
> >>>>> Thanks a lot, Daniel. It works.
> >>>>> 
> >>>>> Is it possible to refer to a servlet that has been defined in another 
> >>>>> Blueprint file?
> >>>>> 
> >>>>> Best
> >>>>> Gerald
> >>>>> 
> >>>>>> Daniel Langevin <daniel.lange...@shq.gouv.qc.ca> hat am 18.08.2020 
> >>>>>> 14:29 geschrieben:
> >>>>>> 
> >>>>>> 
> >>>>>> Try this it's work for me.
> >>>>>> 
> >>>>>> 
> >>>>>> 
> >>>>>> <restConfiguration component="servlet" contextPath="/apiisp001"
> >>>>>> bindingMode="json" scheme="https" port="8443"
> >>>>>> apiContextPath="/api-doc" apiContextListing="false" enableCORS="true">
> >>>>>> <!--
> >>>>>> Add apiContextpath to give the possibility to list all service on 
> >>>>>> apiisp001 Context with Camel Swagger
> >>>>>> with that request: https://localhost:8443/apiisp001/api-doc
> >>>> 
> >>>>>> -->
> >>>>>> 
> >>>>>> <!-- Add this line to create a independant servlet prevent Conflict 
> >>>>>> with a previous declare in other CamelContext -->
> >>>>>> <endpointProperty key="servletName" value="apiisp001CamelServlet" />
> >>>>>> 
> >>>>>> <dataFormatProperty key="prettyPrint" value="true" />
> >>>>>> <apiProperty key="base.path" value="/apiisp001" />
> >>>>>> <apiProperty key="api.description" value="APIISP001 - Test API" />
> >>>>>> <apiProperty key="api.title" value="APIISP001" />
> >>>>>> <apiProperty key="api.version" value="1.0.0" />
> >>>>>> <apiProperty key="api.contact.name" value="Gerald Kallas"/>
> >>>>>> <apiProperty key="api.contact.email" value="catsh...@mailbox.org"/>
> >>>>>> <apiProperty key="api.termsOfService" value="(C) xxxxxxxxxxxx 2020"/>
> >>>>>> 
> >>>>>> </restConfiguration>
> >>>>>> 
> >>>>>> <!--
> >>>>>> Add this little URI to test connectivity of you rest API
> >>>>>> with that request: https://localhost:8443/apiisp001/echo/ping
> >>>> 
> >>>>>> -->
> >>>>>> 
> >>>>>> <rest path="/echo" consumes="text/html" produces="text/html">
> >>>>>> <description>apiisp001 - Echo rest service</description>
> >>>>>> <get uri="ping">
> >>>>>> <description>APIISP001 - Connectivity test </description>
> >>>>>> <route id="rte.APIISP001.rest.echo">
> >>>>>> <transform>
> >>>>>> <constant>/APIISP001/echo PONG.</constant>
> >>>>>> </transform>
> >>>>>> </route>
> >>>>>> </get>
> >>>>>> </rest>
> >>>>>> 
> >>>>>> Daniel Langevin
> >>>>>> Direction de l’assistance et des technologies
> >>>>>> Direction des ressources informationnelles
> >>>>>> 
> >>>>>> Société d’habitation du Québec
> >>>>>> Édifice Marie-Guyart
> >>>>>> 1054, rue Louis-Alexandre-Taschereau
> >>>>>> Aile Jacques-Parizeau, 1er étage
> >>>>>> Québec (Québec) G1R 5E7
> >>>>>> Téléphone : 418 643-4035, poste 1191
> >>>>>> Sans frais : 1 800 463-4315
> >>>>>> 
> >>>>>> 
> >>>>>> 
> >>>>>> 
> >>>>>> 
> >>>>>> 
> >>>>>>>>> 
> >>>>>> De : Gerald Kallas <catsh...@mailbox.org>
> >>>>>> À : <users@camel.apache.org>, Daniel Langevin 
> >>>>>> <daniel.lange...@shq.gouv.qc.ca>
> >>>>>> Date : 2020-08-18 03:33
> >>>>>> Objet : Re: Rép. : Camel REST DSL with servlet - API URL?
> >>>>>> 
> >>>>>> Thanks for the hint. But it doesn't work either. I modified my 
> >>>>>> Blueprint as following
> >>>>>> 
> >>>>>> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
> >>>>>> xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0";
> >>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> >>>>>> xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 
> >>>>>> https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd";>
> >>>> 
> >>>>>> 
> >>>>>> <camelContext id="isp.api.APIISP001" 
> >>>>>> xmlns="http://camel.apache.org/schema/blueprint"; streamCache="true" 
> >>>>>> useBreadcrumb="true">
> >>>>>> 
> >>>>>> <!--********************************************************************************-->
> >>>>>> <!-- REST API -->
> >>>>>> <!--********************************************************************************-->
> >>>>>> 
> >>>>>> <restConfiguration component="servlet" contextPath="/apiisp001" 
> >>>>>> bindingMode="json" scheme="https" port="8443">
> >>>>>> <dataFormatProperty key="prettyPrint" value="true" />
> >>>>>> <apiProperty key="base.path" value="/apiisp001" />
> >>>>>> <apiProperty key="api.description" value="APIISP001 - Test API" />
> >>>>>> <apiProperty key="api.title" value="APIISP001" />
> >>>>>> <apiProperty key="api.version" value="1.0.0" />
> >>>>>> </restConfiguration>
> >>>>>> 
> >>>>>> <!-- REST endpoints -->
> >>>>>> <rest path="/base">
> >>>>>> <get uri="/1" id="isp.api.APIISP001.get.1">
> >>>>>> <route>
> >>>>>> <!-- send the chunk to direct -->
> >>>>>> <to uri="direct-vm:APIISP001.1"/>
> >>>>>> </route>
> >>>>>> </get>
> >>>>>> </rest>
> >>>>>> 
> >>>>>> </camelContext>
> >>>>>> 
> >>>>>> </blueprint>
> >>>>>> 
> >>>>>> The (untertow) web server runs with HTTPS on port 8443, other servlets 
> >>>>>> are working. I tried
> >>>>>> 
> >>>>>> https://localhost:8443/apiisp001/base/1
> >>>> 
> >>>>>> 
> >>>>>> where I'd expect the response but did get a HTTP 404 error.
> >>>>>> 
> >>>>>> Any hints are appreciated.
> >>>>>> 
> >>>>>> See also the log for deployment
> >>>>>> 
> >>>>>> 2020-08-18T07:31:28,421 | INFO | 
> >>>>>> fileinstall-/opt/apache-karaf-4.2.9/deploy | BlueprintContainerImpl | 
> >>>>>> 105 - org.apache.aries.blueprint.core - 1.10.2 | Blueprint bundle 
> >>>>>> isp.api.APIISP001.xml/0.0.0 has been started
> >>>>>> 2020-08-18T07:31:28,432 | INFO | Blueprint Event Dispatcher: 1 | 
> >>>>>> BlueprintCamelContext | 169 - org.apache.camel.karaf.camel-blueprint - 
> >>>>>> 3.4.2 | Attempting to start CamelContext: isp.api.APIISP001
> >>>>>> 2020-08-18T07:31:28,437 | INFO | Blueprint Event Dispatcher: 1 | 
> >>>>>> JmxManagementStrategy | 144 - org.apache.camel.camel-management - 
> >>>>>> 3.4.2 | JMX is enabled
> >>>>>> 2020-08-18T07:31:28,484 | INFO | Blueprint Event Dispatcher: 1 | 
> >>>>>> AbstractCamelContext | 115 - org.apache.camel.camel-base - 3.4.2 | 
> >>>>>> Apache Camel 3.4.2 (isp.api.APIISP001) is starting
> >>>>>> 2020-08-18T07:31:28,484 | INFO | Blueprint Event Dispatcher: 1 | 
> >>>>>> AbstractCamelContext | 115 - org.apache.camel.camel-base - 3.4.2 | 
> >>>>>> StreamCaching is enabled on CamelContext: isp.api.APIISP001
> >>>>>> 2020-08-18T07:31:28,546 | INFO | Blueprint Event Dispatcher: 1 | 
> >>>>>> AbstractCamelContext | 115 - org.apache.camel.camel-base - 3.4.2 | 
> >>>>>> Using HealthCheck: camel-health
> >>>>>> 2020-08-18T07:31:28,592 | INFO | Blueprint Event Dispatcher: 1 | 
> >>>>>> DefaultStreamCachingStrategy | 115 - org.apache.camel.camel-base - 
> >>>>>> 3.4.2 | StreamCaching in use with spool directory: 
> >>>>>> /opt/apache-karaf/data/tmp/camel/camel-tmp-ID-43c92ad4274c-1597499175862-121-1
> >>>>>>  and rules: [Spool > 128K body size]
> >>>>>> 2020-08-18T07:31:28,593 | INFO | Blueprint Event Dispatcher: 1 | 
> >>>>>> JacksonDataFormat | 137 - org.apache.camel.camel-jackson - 3.4.2 | The 
> >>>>>> option autoDiscoverObjectMapper is set to false, Camel won't search in 
> >>>>>> the registry
> >>>>>> 2020-08-18T07:31:28,594 | INFO | Blueprint Event Dispatcher: 1 | 
> >>>>>> JacksonDataFormat | 137 - org.apache.camel.camel-jackson - 3.4.2 | The 
> >>>>>> option autoDiscoverObjectMapper is set to false, Camel won't search in 
> >>>>>> the registry
> >>>>>> 2020-08-18T07:31:28,625 | INFO | Blueprint Event Dispatcher: 1 | 
> >>>>>> InternalRouteStartupManager | 115 - org.apache.camel.camel-base - 
> >>>>>> 3.4.2 | Route: isp.api.APIISP001.get.1 started and consuming from: 
> >>>>>> servlet:/apiisp001/1
> >>>>>> 2020-08-18T07:31:28,626 | INFO | Blueprint Event Dispatcher: 1 | 
> >>>>>> AbstractCamelContext | 115 - org.apache.camel.camel-base - 3.4.2 | 
> >>>>>> Total 1 routes, of which 1 are started
> >>>>>> 2020-08-18T07:31:28,626 | INFO | Blueprint Event Dispatcher: 1 | 
> >>>>>> AbstractCamelContext | 115 - org.apache.camel.camel-base - 3.4.2 | 
> >>>>>> Apache Camel 3.4.2 (isp.api.APIISP001) started in 0.142 seconds
> >>>>>> 2020-08-18T07:31:28,643 | INFO | 
> >>>>>> fileinstall-/opt/apache-karaf-4.2.9/deploy | fileinstall | 10 - 
> >>>>>> org.apache.felix.fileinstall - 3.6.6 | Started bundle: 
> >>>>>> blueprint:file:/opt/apache-karaf-4.2.9/deploy/isp.api.APIISP001.xml
> >>>>>> 
> >>>>>> Best
> >>>>>> Gerald
> >>>>>> 
> >>>>>>> Daniel Langevin <daniel.lange...@shq.gouv.qc.ca> hat am 17.08.2020 
> >>>>>>> 17:44 geschrieben:
> >>>>>>> 
> >>>>>>> 
> >>>>>>> Hi,
> >>>>>>> 
> >>>>>>> you have to specify the default http port number : 8181 for 
> >>>>>>> CamelServlet
> >>>>>>> 
> >>>>>>> like this:
> >>>>>>> 
> >>>>>>> http://servername.org:8181/apiisp001/1
> >>>> 
> >>>>>>> 
> >>>>>>> 
> >>>>>>> 
> >>>>>>> 
> >>>>>>> Daniel Langevin
> >>>>>>> Direction de l’assistance et des technologies
> >>>>>>> Direction des ressources informationnelles
> >>>>>>> 
> >>>>>>> Société d’habitation du Québec
> >>>>>>> Édifice Marie-Guyart
> >>>>>>> 1054, rue Louis-Alexandre-Taschereau
> >>>>>>> Aile Jacques-Parizeau, 1er étage
> >>>>>>> Québec (Québec) G1R 5E7
> >>>>>>> Téléphone : 418 643-4035, poste 1191
> >>>>>>> Sans frais : 1 800 463-4315
> >>>>>>> 
> >>>>>>> 
> >>>>>>> 
> >>>>>>> 
> >>>>>>> 
> >>>>>>>>>> 
> >>>>>>> De : Gerald Kallas <catsh...@mailbox.org>
> >>>>>>> À : "users@camel.apache.org" <users@camel.apache.org>
> >>>>>>> Date : 2020-08-17 11:22
> >>>>>>> Objet : Camel REST DSL with servlet - API URL?
> >>>>>>> 
> >>>>>>> Dear all,
> >>>>>>> 
> >>>>>>> I'm going to configure a REST API similar to a (working) HTTP 
> >>>>>>> consumer. I tried several URLs to call the API operation but get 
> >>>>>>> always a HTTP 404.
> >>>>>>> 
> >>>>>>> Do I miss someting (e.g. the reference to the servletName)? Can 
> >>>>>>> someone point me out which is the API URL for the get operation in my 
> >>>>>>> case?
> >>>>>>> 
> >>>>>>> Thanks in advance
> >>>>>>> Gerald
> >>>>>>> 
> >>>>>>> 
> >>>>>>> My Blueprint DSL see below ..
> >>>>>>> 
> >>>>>>> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
> >>>>>>> xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0";
> >>>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> >>>>>>> xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 
> >>>>>>> https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd";>
> >>>> 
> >>>>>>> 
> >>>>>>> <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.osgi.OsgiServletRegisterer"
> >>>>>>> init-method="register"
> >>>>>>> destroy-method="unregister">
> >>>>>>> <property name="servletName" value="APIISP001" />
> >>>>>>> <property name="alias" value="/apiisp001" />
> >>>>>>> <property name="httpService" ref="httpService" />
> >>>>>>> <property name="servlet" ref="camelServlet" />
> >>>>>>> </bean>
> >>>>>>> 
> >>>>>>> <bean id="servlet" 
> >>>>>>> class="org.apache.camel.component.servlet.ServletComponent" />
> >>>>>>> 
> >>>>>>> <camelContext id="isp.api.APIISP001" 
> >>>>>>> xmlns="http://camel.apache.org/schema/blueprint"; streamCache="true" 
> >>>>>>> useBreadcrumb="true">
> >>>>>>> 
> >>>>>>> <!--********************************************************************************-->
> >>>>>>> <!-- REST API -->
> >>>>>>> <!--********************************************************************************-->
> >>>>>>> 
> >>>>>>> <restConfiguration component="servlet" contextPath="/apiisp001" 
> >>>>>>> bindingMode="json">
> >>>>>>> <dataFormatProperty key="prettyPrint" value="true" />
> >>>>>>> <apiProperty key="base.path" value="/apiisp001" />
> >>>>>>> <apiProperty key="api.description" value="APIISP001 - Test API" />
> >>>>>>> <apiProperty key="api.title" value="APIISP001" />
> >>>>>>> <apiProperty key="api.version" value="1.0.0" />
> >>>>>>> </restConfiguration>
> >>>>>>> 
> >>>>>>> <!-- REST endpoints -->
> >>>>>>> <rest path="/apiisp001">
> >>>>>>> <get uri="/1" id="isp.api.APIISP001.get.1">
> >>>>>>> <route>
> >>>>>>> <!-- send the chunk to direct -->
> >>>>>>> <to uri="direct-vm:APIISP001.1"/>
> >>>>>>> </route>
> >>>>>>> </get>
> >>>>>>> </rest>
> >>>>>>> 
> >>>>>>> </camelContext>
> >>>>>>> 
> >>>>>>> </blueprint>
> >>>>>>> 
> >>>>>>> One example for a working HTTP consumer find below
> >>>>>>> 
> >>>>>>> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
> >>>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> >>>>>>> xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0
> >>>>>>> https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd";>
> >>>> 
> >>>>>>> 
> >>>>>>> <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.osgi.OsgiServletRegisterer"
> >>>>>>> init-method="register"
> >>>>>>> destroy-method="unregister">
> >>>>>>> <property name="servletName" value="WEB2SFO" />
> >>>>>>> <property name="alias" value="/web2sfo" />
> >>>>>>> <property name="httpService" ref="httpService" />
> >>>>>>> <property name="servlet" ref="camelServlet" />
> >>>>>>> </bean>
> >>>>>>> 
> >>>>>>> <bean id="servlet" 
> >>>>>>> class="org.apache.camel.component.servlet.ServletComponent" />
> >>>>>>> 
> >>>>>>> <camelContext xmlns="http://camel.apache.org/schema/blueprint";>
> >>>>>>> <route>
> >>>>>>> <from uri="servlet://get?servletName=WEB2SFO" />
> >>>>>>> <setBody>
> >>>>>>> <constant>execution of /web2sfo/get</constant>
> >>>>>>> </setBody>
> >>>>>>> </route>
> >>>>>>> </camelContext>
> >>>>>>> 
> >>>>>>> </blueprint>
> >>>>>>> 
> >>>>>>> Here I could later on add a security definition that works well.

Reply via email to