Hi,

I am having a problem with a Camel route in Karaf used for JAXB unmarshalling. 
The route reads an XML file and searches for specific XML elements "<BKPF>" 
with Stax.
When such an XML element is found, JAXB is used for mapping it to a Java object.

With Camel 3.11.0 the route was working. After upgrading to Camel 3.14.1 the 
route throws a CamelExecutionException.
The important point is, that this CamelExecutionException *only* occurs, when 
the feature camel-cxf is installed as well.
This fact has given me a headache while trying to pinpoint the problem, but the 
Exception can be reproduced with Karaf 4.3.2 and 4.3.6.

I tried the following setups, each starting with a completely new vanilla Karaf 
and a simple bundle written only for debugging this issue:

Karaf 4.3.2
Setup 1: feature:repo-add camel 3.11.0; feature:install camel-blueprint 
camel-quartz => working
Setup 2: feature:repo-add camel 3.11.0; feature:install camel-blueprint 
camel-quartz; feature:repo-add cxf 3.4.0; feature:install camel-cxf => working
Setup 3: feature:repo-add camel 3.14.1; feature:install camel-blueprint 
camel-quartz => working
Setup 4: feature:repo-add camel 3.14.1; feature:install camel-blueprint 
camel-quartz camel-cxf => CamelExecutionException

Karaf 4.3.6
Setup 5: feature:repo-add camel 3.11.0; feature:install camel-blueprint 
camel-quartz => working
Setup 6: feature:repo-add camel 3.11.0; feature:install camel-blueprint 
camel-quartz; feature:repo-add cxf 3.4.0; feature:install camel-cxf => working
Setup 7: feature:repo-add camel 3.14.1; feature:install camel-blueprint 
camel-quartz => working
Setup 8: feature:repo-add camel 3.14.1; feature:install camel-blueprint 
camel-quartz camel-cxf => CamelExecutionException

Some additional remarks:
In Setups 2 and 6, some CXF bundles are automatically installed as versions 
3.4.0 *and* 4.0.0.SNAPSHOT. I manually removed the 4.0.0.SNAPSHOT bundles 
before testing the route.
In Setups 4 and 8, it is not necessary to add a feature repo for CXF, because 
it is included in the camel 3.14.1 feature descriptor (for CXF version 3.4.0). 

Summing it up:
- When using Camel 3.11.0 it is working with both Karaf 4.3.2 and Karaf 4.3.6 - 
the presence of the feature camel-cxf has no influence.
- When using Camel 3.14.1 it is working with both Karaf 4.3.2 and Karaf 4.3.6 - 
but only as long as I don't have the feature camel-cxf installed.
- The feature camel-cxf installs bundles for CXF 3.4.0 in all setups (either 
because I manually add that specific CXF feature repo or because it is included 
in the camel feature descriptor)

I am now at my wits' end and don't know, how to proceed/debug further. I need 
camel-cxf for other bundles that will be deployed in the same karaf instance.

The CamelExecutionException occurs in my bundle when unmarshalling the XML 
element BKPF from xmlEventReader:

