I have missed one line in the second solution. Here again:

final ClassLoader cl = Thread.currentThread().getContextClassLoader();
try {
    
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
    jaxbContext = 
JAXBContext.newInstance("mil.army.security.ts3.jaxb.personnel");

} finally {
    Thread.currentThread().setContextClassLoader(cl);
}


Regards
Krzysztof

On 03.03.2015 20:50, Krzysztof Sobkowiak wrote:
> Hi Gang
>
> Sometimes theory is not enough. I had to create a small project. One solution 
> which worked for me was following line
>
> jaxbContext = JAXBContext.newInstance("mil.army.security.ts3.jaxb.personnel", 
> this.getClass().getClassLoader());
>
> Another one which worked for me was setting if the context class loader
>
> try {
>   
> Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
>   jaxbContext = 
> JAXBContext.newInstance("mil.army.security.ts3.jaxb.personnel");
> } finally {
>    Thread.currentThread().setContextClassLoader(cl);
> }
>
> This ensures the JAXBContext uses the class loader of your bundle to 
> instantiate the JAXB Context. In this way your
> classes are visible for the JAXBContext.
>
> Please try these solutions. I have attached my sample project. I have made 
> them from one of the cxf samples and it con
> have too many unnecessary dependencies. Feel free to play with this.
>
> Regards
> Krzysztof
>
>
> On 03.03.2015 16:13, Yang, Gang CTR USARMY (US) wrote:
>> Hi, Krzysztof,
>>
>>
>>
>> Thanks for the response. I've tried this configuration thinking to make the 
>> JAXB package also visible to the outside and I just tried it again now. It 
>> did not work.
>>
>>
>>
>> Gang
>>
>> ________________________________
>> From: Krzysztof Sobkowiak [[email protected]]
>> Sent: Monday, March 02, 2015 6:01 PM
>> To: [email protected]
>> Subject: Re: Simple JAXB client doesn't work in ServiceMix
>>
>> Hi
>>
>> Could you try following definition for export packages?
>>
>> <Export-Package>
>>     mil.army.security.ts3.jaxb.*
>> </Export-Package>
>>
>>
>> or
>>
>> <Export-Package>
>>     mil.army.security.ts3.jaxb.personnel
>> </Export-Package>
>>
>>
>>
>>
>> Regards
>> Krzysztof
>>
>>
>> On 02.03.2015 23:20, Yang, Gang CTR USARMY (US) wrote:
>>>
>>> Hi,
>>>
>>>
>>>
>>> I had a post for help on JAXB not working in ServiceMix earlier. But that 
>>> configuration was quite complex. I now simplified it to a simple JAXB 
>>> client bundle (no longer embedded/wrapped). It has a single class, Person, 
>>> which is annotated with @XmlRootElement and a jaxb.index resource file that 
>>> contains a single line of the class name "Person".  The JAXB client code 
>>> simply calls JAXBContext.newInstance("package") to get the JAXB context in 
>>> the constructor. A blueprint deployment descriptor simply defines the JAXB 
>>> client as a bean. I deployed it into the ServiceMix and the bean creation 
>>> causes the  "package doesnt contain ObjectFactory.class or jaxb.index" 
>>> exception from the call to the JAXBContext.newInstance(). Here's the 
>>> details about the code. Hope someone can spot what's missing:
>>>
>>>
>>>
>>> The Person class:
>>>
>>>
>>>
>>> package
>>>
>>> mil.army.security.ts3.jaxb.personnel;
>>>
>>>
>>>
>>> import
>>>
>>> javax.xml.bind.annotation.XmlRootElement;
>>>
>>>
>>>
>>> @XmlRootElement
>>>
>>> public
>>>
>>> class
>>>
>>> Person {
>>>
>>>     private int customerNumber
>>>
>>> ;
>>>
>>>     ...
>>>
>>>
>>>
>>>    // getters and setters
>>>
>>>    ......
>>>
>>>  }
>>>
>>>
>>>
>>>
>>>
>>> The JAXB client code:
>>>
>>>
>>>
>>> package mil.army.security.ts3.jaxb;
>>>
>>>
>>>
>>> import java.io.ByteArrayInputStream;
>>>
>>> import java.io.ByteArrayOutputStream;
>>>
>>> import java.io.InputStream;
>>>
>>> import javax.xml.bind.JAXBContext;
>>>
>>> import javax.xml.bind.JAXBException;
>>>
>>> import javax.xml.bind.Marshaller;
>>>
>>> import javax.xml.bind.Unmarshaller;
>>>
>>> import mil.army.security.ts3.jaxb.personnel.Person;
>>>
>>>
>>>
>>> public class PersonTransformer {
>>>
>>>     JAXBContext jaxbContext = null;
>>>
>>>     Marshaller marshaller = null;
>>>
>>>     Unmarshaller unmarshaller = null;
>>>
>>>     public PersonTransformer() {
>>>
>>>         try {
>>>
>>>             jaxbContext = 
>>> JAXBContext.newInstance("mil.army.security.ts3.jaxb.personnel");
>>>
>>>             marshaller = jaxbContext.createMarshaller();
>>>
>>>             unmarshaller = jaxbContext.createUnmarshaller();
>>>
>>>         }
>>>
>>>         catch (JAXBException jaxbE) {
>>>
>>>             System.err.println("PersonTransformer.PersonTransformer(): 
>>> JAXBException: " + jaxbE);
>>>
>>>             jaxbE.printStackTrace();
>>>
>>>         }
>>>
>>>     }
>>>
>>> }
>>>
>>>
>>>
>>> The blueprint deployment descriptor:
>>>
>>>
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>>
>>> <blueprint
>>>
>>>         xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
>>>
>>>         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>>
>>>         xmlns:jaxws="http://cxf.apache.org/blueprint/jaxws";
>>>
>>>         
>>> xsi:schemaLocation="<thismessage:/>http://www.osgi.org/xmlns/blueprint/v1.0.0
>>>
>>>                     http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
>>>
>>>                     http://cxf.apache.org/blueprint/jaxws 
>>> http://cxf.apache.org/schemas/blueprint/jaxws.xsd";>
>>>
>>>     <bean id="jaxbTransformer" 
>>> class="mil.army.security.ts3.jaxb.PersonTransformer"/>
>>>
>>> </blueprint>
>>>
>>>
>>>
>>>
>>>
>>> The bundle is built with maven-bundle-plugin using the following imports 
>>> and exports:
>>>
>>>
>>>
>>> <Import-Package>
>>>
>>>     org.osgi.service.blueprint,
>>>
>>>     javax.xml.bind,
>>>
>>>     javax.xml.bind.annotation
>>>
>>> </Import-Package>
>>>
>>> <Export-Package>
>>>
>>>     mil.army.security.ts3.jaxb
>>>
>>> </Export-Package>
>>>
>>>
>>>
>>>
>>>
>>> To me, it's such a simple JAXB client that should've had every thing that 
>>> runtime needs to run it. Unfortunately it failed in ServiceMix. The 
>>> stacktrace is at the end of this email. Would appreciate help and 
>>> suggestions.
>>>
>>>
>>>
>>> Thanks,
>>>
>>> Gang
>>>
>>>
>>>
>>> ------------------
>>>
>>> Stacktrace:
>>>
>>>
>>>
>>> karaf@root<mailto:karaf@root>> PersonTransformer.PersonTransformer(): 
>>> JAXBException: javax.xml.bind.JAXBException: "mil.army.security.ts3.j
>>> axb.personnel" doesnt contain ObjectFactory.class or jaxb.index
>>> javax.xml.bind.JAXBException: "mil.army.security.ts3.jaxb.personnel" doesnt 
>>> contain ObjectFactory.class or jaxb.index
>>>         at 
>>> com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:197)
>>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>         at 
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>>>         at 
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>         at java.lang.reflect.Method.invoke(Method.java:483)
>>>         at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:143)
>>>         at javax.xml.bind.ContextFinder.find(ContextFinder.java:310)
>>>         at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:446)
>>>         at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:409)
>>>         at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:313)
>>>         at 
>>> mil.army.security.ts3.jaxb.PersonTransformer.<init>(PersonTransformer.java:21)
>>>         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 
>>> Method)
>>>         at 
>>> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
>>>         at 
>>> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>>>         at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
>>>         at 
>>> org.apache.aries.blueprint.utils.ReflectionUtils.newInstance(ReflectionUtils.java:329)
>>>         at 
>>> org.apache.aries.blueprint.container.BeanRecipe.newInstance(BeanRecipe.java:962)
>>>         at 
>>> org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:331)
>>>         at 
>>> org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:806)
>>>         at 
>>> org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)
>>>         at 
>>> org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)
>>>         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>>>         at 
>>> org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)
>>>         at 
>>> org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:245)
>>>         at 
>>> org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:183)
>>>         at 
>>> org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl
>>> .java:681)
>>>         at 
>>> org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:378)
>>>         at 
>>> org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:269)
>>>         at 
>>> org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:276)
>>>         at 
>>> org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:245)
>>>         at 
>>> org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:235)
>>>         at 
>>> org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker
>>> .java:500)
>>>         at 
>>> org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker
>>> .java:433)
>>>         at 
>>> org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java
>>> :725)
>>>         at 
>>> org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java
>>> :463)
>>>         at 
>>> org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java
>>> :422)
>>>         at 
>>> org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1127)
>>>         at 
>>> org.apache.felix.framework.util.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:696)
>>>         at 
>>> org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:484)
>>>         at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4429)
>>>         at org.apache.felix.framework.Felix.startBundle(Felix.java:2100)
>>>         at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:976)
>>>         at 
>>> org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1245)
>>>         at 
>>> org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1217)
>>>         at 
>>> org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:509)
>>>         at 
>>> org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:358)
>>>         at 
>>> org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:310)
>>>

-- 
Krzysztof Sobkowiak

JEE & OSS Architect
Senior Solution Architect @ Capgemini SSC <http://www.pl.capgemini-sdm.com/en>
Apache ServiceMix <http://servicemix.apache.org/> Committer & PMC

Reply via email to