JAX-WS + Java Web Application Integration Example
Often times, JAX-WS always be part of your Java web application. Here we show you how to integrate JAX-WS into Java web application easily.
1. Project Folder
First, review this project folder structure.
2. Web Service
A super simple web service. Code is self-explanatory.
File : HelloWorld.java
package com.mkyong.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public class HelloWorld{
@WebMethod(operationName="getHelloWorld")
public String getHelloWorld(String name) {
return "Hello World JAX-WS " + name;
}
}
3. Web Service Deployment Descriptor (sun-jaxws.xml)
Create a web service deployment descriptor, named sun-jaxws.xml
.
File : sun-jaxws.xml
<?xml version="1.0" encoding="UTF-8"?>
<endpoints
xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
version="2.0">
<endpoint
name="HelloWorldWs"
implementation="com.mkyong.ws.HelloWorld"
url-pattern="/hello"/>
</endpoints>
4. Web Application Deployment Descriptor (web.xml)
In the standard web.xml
,
- Defines “
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
” as listener class. - Defines “
com.sun.xml.ws.transport.http.servlet.WSServlet
” as your web service (hello) servlet.
File : web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
5. Done
The integration between JAX-WS and web application is done. Deploy it and access via URL : http://localhost:8080/WebServicesExample/hello
Download Source Code
Download it – JAX-WS-Integrate-WebApplication-Example.zip (7KB)
You have an error here because /hello is mapped both in sun-jaxws.xml for webservice and in web.xml for an index.jsp. Apart of this, it is a little bit strange to call a web service with /hello. I would try to show how to add a web service to a webapp by mapping it as “/webservice” and standard index.jsp on “/hello” .I tried to accomplish this and surprisingly http://localhost:8080/WebServicesExample/hello returns 404, and only http://localhost:8080/WebServicesExample/{optional “index.jsp” suffix} returns HelloWorld!.
Best regards,
Pawel
Caused by: com.sun.xml.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.mkyong.ws.jaxws.GetHelloWorld is not found. Have you run APT to generate them?
iam getting this exception please help me
Unfortunately imho this tutorial does not explain:
When i deploy the project in a jboss server, how i can change the endpoint address to another URL than localhost?. I’m using the WSDL for another system, and when it calls a method, it looks for localhost. I need to set the URL to http://123.45.67.89:8080 instead http://localhost:8080.
GOOD!!
If I create the web service in this way, All the parameters of a method are required ? (for the consumer)
i got a error when create cfx service ( jax-ws soap) and use webbrowser to test
org.apache.cxf.interceptor.Fault: No binding operation info while invoking unknown method with params unknown.
@WebService()
public interface GovernmentNationalityWebService {
@WebMethod
List findAll();
@WebMethod
GovernmentNationalityDTO findOne(Long id);
@WebMethod
List findAllShtp();
}
plz help me
I did everything as you guided but ones after deployed in the server and started the server, I’m getting an error as requested resource is not available.
I can build project from eclipse to deploy on websphere ?
Can anyone explain me .. what we are trying to do here. I mean what will be the use case for this integration.
list all depend jar please .
Hi Just want to understand the flow.
How the getHelloWorld of the webservice is called
MK can you provide a tutorial on how to read webservice via another web application ? also can you explain how this was published under the hood? also why did we not need wsgen (i thought default was document if not specified) ?
please help explain
Thanks
bumb this!
Hi Mkyong,
Thank you for the tutorial this very valuable to me.
And I have a following question please make me understand here.
For the multiple endpoints in the same application, I can change the sun-jaxws.xml
As bellow, I test that is working fine,
But in each interface how can I keep more that one method and can call these methods from the client individually please help me
If there is a way to do this.
In the @WebMethod can I add any other parameter to define the endpoint to the method level
(As similar what available in RESTFUL web service )
Hi Mkyong,
Thank you for the tutorial this very valuable to me.
And I have a following question please make me understand here.
For the multiple endpoints in the same application, I can change the sun-jaxws.xml
As bellow, I test that is working fine,
But in each interface how can I keep more that one method and can call these methods from the client individually please help me
If there is a way to do this.
In the @WebMethod can I add any other parameter to define the endpoint to the method level
(As similar what available in RESTFUL web service )
Lot of you asked how to invoke the web services.
After you developed successfully, you will get the wall.
Download SoapUI 4.5.1. , it’s free, then create a new project, enter the wsdl , you are all set.
You wil see the endpoints listed in the left pane.
I’m trying to deploy the same in weblogic, but I’m getting below error
Caused By: com.sun.xml.ws.util.ServiceConfigurationError: com.sun.xml.ws.api.wsdl.writer.WSDLGeneratorExtension: Provider weblogic.wsee.jaxws.framework.policy.WSDLGeneratorExtension is specified
in jar:file:/C:/app/bea1035/wlserver_10.3/server/lib/weblogic.jar!/META-INF/services/com.sun.xml.ws.api.wsdl.writer.WSDLGeneratorExtensionbut could not be instantiated: java.lang.ClassCastExcepti
on
I have the same problem… any solution?
How to invoke the web service?
I am getting the below exception :
SEVERE: WSSERVLET11: failed to parse runtime descriptor: javax.xml.ws.WebServiceException
Runtime descriptor “/WEB-INF/sun-jaxws.xml” is mising
What is the cause (i.e. the exception that caused that exceptoin) of that exception ?
im getting the following error when performing mvn tomcat:redeploy in tomcat
SEVERE: Error listenerStart
May 17, 2012 12:34:06 AM org.apache.catalina.core.StandardContext start
SEVERE: Context [/WS_mkyong_web] startup failed due to previous errors
any idea, why?
here is the pom.xml that im using..
thanks in advance
ok, we are missing the following dependency from pom.xml
Thanks MK
Good tutorial. however, I don’t know how to call the web method in the web service.
Do I need to use wsimport tool to generate the artifact and invoke the web method in servlet. THanks.
that would be a helpful tutorial. thanks MK
java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServletContextListener
I use:
– JDK 1.6_26
– Eclipse Indigo
Is there no other solutions???
Thanks.
Fernando Aspiazu
https://mkyong.com/webservices/jax-ws/java-lang-classnotfoundexception-com-sun-xml-ws-transport-http-servlet-wsservletcontextlistener/
Attractive portion of content. I just stumbled upon your site and in accession capital to claim that I acquire in fact enjoyed account your blog posts. Any way I’ll be subscribing for your feeds or even I success you get admission to consistently quickly.
I am getting this error.
Any help would be higlhy appreciated.
Caused by: com.sun.xml.ws.util.exception.LocatableWebServiceException: class not found in runtime descriptor: com.mkyong.ws.HelloWorld
at line 8 of jndi:/localhost/webservices/WEB-INF/sun-jaxws.xml
~Sudhir