How to use javax.xml.ws without interface of soap webService - java

I want to use a SOAP webservice with below URL:
http://ws.armaghan.net:8080/ws-relay/MessageRelayService?wsdl
According to post at How to do a call through a javax.xml.ws.Service I developed below code:
URL url= new URL("http://ws.armaghan.net:8080/ws-relay/MessageRelayService?wsdl");
QName qname= new QName("http://webservice.smsrelay.armaghan.net/","MessageRelayService");
Service service = Service.create(url, qname);
but at next step I do not now how to use service.getPort(Claas arg0) because I have not the interface of my SOAP web service. The only thing I have is the above URL.
By the way my question is that how can I use the web-service?
Thanks,

First you need to generate the client for the Web service through WSIMPORT or similar tool.
after that the generated client artifacts should be integrated with your client side code to call web service operations. you can refer following blog post that has the clear steps one by one.
http://chathurangat.blogspot.com/2013/09/how-to-generate-jax-ws-client-and.html

You should use a tool for generating the interfaces and the client. I usually save the wsdl file to my java project and use the ide to generate source code from the wsdl file.
Then you can choose your preferred framework. Axis, cxf, ws or what you want.
You can also use commandline tools like for example this
http://www.mkyong.com/webservices/jax-ws/jax-ws-wsimport-tool-example/

Related

implementing a SOAP web service with a wrong wsdl

I am trying to implement a soap ws client in my java application. I have a WSDL file to generate the client stubs. When I implemented the code, I saw that the WSDL file is out of date and I can not get the response as expected in the WSDL. I do not have an option to make the vendor update WSDL.
What are my options to implement the client properly?
Is it possible to fix the WSDL manually or intercept the response before generated codes receive the response?
Thank you.
You can always get the most updated WSDL by accessing the URL from the browser. Since you are able to communicate with the server application I assume you have the server application endpoint.
The URL should be simller to the folliwng
http[s]://(IP or Domain Name)[:port]/.../...?WSDL
Here is an example for a common WSDL online for global weather as an example of how WSDL URL look like
http://www.webservicex.net/globalweather.asmx?WSDL
Additional Details:
You can re-generate the stub classes from WSDL URL directly using many tools like:
Axis
Code Generator Wizard Guide for Eclipse Plug-in
Code Generator Tool Guide for Command Line and Ant Task
Apache CXF
Generate a JAX-WS Web Service Client from a WSDL document using Apache CXF

How to use WSDL url to create a request for data

I have a WSDL url(http:localhost:8080/userdata?wsdl) and I want to create a request to this webservice so I can fetch the data for further processing. Can I do this without wsimport?
If I have to create package from wsimport, how I can create a client which will use generated classes to create the XML request?
If I can do this without wsimport , how I can create a client which will create the XML request?
New to webservices, links to documentation would be appreciated. I am trying to understand this at the moment http://java.dzone.com/news/5-techniques-create-web-servic
You can use CXF wsdl2Java to generate a client code for the web service.
Once you run the wsdl2java , you will get a set of java classes generated for you. You can then use those classes to call the services without any explicit conversion of XML - the underlying framework will do it for you automatically. You can start with http://cxf.apache.org/docs/how-do-i-develop-a-client.html
I proposed CXF while you can look for many other alternatives - However, i have found CXF to be very feature rich and will help you in developing/working with web services.
On top of what Akhilesh said you can also create a Dynamic client for invoking WSDL. I have done it recently and i found it a little bit better then using CXF as dynamic client does not generate any code whatsoever. You just pass in the parameters to it and it does all the job for you. You can find a "shell" to build your own client HERE

JAX-WS Invoking a webservice using Implementation specific API such as CXF

