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&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.