Note: This bug is displayed in read-only format because the product is no longer active in Red Hat Bugzilla.

Bug 1104693

Summary: Cannot use JAXB annotated exceptions in SY/Karaf
Product: [JBoss] JBoss Fuse Service Works 6 Reporter: Jiri Pechanec <jpechane>
Component: SwitchYardAssignee: Douglas Palmer <dpalmer>
Status: CLOSED UPSTREAM QA Contact: Matej Melko <mmelko>
Severity: high Docs Contact:
Priority: unspecified    
Version: 6.1.0CC: rcernich, soa-p-jira
Target Milestone: DR4   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2025-02-10 03:36:00 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Attachments:
Description Flags
Reproducer none

Description Jiri Pechanec 2014-06-04 13:53:44 UTC
Attached is modified QS transform-jaxb. The order service now can throw an exception. The exception is annotated with JAXB annotation.

When such a case is used in EAP it can be deployed. When it is deployed into SY in Fuse 6.1 it throws an exception during bundle start
15:46:36,630 | ERROR | yard Extender: 3 | SwitchYardExtender               | 437 - org.switchyard.karaf.switchyard-karaf-deploy - 2.0.0.Alpha1 | Unable to start switchyard for bundle org.switchyard.quickstarts.switchyard-transform-jaxb
org.switchyard.SwitchYardException: SWITCHYARD016837: Failed to create JAXBContext for 'java:org.switchyard.quickstarts.transform.jaxb.OrderAck'.
	at org.switchyard.transform.jaxb.internal.JAXBMarshalTransformer.<init>(JAXBMarshalTransformer.java:60)[432:org.switchyard.switchyard-transform:2.0.0.Alpha1]
	at org.switchyard.transform.jaxb.internal.JAXBTransformerFactory.newTransformer(JAXBTransformerFactory.java:56)[432:org.switchyard.switchyard-transform:2.0.0.Alpha1]
	at org.switchyard.transform.jaxb.internal.JAXBTransformerFactory.newTransformer(JAXBTransformerFactory.java:43)[432:org.switchyard.switchyard-transform:2.0.0.Alpha1]
	at org.switchyard.transform.internal.TransformerRegistryLoader.newTransformers(TransformerRegistryLoader.java:206)[432:org.switchyard.switchyard-transform:2.0.0.Alpha1]
	at org.switchyard.transform.internal.TransformerRegistryLoader.registerTransformers(TransformerRegistryLoader.java:88)[432:org.switchyard.switchyard-transform:2.0.0.Alpha1]
	at org.switchyard.deploy.internal.Deployment.registerTransformers(Deployment.java:270)[428:org.switchyard.switchyard-deploy:2.0.0.Alpha1]
	at org.switchyard.deploy.internal.Deployment.doInit(Deployment.java:117)[428:org.switchyard.switchyard-deploy:2.0.0.Alpha1]
	at org.switchyard.deploy.internal.AbstractDeployment.init(AbstractDeployment.java:139)[428:org.switchyard.switchyard-deploy:2.0.0.Alpha1]
	at org.switchyard.deploy.osgi.internal.SwitchYardContainerImpl.doStart(SwitchYardContainerImpl.java:291)[437:org.switchyard.karaf.switchyard-karaf-deploy:2.0.0.Alpha1]
	at org.switchyard.deploy.osgi.internal.SwitchYardContainerImpl.run(SwitchYardContainerImpl.java:136)[437:org.switchyard.karaf.switchyard-karaf-deploy:2.0.0.Alpha1]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)[:1.7.0_55]
	at java.util.concurrent.FutureTask.run(FutureTask.java:262)[:1.7.0_55]
	at org.switchyard.deploy.osgi.internal.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:117)[437:org.switchyard.karaf.switchyard-karaf-deploy:2.0.0.Alpha1]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)[:1.7.0_55]
	at java.util.concurrent.FutureTask.run(FutureTask.java:262)[:1.7.0_55]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)[:1.7.0_55]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)[:1.7.0_55]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[:1.7.0_55]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.7.0_55]
	at java.lang.Thread.run(Thread.java:744)[:1.7.0_55]
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
java.lang.StackTraceElement does not have a no-arg default constructor.
	this problem is related to the following location:
		at java.lang.StackTraceElement
		at public java.lang.StackTraceElement[] java.lang.Throwable.getStackTrace()
		at java.lang.Throwable
		at java.lang.Exception
		at org.switchyard.quickstarts.transform.jaxb.OrderException
		at public javax.xml.bind.JAXBElement org.switchyard.quickstarts.transform.jaxb.ObjectFactory.createOrderError(org.switchyard.quickstarts.transform.jaxb.OrderException)
		at org.switchyard.quickstarts.transform.jaxb.ObjectFactory

	at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:102)
	at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:472)
	at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:302)
	at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1140)
	at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:154)
	at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:121)
	at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:202)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.7.0_55]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)[:1.7.0_55]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_55]
	at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_55]
	at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:143)[:2.3.0.redhat-610379]
	at javax.xml.bind.ContextFinder.find(ContextFinder.java:310)[:2.3.0.redhat-610379]
	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:412)[:2.3.0.redhat-610379]
	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:375)[:2.3.0.redhat-610379]
	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:279)[:2.3.0.redhat-610379]
	at org.switchyard.transform.jaxb.internal.JAXBMarshalTransformer.<init>(JAXBMarshalTransformer.java:55)[432:org.switchyard.switchyard-transform:2.0.0.Alpha1]
	... 19 more

I'd say that this is a fairly common use case so it should be fixed.
There has to be either different version of JAXB or a more complex solution using JAXB Intorductions has to be put in place.

Comment 1 Jiri Pechanec 2014-06-04 13:55:25 UTC
Created attachment 902188 [details]
Reproducer

Comment 2 Tomas Rohovsky 2014-06-04 14:09:01 UTC
I tried to solve the problem with using of @XmlTransient annotation on inherited methods (getStackTrace, getCause) as described in https://java.net/jira/browse/JAXB-814. That didn't work.

Fuse contains JAXB 2.2.1.1_2. The bug was fixed in the later versions of JAXB (2.2.4u2, 2.2.5, 2.3). So, upgrade of the bundle Apache ServiceMix :: Bundles :: jaxb-impl may solve the issue.

Comment 3 Krishnanand 2014-07-07 12:08:35 UTC
Still facing the same issue, even after upgrading to JAXB 2.3.
Any further update ?

Comment 4 Rob Cernich 2014-09-02 16:29:47 UTC
(In reply to Krishnanand from comment #3)
> Still facing the same issue, even after upgrading to JAXB 2.3.
> Any further update ?

Did you add @XmlTransient, as documented in the JIRA?  Reading the JIRA, it seems that you need both @XmlTransient and a newer version of JAXB.

Comment 5 Rob Cernich 2014-10-21 17:48:42 UTC
Hey Doug, can you take a look at this please?  The fix may be a combination of changes to the reproducer application (adding @XmlTransient) and updating SY to use a newer version of JAXB.  Thanks in advance.

Comment 10 Red Hat Bugzilla 2025-02-10 03:36:00 UTC
This product has been discontinued or is no longer tracked in Red Hat Bugzilla.