I think the problem might be that the JAXbContext uses the wrong classloader.

Can you try to give the JAXBContext the classloader that has access to the Person class?

Bundle bundle = bundleContext.getBundle();
BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
ClassLoader classLoader = bundleWiring.getClassLoader();
jaxbContext = JAXBContext.newInstance("mil.army.security.ts3.jaxb.personnel", classloader);

Another thing you could try is to specify the classes directly. This completely avoids issues with the classloader:
jaxbContext = JAXBContext.newInstance(Person.class);


Christian


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 [krzys.sobkow...@gmail.com]
Sent: Monday, March 02, 2015 6:01 PM
To: users@servicemix.apache.org
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



--
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
http://www.talend.com

Reply via email to