On Friday, October 28, 2011 3:05:28 PM Gary Gregory wrote:
> Could code that uses Apache Commons VFS be plugged in at just the right spot
> to resolve "jar:file:..."?

CXF has a built in ability to handle jars on the classpath.   Use 
"classpath:/foo/mywsdl.wsdl" or similar.

If you want to pull it out of jars not on the classpath.  That's more complex.  
 
The "jar:"  url should work, but would likely end up being fairly machine 
dependent.

Dan


> 
> Gary
> -----Original Message-----
> From: Glen Mazza [mailto:[email protected]]
> Sent: Friday, October 28, 2011 10:41 AM
> To: [email protected]
> Subject: Re: NullPointerException with WSDL loading (cxf 2.4.2 and 2.4.3)
> 
> A google of <wsdlLocation = "jar:file> is suggesting it will be (very?)
> problematic getting that to work.  I would still recommend separation of
> the problem into two parts, i.e., using that interim step I mentioned
> below.  Let's make sure the web service works with the WSDL hardcoded
> (literally:  "/home/terelleh/.../mywsdl.wsdl" or
> "c:\blah\blah\mywsdl.wsdl") and outside the JAR, then see what (if
> anything) can be done about getting it to work with the WSDL inside the JAR.
> 
> Glen
> 
> On 10/28/2011 10:18 AM, Hugo Terelle wrote:
> > Hi Glen,
> > 
> > Thank you for your answer.
> > 
> > Here is the code I have
> > 
> > @javax.jws.WebService(
> > 
> >     serviceName = "DeviceService",
> >     portName = "DevicePort",
> >     targetNamespace = "http://www.onvif.org/ver10/device/wsdl";,
> >     wsdlLocation =
> > 
> > "jar:file:/home/terelle/onvif/onvif-srv-0.1-jar-with-dependencies.jar!/M
> > ETA-INF/wsdl/devicemgmt.wsdl",> 
> >     endpointInterface =
> >     "org.onvif.ver10.device.wsdl.DevicePortType")
> > 
> > public class DevicePortTypeImpl implements DevicePortType { ...
> > 
> > The wsdl can be found at
> > http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl but it
> > needs some modification (service binding, etc)
> > 
> > Nothing more is added to the code ...
> > 
> > Even if I try with no wsdlLocation, I get another error ...
> > And I'm still wondering why it's running under eclipse but not outside
> > ...
> > 
> > 
> > For Jetty, we use the embedded version ...
> > 
> > 
> > Hugo
> > 
> > On 10/28/2011 03:07 PM, Glen Mazza wrote:
> >> 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.j
> >>> ava:92)>>> 
> >>>     at
> >>> 
> >>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildSer
> >>> viceFromWSDL(ReflectionServiceFactoryBean.java:369)>>> 
> >>>     at
> >>> 
> >>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initiali
> >>> zeServiceModel(ReflectionServiceFactoryBean.java:505)>>> 
> >>>     at
> >>> 
> >>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(R
> >>> eflectionServiceFactoryBean.java:241)>>> 
> >>>     at
> >>> 
> >>> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsSer
> >>> viceFactoryBean.java:202)>>> 
> >>>     at
> >>> 
> >>> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpo
> >>> int(AbstractWSDLBasedEndpointFactory.java:101)>>> 
> >>>     at
> >>> 
> >>> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.j
> >>> ava:157)>>> 
> >>>     at
> >>> 
> >>> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactor
> >>> yBean.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
-- 
Daniel Kulp
[email protected]
http://dankulp.com/blog
Talend - http://www.talend.com

Reply via email to