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
