Hi,
I see exactly same error when I do upgrade to cxf 2.4.0 in servicemix,
for me the error is caused by Bus refactor in 2.4.0, if you have
explicitly init a bus like
<bean id="cxf" class="org.apache.cxf.bus.CXFBusImpl">,
you should remove it and use <cxf:bus> instead.
Freeman
On 2011-5-11, at 上午10:19, Kevin McClusky wrote:
Hi,
I upgraded from 2.3.2 to 2.4, and I'm getting a
NullPointerException when I try to create a dynamic client.
Code:
DynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(wsdlUrl, service,
DynamicClientFactory.class.getClassLoader(), port);
stacktrace:
java.lang.NullPointerException
at
org
.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:
67)
at
org
.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:
84)
at org.apache.cxf.endpoint.ClientImpl.<init>(ClientImpl.java:152)
at
org
.apache
.cxf
.endpoint
.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:
255)
at
org
.apache
.cxf
.endpoint
.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:
198)
at
org
.apache
.cxf
.endpoint
.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:
191)
Line 67 in WSDLServiceFactory is:
definition =
getBus().getExtension(WSDLManager.class).getDefinition(wsdlUrl);
I tested, and getBus().getExtension(WSDLManager.class) is returning
null.
What's the proper way to make sure the bus has the extension
manager / is properly initialized? With 2.3.2, I didn't need to
worry about it, but it looks like I do with 2.4.0.
A little more information: I'm including my code in an application
that has a somewhat complex class loader hierarchy. It worked as-is
with 2.3.2. The class loader used to load the CXF jars should be
this class's classloader's parent.
Also, if I just write a POJO with a main method, and thow this in,
it *does not* give me the NPE; the NPE only comes from inside the
full application:
DynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Bus bus = CXFBusFactory.getThreadDefaultBus();
WSDLManager extension = bus.getExtension(WSDLManager.class);
Thank you,
Kevin
---------------------------------------------
Freeman Fang
FuseSource
Email:[email protected]
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
Connect at CamelOne May 24-26
The Open Source Integration Conference