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!/META-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.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