if(xmlEventReader.peek().isStartElement()
  && 
xmlEventReader.peek().asStartElement().getName().getLocalPart().equals("BKPF")) 
{
BKPF bkpf = (BKPF) unmarshaller.unmarshal(xmlEventReader);
...

The CamelExecutionException does not seem to give any helpful information. It 
seems to be caused by a java.lang.NoSuchMethodError.
When setting logging to trace, this is what I see:

2022-02-18T09:42:53,451 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
BeanInfo                         | 63 - org.apache.camel.camel-bean - 3.14.1 | 
Chosen method to invoke: public void de.janschulze.jaxbtest.TestBean.test() 
throws java.lang.Exception on bean: de.janschulze.jaxbtest.TestBean@5b23a865
2022-02-18T09:42:53,451 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
MethodInfo                       | 63 - org.apache.camel.camel-bean - 3.14.1 | 
>>>> invoking: public void de.janschulze.jaxbtest.TestBean.test() throws 
java.lang.Exception on bean: de.janschulze.jaxbtest.TestBean@5b23a865 with 
arguments: null for exchange: Exchange[F6AF588CBDB8D3D-0000000000000002]
2022-02-18T09:42:53,451 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
BundleDelegatingClassLoader      | 110 - org.apache.camel.karaf.camel-core-osgi 
- 3.14.1 | FindResource: META-INF/services/javax.xml.bind.JAXBContextFactory
2022-02-18T09:42:53,459 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
RedeliveryErrorHandler           | 72 - org.apache.camel.camel-core-processor - 
3.14.1 | Is exchangeId: F6AF588CBDB8D3D-0000000000000002 done? false
2022-02-18T09:42:53,460 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
DefaultReactiveExecutor          | 62 - org.apache.camel.camel-base-engine - 
3.14.1 | Schedule [first=false, main=false, sync=false]: RedeliveryTask
2022-02-18T09:42:53,460 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
DefaultReactiveExecutor          | 62 - org.apache.camel.camel-base-engine - 
3.14.1 | Queuing reactive work: RedeliveryTask
2022-02-18T09:42:53,460 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
DefaultReactiveExecutor          | 62 - org.apache.camel.camel-base-engine - 
3.14.1 | Worker #3 running: RedeliveryTask
2022-02-18T09:42:53,460 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
DefaultExceptionPolicyStrategy   | 72 - org.apache.camel.camel-core-processor - 
3.14.1 | Finding best suited exception policy for thrown exception 
java.lang.NoSuchMethodError
2022-02-18T09:42:53,461 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
DefaultExceptionPolicyStrategy   | 72 - org.apache.camel.camel-core-processor - 
3.14.1 | Finding best suited exception policy for thrown exception 
org.apache.camel.CamelExecutionException
2022-02-18T09:42:53,461 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
DefaultExceptionPolicyStrategy   | 72 - org.apache.camel.camel-core-processor - 
3.14.1 | Finding best suited exception policy for thrown exception 
java.lang.NoSuchMethodError
2022-02-18T09:42:53,461 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
DefaultExceptionPolicyStrategy   | 72 - org.apache.camel.camel-core-processor - 
3.14.1 | Finding best suited exception policy for thrown exception 
org.apache.camel.CamelExecutionException
2022-02-18T09:42:53,462 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
DefaultExceptionPolicyStrategy   | 72 - org.apache.camel.camel-core-processor - 
3.14.1 | Adding ExceptionPolicyKey[route: <global>, class 
org.apache.camel.CamelExecutionException] as candidate at level 0
2022-02-18T09:42:53,462 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
DefaultExceptionPolicyStrategy   | 72 - org.apache.camel.camel-core-processor - 
3.14.1 | Exact match found for candidate: ExceptionPolicyKey[route: <global>, 
class org.apache.camel.CamelExecutionException]
2022-02-18T09:42:53,462 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
DefaultExceptionPolicyStrategy   | 72 - org.apache.camel.camel-core-processor - 
3.14.1 | Found 1 candidates
2022-02-18T09:42:53,462 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
CoreTypeConverterRegistry        | 61 - org.apache.camel.camel-base - 3.14.1 | 
Finding type converter to convert java.lang.String -> java.lang.Integer with 
value: 0
2022-02-18T09:42:53,462 | TRACE | Camel (jaxbtest) thread #4 - timer://jaxb | 
CoreTypeConverterRegistry        | 61 - org.apache.camel.camel-base - 3.14.1 | 
Using bulk converter: CamelBaseBulkConverterLoader to convert [class 
java.lang.String=>class java.lang.Integer]
2022-02-18T09:42:53,463 | DEBUG | Camel (jaxbtest) thread #4 - timer://jaxb | 
DefaultErrorHandler              | 72 - org.apache.camel.camel-core-processor - 
3.14.1 | Failed delivery for (MessageId: F6AF588CBDB8D3D-0000000000000002 on 
ExchangeId: F6AF588CBDB8D3D-0000000000000002). On delivery attempt: 0 caught: 
org.apache.camel.CamelExecutionException: Exception occurred during execution 
on the exchange: Exchange[F6AF588CBDB8D3D-0000000000000002]


Can anyone help with some suggestions?


Kind Regards
-- 
Jan Schulze

Reply via email to