Is it possible to invoke a web service in Java without using the JAX-WS API but a specific runtime implementation API such as CXF specific API?
I have Metro on my classpath an its causing issues when I use the JAX-WS API so I want to specify the exact JAX-WS API implementation to use dynamically when invoking the service
Thank u
Most likely, all the JAX-WS implementations have some sort of proprietary API that can be used to create services that would use their specific implementation and bypass the JAX-WS provider discovery mechanisms. In most cases, the discovered Providers are likely a wrapper onto those API's.
For CXF on the client side, that would be the JaxWsProxyFactoryBean:
http://cxf.apache.org/javadoc/latest/org/apache/cxf/jaxws/JaxWsProxyFactoryBean.html
which can be used to create the Proxy objects from the JAX-WS generated interfaces.
You may build your request in plain XML and do SOAP request. To build XML structure, you may use SoapUI, where you can import WSDL which gives you xml input structure. Copy that in to java class,append the request params where ever necessary and fire the request. You don't require any Jax-WS API. Only the problem with this aproach is you need to write XML parser for inputs and outputs
[update] different solution
I use Java API to use framework features, but need to create client jars for given service and add to class path.
URL wsdlURL = new URL("http://localhost/myweb/services/xyz_services?wsdl");
QName SERVICE_NAME = new QName("http://service.sa.com/","portname");
Service service = Service.create(wsdlURL, SERVICE_NAME);
TestService client = service.getPort(TestService.class);
client.execute();
Provided your service looks like below
package com.sa.service;
Inteface TestService{
public void execute();
}
You can create client class using wsimport(Java tool) from command line and then jar them and add to classpath

How To Use WSDL Url

I wrote a java web service on Netbeans 6.9.1 and deployed on GlassFish 3.0.1
I have a wsdl url like this "http://localhost:8080/web2/service2Service?wsdl".
How can I use this url to access this web service from another java application.
Thanks
You need to generate some Java that represents the client's view of the Web Service and then invoke that Java. Here's an article which explains some of the detail.
Generating client from WSDL in Eclipse
The general idea is that you generate some Java classes from the WSDL. Those classes act as a proxy for the service you want to call. Your java invokes methods on the proxy objects, the generated code creates the appropriate SOAP messages, sends the HTTP request, interprets the response and your code just sees a Java result.
I just use the tooling built into Eclipse, but you will also find other suitable generators, for example in Apache's Axis
1º U must save the content in a "myWebServices.wsdl" file
2º Run your Wsdl converter, all compilers have one of this, normally the name is WDSL.EXE
This process will create a new file with NameSpace or Package with the definitions of webservices built in.
3º Then imports this package or built a library.
Develop web service Client in second application.
You can use Netbeans to create web service client by giving your wsdl url
The document at this url is the actual wsdl (a description of the actual webservice, written in WebService Definfition Language).
The description includes information about the services url, the protocol(s), the method names and and data objects. Your application will use that information to call the remote methods of that service.
The protocol may or may not be SOAP, and without knowing the webservice details, it's quite impossible to recommend a toolset or methodology to use the webservice, there is no general approach. In most cases we see SOAP, for those services I recomment soapUI as a general tool to use and test SOAP based webservices and apache axis to implement java based service consumers.

Remote Web Services

I am new to web services. I have a requirement in my project. I have to consume the web services of our vendor in my project. All he has shared with me is a WSDL file and a document about the description of the the different operations.
Question:-
1: What do I need to do consume these web services in my java project? I have been advised to use axis2, eclipse with tomcat6.
2: Do I need to ask for some other files/information from WS vendor OR wsdl file is enough to consume these web services?
3: Do I need to write a java WS client (using axis2 plugin) or another webservice which will talk to vendor web service?
Please suggest the best possible way.
I am sorry if the question sounds like a naive..
Axis is a solid choice for such application.
You need to generate an axis client based on the provided WSDL. Then you import the generated client and use it's methods. You can see the details of this process here (read whole page or starting from the linked section): http://ws.apache.org/axis2/1_0/userguide3.html#Writing_Web_Service_Clients_using_Code_Generation_with_Data_Binding_Support
You could also need some entry-point (WebService URL).
You need to generate a client, not a webservice. See point 1.
Don't use Axis if you need ambient authentication in a Windows environment. I went down that path and ended up going with Apache CXF - which seems better to me anyhow.
You can use SOAP UI to test the web service. It'll read the WSDL, let you create requests by filling in values, and display the response that you get back. It might help you get a better understanding of what the service does before you start writing your classes.
You don't need to create a new web service in order to consume a web service, you need to write a web service client.
Similar question to this one:
Steps in creating a web service using Axis2 - The client code
All the standard web frameworks have a command (normally called wsdl2java) that will read the WSDL and then generate a java based client object.
I can recommend Axis2, but another popular choice is CXF

Categories