I'm not sure what the problem is (telling us what type of values you're
placing in for wsdlLocation may help -- IIRC it needs to be an absolute
path, and I don't believe you can use a classpath: prefix either), Are
you using embedded Jetty or standalone Jetty -- for the latter, you can
just create a WAR
(http://www.jroller.com/gmazza/entry/web_service_tutorial) which should
be simpler and more robust anyway.
If you can store the WSDL outside of the JAR, and make a hardcoded
reference to it from the Service class within the JAR, that might work,
at least as an interim step before trying with the WSDL in the JAR.
HTH,
Glen
On 10/28/2011 07:20 AM, Hugo Terelle wrote:
Hi,
With cxf 2.4.2 and 2.4.3, I catch the following exception :
2011-10-28 13:06:34,830 INFO [ReflectionServiceFactoryBean] Creating
Service {http://www.onvif.org/ver10/device/wsdl}DeviceService from
WSDL:
jar:file:/home/terelle/onvif/onvif-srv-0.1-jar-with-dependencies.jar!/META-INF/wsdl/devicemgmt.wsdl
Exception in thread "main" javax.xml.ws.WebServiceException:
java.lang.NullPointerException
at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:350)
at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:239)
at eu.acic.onvif.NVTServer.<init>(NVTServer.java:81)
at eu.acic.onvif.NVTServer.main(NVTServer.java:127)
Caused by: java.lang.NullPointerException
at
org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:92)
at
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromWSDL(ReflectionServiceFactoryBean.java:369)
at
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:505)
at
org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:241)
at
org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:202)
at
org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:101)
at
org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:157)
at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:202)
at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:433)
at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:322)
I'm catching this exception when I do the following instruction:
DevicePortTypeImpl deviceImplementor = new DevicePortTypeImpl();
String serviceAddress = "http://0.0.0.0:8080/onvif/device_service";
EndpointImpl epDevice = (EndpointImpl) Endpoint.create(serviceAddress,
deviceImplementor);
epDevice.publish(serviceAddress);
OR with
DevicePortTypeImpl deviceImplementor = new DevicePortTypeImpl();
String serviceAddress = "http://0.0.0.0:8080/onvif/device_service";
EndpointImpl epDevice = (EndpointImpl)
Endpoint.publish(serviceAddress, deviceImplementor);
The Java code was generated from a WSDL with cxf-codegen-plugin
(wsdl2java) and I just changed the wsdlLocation annotation in the
"DevicePortTypeImpl" class.
My big problem is that it was always working under Eclipse, and now
that I have to deploy a standalone JAR (built with mvn assembly:single
instruction), it doesn't work...
Even worst, I can put what I want as path in the wsdlLocation
annotation, it's always working under Eclipse... And I can't deploy
Eclipse on my customer system :)
For information, I use Jetty, nothing with JBoss, Glassfish and so on.
It's a standalone application (the server was also generated with
wsdl2java).
Help!!!
Regards,
Hugo Terelle
--
Glen Mazza
Talend - http://www.talend.com/apache
Blog - http://www.jroller.com/gmazza/
Twitter - glenmazza