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.