This sounds like the jdk version of the jaxb impl is used instead of the
cxf one.
Can you try to make sure that you start the jaxb api and impl bundles at
a lower level than cxf?
Christian
On 06.03.2014 15:53, NCorbet wrote:
Hello all,
I am using CXFDosgi 1.4 ( 2.7.2 ) and Java 1.7.0_21.
I have a Junit test that contains the following code in the setUp() method:
ProxyClassLoader classLoader = new
ProxyClassLoader();
classLoader.addLoader(AdminService.class.getClassLoader());
classLoader.addLoader(JAXRSClientFactoryBean.class.getClassLoader());
JSONProvider jsonProvider = new JSONProvider ();
jsonProvider.setSingleJaxbContext(true);
jsonProvider.setMarshallAsJaxbElement(true);
jsonProvider.setUnmarshallAsJaxbElement(true);
Map<String, String> map = new HashMap<String, String>
();
map.put ( "http://www.syntech.com", "something" );
jsonProvider.setNamespaceMap(map);
JAXRSClientFactoryBean jaxRSBean = new
JAXRSClientFactoryBean();
jaxRSBean.setAddress(baseUrl + "AdminService");
jaxRSBean.setClassLoader(classLoader);
jaxRSBean.setProvider(jsonProvider);
jaxRSBean.setServiceClass(AdminService.class);
jaxRSBean.setUsername(USERNAME);
jaxRSBean.setPassword(PASSWORD);
jaxRSBean.getOutInterceptors().add(new
LoggingOutInterceptor());
jaxRSBean.getInInterceptors().add(new
LoggingInInterceptor());
adminService = jaxRSBean.create(AdminService.class,new
Object());
appRole = new ApplicationRole();
appRole.setId("TestApplicationRoleId");
appRole.setCreatedBy("TestCase");
appRole.setName("Fleet Manager");
appRole.setDesc("Fleet Manager");
appRole.setCreatedTime(new Date());
adminService.saveApplicationRole(appRole);
When running from Eclipse ( select unit test, Debug As, Junit Test ), my
test connects to the remote and processes fine. My Test passes. No Problems.
When I run my test from maven ( I am using Tycho Surefire Plugin
integration-test goal), my test does not run and contains the following
failure ( cause highlighted in bold ):
*java.lang.NoClassDefFoundError:
com/sun/xml/bind/marshaller/NamespacePrefixMapper*
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
at
org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClassHoldingLock(ClasspathManager.java:638)
at
org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:613)
at
org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:574)
at
org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:492)
at
org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:465)
at
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
at
org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)
at
org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35)
at
org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:452)
at
org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
at
org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
at
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at
org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.setNamespaceMapper(AbstractJAXBProvider.java:142)
at
org.apache.cxf.jaxrs.provider.json.JSONProvider.marshal(JSONProvider.java:523)
at
org.apache.cxf.jaxrs.provider.json.JSONProvider.writeTo(JSONProvider.java:367)
at
org.apache.cxf.jaxrs.utils.JAXRSUtils.writeMessageBody(JAXRSUtils.java:1221)
at
org.apache.cxf.jaxrs.client.AbstractClient.writeBody(AbstractClient.java:399)
at
org.apache.cxf.jaxrs.client.ClientProxyImpl$BodyWriter.doWriteBody(ClientProxyImpl.java:636)
at
org.apache.cxf.jaxrs.client.AbstractClient$AbstractBodyWriter.handleMessage(AbstractClient.java:976)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
at
org.apache.cxf.jaxrs.client.AbstractClient.doRunInterceptorChain(AbstractClient.java:581)
at
org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:542)
at
org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:205)
at com.sun.proxy.$Proxy21.saveApplicationRole(Unknown Source)
at
org.syntech.ambassador.server.fuelmaster.services.integrationtest.AdminServiceTest.setUp(AdminServiceTest.java:72)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.junit.runners.Suite.runChild(Suite.java:127)
at org.junit.runners.Suite.runChild(Suite.java:26)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at
org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
at
org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
at
org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at
org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
at
org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
at
org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
at
org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:123)
at
org.eclipse.tycho.surefire.osgibooter.OsgiSurefireBooter.run(OsgiSurefireBooter.java:85)
at
org.eclipse.tycho.surefire.osgibooter.HeadlessTestApplication.run(HeadlessTestApplication.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at
org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587)
at
org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198)
at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
*Caused by: java.lang.ClassNotFoundException:
com.sun.xml.bind.marshaller.NamespacePrefixMapper cannot be found by
org.apache.cxf.cxf-api_2.7.2*
at
org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
at
org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
at
org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
at
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
I have com.sun.xml.bind.marshaller as an imported package in my bundle.
As for my bundle start levels in my Tycho Test definition, so far I have the
following start levels defined:
<bundleStartLevel>
<bundle>
<id>org.apache.servicemix.specs.jsr339-api-m10</id>
<level>1</level>
<autoStart>true</autoStart>
</bundle>
<bundle>
<id>org.apache.cxf.cxf-rt-core</id>
<level>2</level>
<autoStart>true</autoStart>
</bundle>
<bundle>
<id>org.apache.cxf.cxf-rt-transports-http</id>
<level>2</level>
<autoStart>true</autoStart>
</bundle>
<bundle>
<id>org.apache.servicemix.bundles.jaxb-impl</id>
<level>4</level>
<autoStart>true</autoStart>
</bundle>
</bundleStartLevel>
Is there something obvious that I am missing?
Thanks in advance,
Neil
--
View this message in context:
http://cxf.547215.n5.nabble.com/CXFDOSGI-1-4-JAXRSClientFactoryBean-and-NamespacePrefixMapper-Exception-tp5740931.html
Sent from the cxf-user mailing list archive at Nabble.com.
--
Christian Schneider
http://www.liquid-reality.de
Open Source Architect
http://www.talend.com