You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by JT <ka...@avionicengineers.com> on 2017/11/12 19:58:09 UTC
Configuring Two Contexts in Camel Blueprint - how to set
ServletComponent 'servletName' property
Hi,
I am trying to create two independent Camel Contexts with Camel blueprint (as two separate bundles) that will be deployed into the same OSGi container, exactly the same as described here:
https://stackoverflow.com/questions/40271292/duplicate-servletname-detected-in-apache-camel-blueprint-based-osgi-bundles
I also have encountered the same issue as described in that question, namely that the two CamelHttpTransportServlet instances are created with the same default name of 'CamelServlet'. The obvious solution is to set the servletName as a property to OsgiServletRegisterer however this then results in a HTTP 404 error when one of the URLs is called.
I've traced it down to the ServletComponent class. It has a 'servletName' property that is set to 'CamelServlet' by default thus is registered in HttpRegistry under a different name to that specified to the OsgiServletRegisterer. I've verified this by debugging around the creation of Servletcomponent and manually setting the same setting name - I no longer get the 404 error.
The solution seems to therefore be to configure the servletName on the ServletComponent but I cannot find anyway to do this. I've referred to:
http://camel.apache.org/servlet.html
where it describes a 'servletName' option but cannot specify this in my blueprint XML file, eg the '<restConfiguation>' tag doesn't take such an attribute nor can I specify it as a property.
Is there a way, using the blueprint XML I can specify the 'servletName'?
Thanks, Kerry
Re: Configuring Two Contexts in Camel Blueprint - how to set
ServletComponent 'servletName' property
Posted by Claus Ibsen <cl...@gmail.com>.
Hi
Ah that is because they are ordered, eg as specified here in the model class
https://github.com/apache/camel/blob/master/camel-core/src/main/java/org/apache/camel/model/rest/RestConfigurationDefinition.java
Btw you ought also to be able to set the servletName on the
component-level as well via the componentProperty. But in this case it
doesn't matter very much either it was configured via rest-dsl.
On Mon, Nov 13, 2017 at 6:36 PM, <ka...@avionicengineers.com> wrote:
> Hi Claus,
>
> Thanks for your reply. Currently I don't explicitly instantiate the
> ServletComponent either by DSL or code but have been relying on 'Camel
> Magic' to do this for me, is it recommended that I explicitly create the
> component?
>
> I also discovered this solution to my problem. Use this:
>
> <restConfiguration component="servlet" bindingMode="json"
> contextPath="/camel-example-servlet-rest-blueprint/rest"
> port="8181">
> <endpointProperty key="servletName" value="timeServlet" />
> <dataFormatProperty key="prettyPrint" value="true"/>
> </restConfiguration>
>
> Instead of this:
>
> <restConfiguration component="servlet" bindingMode="json"
> contextPath="/camel-example-servlet-rest-blueprint/rest"
> port="8181">
> <dataFormatProperty key="prettyPrint" value="true"/>
> <endpointProperty key="servletName" value="timeServlet" />
> </restConfiguration>
>
>
> The crucial difference being the placement of <endpointProperty> before the
> <dataFormatProperty> tag.
>
> Kerry
>
>
> On 13/11/17 07:35, Claus Ibsen wrote:
>>
>> Hi
>>
>> Configure it as a <bean id="servlet" class="...ServletComponent">
>> where you can set the servlet name as a property
>>
>> On Sun, Nov 12, 2017 at 8:58 PM, JT <ka...@avionicengineers.com>
>> wrote:
>>>
>>> Hi,
>>>
>>> I am trying to create two independent Camel Contexts with Camel blueprint
>>> (as two separate bundles) that will be deployed into the same OSGi
>>> container, exactly the same as described here:
>>>
>>>
>>> https://stackoverflow.com/questions/40271292/duplicate-servletname-detected-in-apache-camel-blueprint-based-osgi-bundles
>>>
>>> I also have encountered the same issue as described in that question,
>>> namely
>>> that the two CamelHttpTransportServlet instances are created with the
>>> same
>>> default name of 'CamelServlet'. The obvious solution is to set the
>>> servletName as a property to OsgiServletRegisterer however this then
>>> results
>>> in a HTTP 404 error when one of the URLs is called.
>>>
>>> I've traced it down to the ServletComponent class. It has a 'servletName'
>>> property that is set to 'CamelServlet' by default thus is registered in
>>> HttpRegistry under a different name to that specified to the
>>> OsgiServletRegisterer. I've verified this by debugging around the
>>> creation
>>> of Servletcomponent and manually setting the same setting name - I no
>>> longer
>>> get the 404 error.
>>>
>>> The solution seems to therefore be to configure the servletName on the
>>> ServletComponent but I cannot find anyway to do this. I've referred to:
>>>
>>> http://camel.apache.org/servlet.html
>>>
>>> where it describes a 'servletName' option but cannot specify this in my
>>> blueprint XML file, eg the '<restConfiguation>' tag doesn't take such an
>>> attribute nor can I specify it as a property.
>>>
>>> Is there a way, using the blueprint XML I can specify the 'servletName'?
>>>
>>> Thanks, Kerry
>>>
>>
>>
>
--
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2
Re: Configuring Two Contexts in Camel Blueprint - how to set
ServletComponent 'servletName' property
Posted by ka...@avionicengineers.com.
Hi Claus,
Thanks for your reply. Currently I don't explicitly instantiate the ServletComponent either by DSL or code but have been relying on 'Camel Magic' to do this for me, is it recommended that I explicitly create the component?
I also discovered this solution to my problem. Use this:
<restConfiguration component="servlet" bindingMode="json"
contextPath="/camel-example-servlet-rest-blueprint/rest"
port="8181">
<endpointProperty key="servletName" value="timeServlet" />
<dataFormatProperty key="prettyPrint" value="true"/>
</restConfiguration>
Instead of this:
<restConfiguration component="servlet" bindingMode="json"
contextPath="/camel-example-servlet-rest-blueprint/rest"
port="8181">
<dataFormatProperty key="prettyPrint" value="true"/>
<endpointProperty key="servletName" value="timeServlet" />
</restConfiguration>
The crucial difference being the placement of <endpointProperty> before the <dataFormatProperty> tag.
Kerry
On 13/11/17 07:35, Claus Ibsen wrote:
> Hi
>
> Configure it as a <bean id="servlet" class="...ServletComponent">
> where you can set the servlet name as a property
>
> On Sun, Nov 12, 2017 at 8:58 PM, JT <ka...@avionicengineers.com> wrote:
>> Hi,
>>
>> I am trying to create two independent Camel Contexts with Camel blueprint
>> (as two separate bundles) that will be deployed into the same OSGi
>> container, exactly the same as described here:
>>
>> https://stackoverflow.com/questions/40271292/duplicate-servletname-detected-in-apache-camel-blueprint-based-osgi-bundles
>>
>> I also have encountered the same issue as described in that question, namely
>> that the two CamelHttpTransportServlet instances are created with the same
>> default name of 'CamelServlet'. The obvious solution is to set the
>> servletName as a property to OsgiServletRegisterer however this then results
>> in a HTTP 404 error when one of the URLs is called.
>>
>> I've traced it down to the ServletComponent class. It has a 'servletName'
>> property that is set to 'CamelServlet' by default thus is registered in
>> HttpRegistry under a different name to that specified to the
>> OsgiServletRegisterer. I've verified this by debugging around the creation
>> of Servletcomponent and manually setting the same setting name - I no longer
>> get the 404 error.
>>
>> The solution seems to therefore be to configure the servletName on the
>> ServletComponent but I cannot find anyway to do this. I've referred to:
>>
>> http://camel.apache.org/servlet.html
>>
>> where it describes a 'servletName' option but cannot specify this in my
>> blueprint XML file, eg the '<restConfiguation>' tag doesn't take such an
>> attribute nor can I specify it as a property.
>>
>> Is there a way, using the blueprint XML I can specify the 'servletName'?
>>
>> Thanks, Kerry
>>
>
>
Re: Configuring Two Contexts in Camel Blueprint - how to set
ServletComponent 'servletName' property
Posted by Claus Ibsen <cl...@gmail.com>.
Hi
Configure it as a <bean id="servlet" class="...ServletComponent">
where you can set the servlet name as a property
On Sun, Nov 12, 2017 at 8:58 PM, JT <ka...@avionicengineers.com> wrote:
> Hi,
>
> I am trying to create two independent Camel Contexts with Camel blueprint
> (as two separate bundles) that will be deployed into the same OSGi
> container, exactly the same as described here:
>
> https://stackoverflow.com/questions/40271292/duplicate-servletname-detected-in-apache-camel-blueprint-based-osgi-bundles
>
> I also have encountered the same issue as described in that question, namely
> that the two CamelHttpTransportServlet instances are created with the same
> default name of 'CamelServlet'. The obvious solution is to set the
> servletName as a property to OsgiServletRegisterer however this then results
> in a HTTP 404 error when one of the URLs is called.
>
> I've traced it down to the ServletComponent class. It has a 'servletName'
> property that is set to 'CamelServlet' by default thus is registered in
> HttpRegistry under a different name to that specified to the
> OsgiServletRegisterer. I've verified this by debugging around the creation
> of Servletcomponent and manually setting the same setting name - I no longer
> get the 404 error.
>
> The solution seems to therefore be to configure the servletName on the
> ServletComponent but I cannot find anyway to do this. I've referred to:
>
> http://camel.apache.org/servlet.html
>
> where it describes a 'servletName' option but cannot specify this in my
> blueprint XML file, eg the '<restConfiguation>' tag doesn't take such an
> attribute nor can I specify it as a property.
>
> Is there a way, using the blueprint XML I can specify the 'servletName'?
>
> Thanks, Kerry
>
--
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2