JAX-WS client without a WSDL document file
Solution 1
Finally i use the CXF libraries and i achieve use the Paul Vargas answer:
Without a WSDL document file
This solution requires the client generated.
QName qname = new QName("http://thenamespace", "FooService");
FooService service = new FooService(null, qname); // null for ignore WSDL
Foo port = service.getFooPort();
BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext()
.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"http://foo.com/soap/fooBean");
// Use the service
String result = port.doSomething(param);
Using standard jaw-ws, this solution don't work, CXF is necessary.
Solution 2
There are several ways, of which I will tell you two:
-
Use a WSDL document file locally
Save a copy of the WSDL document file and the schemma files to your project.
ClassLoader classloader = Thread.currentThread().getContextClassLoader(); URL wsdlLocation = classloader.getResource("MyHelloService.wsdl"); QName serviceName= new QName("http://test.com/", "MyHelloService"); MyHelloService service = new MyHelloService(wsdlLocation, serviceName); service.sayHello("Test");
You may combine the WSDL document file with the schema files.
-
Without a WSDL document file
This solution requires the client generated.
QName qname = new QName("http://thenamespace", "FooService"); FooService service = new FooService(null, qname); // null for ignore WSDL Foo port = service.getFooPort(); BindingProvider bindingProvider = (BindingProvider) port; bindingProvider.getRequestContext() .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://foo.com/soap/fooBean"); // Use the service String result = port.doSomething(param);
Solution 3
I needed something like this, too.
In my case, I had put a dummy wsdl without endpoint address inside my web app classpath. After that, I set a valid address at runtime, like this:
String WSDL = "/config/ws/Main_default.wsdl";
Main service = new Main(Main.class.getResource(WSDL), new QName(
"http://www.example.com/", "Main"));
MainWS port = service.getMainWSPort();
BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"http://app.example.com/ws/services/main");
Object result = port.someMethod("some param");
mls_dev
Updated on October 14, 2020Comments
-
mls_dev over 3 years
I am consuming a webservice soa, with netbeans (jax-ws) i use netbeans auto generate client, and all run fine, but i see that the wsdl is always downloading while the client is running.
In production i don't want expose the wsdl, and i am trying to modify the client for don't require wsdl, all my intends are wrong, i find this:
WebService_Service svc = new WebService_Service( null, new QName("http://www.example.com/ws", "WebService")); WebService port = svc.getPort(WebService.class); BindingProvider bindingProvider = (BindingProvider) port; bindingProvider.getRequestContext() .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://www.example.com/real_endpoint_url_goes_here");
but when the first line is executed i found this exception:
Message: El contenido no está permitido en el prólogo. at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.wrapException(Unknown Source) at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.next(Unknown Source) at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.nextContent(Unknown Source) at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.nextElementContent(Unknown Source) at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.hasWSDLDefinitions(Unknown Source) at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(Unknown Source) at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(Unknown Source) at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(Unknown Source) at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source) at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source) at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(Unknown Source) at javax.xml.ws.Service.<init>(Unknown Source)
Any idea to ignore wsdl?
-
mls_dev over 10 yearsYes, i think that the exception ocurrs because i am pass null to service constructor and it try to download the wsdl and not find anything. but i don't know how force client to not download the wsdl
-
constantlearner over 10 yearstry using no arg constructor WebService_Service svc = new WebService_Service()
-
mls_dev over 10 yearsthaks for the answer, but in this case, default constructor call to wsdl because have inside one reference to it. i try to deleted the inside reference to wsdl, but the problem persist. it s not posible use client without wsdl?
-
constantlearner over 10 yearsAre you using cxf or axis?With cxf the mentioned method works
-
mls_dev over 10 yearsi am using the default libraries that comes with netbeans (jax-ws) i follow this tutorial: martcode.com/tipsGallery/…
-
mls_dev over 10 yearsThaks for the answer i am trying to use the way number 2, but i have the exception to the first post (the question)
-
boly38 over 6 yearsconfirm that this solution works with jax-ws, thanks
-
Niel de Wet about 6 yearsI tried to summarise this all up in a post here: medium.com/@nieldw/…
-
Ice09 over 5 yearsI had a similar problem and wanted to combine this with Dispatch, which didn't work for Apache CXF in this case. What helped a lot was some old IBM docu: ibm.com/support/knowledgecenter/en/SSEQTP_8.5.5/…