Tadayoshi Sato created CAMEL-12873:
--------------------------------------
Summary: camel-servlet - Example for HttpRegistry no longer works
throwing FinalModifierException
Key: CAMEL-12873
URL: https://issues.apache.org/jira/browse/CAMEL-12873
Project: Camel
Issue Type: Bug
Components: camel-http-common, camel-servlet
Affects Versions: 2.22.1
Reporter: Tadayoshi Sato
Assignee: Tadayoshi Sato
Attachments: camel-example-servlet-httpregistry-blueprint.zip
There was a configuration example for {{HttpRegistry}}, which is introduced by
CAMEL-3549, under
{{tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/servlet/}}.
The test itself was removed probably because it depended on deprecated Spring
DM, but the use case CAMEL-3549, which is to use a CamelServlet instance across
OSGi bundles, exemplified by the test should be still valid and maintained.
However, with the latest Camel when deploying the attached example
({{camel-example-servlet-httpregistry-blueprint.zip}}) to Karaf it fails to
deploy throwing the following error:
{code}
2018-10-09T20:42:51,905 | ERROR | Blueprint Extender: 1 |
BlueprintContainerImpl | 52 - org.apache.aries.blueprint.core - 1.9.0
| Unable to start blueprint container for bundle camel-route.xml/0.0.0
org.osgi.service.blueprint.container.ComponentDefinitionException:
org.apache.aries.proxy.FinalModifierException: The methods protected final void
org.apache.camel.http.common.CamelServlet.service(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
throws javax.servlet.ServletException,java.io.IOException in class
javax.servlet.http.HttpServlet are final.
at
org.apache.aries.blueprint.container.ReferenceRecipe.internalCreate(ReferenceRecipe.java:141)
~[52:org.apache.aries.blueprint.core:1.9.0]
at
org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81)
~[52:org.apache.aries.blueprint.core:1.9.0]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:?]
at
org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90)
~[52:org.apache.aries.blueprint.core:1.9.0]
at
org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:360)
~[52:org.apache.aries.blueprint.core:1.9.0]
at
org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:190)
~[52:org.apache.aries.blueprint.core:1.9.0]
at
org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:716)
~[52:org.apache.aries.blueprint.core:1.9.0]
at
org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:413)
[52:org.apache.aries.blueprint.core:1.9.0]
at
org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:278)
[52:org.apache.aries.blueprint.core:1.9.0]
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
at
org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106)
[52:org.apache.aries.blueprint.core:1.9.0]
at
org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:45)
[52:org.apache.aries.blueprint.core:1.9.0]
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
[?:?]
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
[?:?]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[?:?]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[?:?]
at java.lang.Thread.run(Thread.java:748) [?:?]
Caused by: org.apache.aries.proxy.FinalModifierException: The methods protected
final void
org.apache.camel.http.common.CamelServlet.service(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
throws javax.servlet.ServletException,java.io.IOException in class
javax.servlet.http.HttpServlet are final.
at
org.apache.aries.proxy.impl.gen.ProxySubclassGenerator.scanForFinalModifiers(ProxySubclassGenerator.java:353)
~[?:?]
at
org.apache.aries.proxy.impl.gen.ProxySubclassGenerator.getProxySubclass(ProxySubclassGenerator.java:128)
~[?:?]
at
org.apache.aries.proxy.impl.gen.ProxySubclassGenerator.newProxySubclassInstance(ProxySubclassGenerator.java:171)
~[?:?]
at
org.apache.aries.proxy.impl.AsmProxyManager.createNewProxy(AsmProxyManager.java:140)
~[?:?]
at
org.apache.aries.proxy.impl.AbstractProxyManager.createDelegatingInterceptingProxy(AbstractProxyManager.java:77)
~[?:?]
at
org.apache.aries.proxy.impl.AbstractProxyManager.createDelegatingProxy(AbstractProxyManager.java:42)
~[?:?]
at
org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe.createProxy(AbstractServiceReferenceRecipe.java:332)
~[?:?]
at
org.apache.aries.blueprint.container.ReferenceRecipe.internalCreate(ReferenceRecipe.java:125)
~[?:?]
... 19 more
{code}
This is clearly because at some point in time {{CamelServlet.service()}} method
was marked as {{final}}. We should remove it to restore the use case.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)