JAX WS Spring Integration Example

JAX+WS+Spring+Integration+Example ...

Click here to download eclipse supported ZIP file



This is index.jsp JSP file and it is used display the output for the application.




<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<head>
</head>
<body>
<table align='center'>
<tr>
<td>Hello world example...</td>

</tr>
<tr>
<td><a href="./hello">click here</a></td>
</tr>
</table>
</body>


This is HelloWorldBo.java file having the source code to execute business logic.



 

    
package com.cv.webservice.bo;

public interface HelloWorldBo{

  String getHelloWorld();
  
}


This is HelloWorldBoImpl.java file having the source code to execute business logic.



 

    
package com.cv.webservice.bo.impl;

import com.cv.webservice.bo.HelloWorldBo;

public class HelloWorldBoImpl implements HelloWorldBo{

  public String getHelloWorld(){
    return "JAX-WS + Spring!";
  }
  
}


This is HelloWorldWS.java file having the source code to execute business logic.



 

    
package com.cv.webservice;

import javax.jws.WebMethod;
import javax.jws.WebService;

import com.cv.webservice.bo.HelloWorldBo;

@WebService
public class HelloWorldWS{

  //DI via Spring
  HelloWorldBo helloWorldBo;

  @WebMethod(exclude=true)
  public void setHelloWorldBo(HelloWorldBo helloWorldBo) {
    this.helloWorldBo = helloWorldBo;
  }

  @WebMethod(operationName="getHelloWorld")
  public String getHelloWorld() {
    
    return helloWorldBo.getHelloWorld();
    
  }
 
}


This is pom.xml file having the entries of dependency jars and information to build the application .



	
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mkyong.common</groupId> <artifactId>JAXWSSpringIntegrationExample</artifactId> <packaging>war</packaging> <version>1.0</version> <name>JAXWSSpringIntegrationExample Maven Webapp</name> <url>http://maven.apache.org</url> <repositories> <repository> <id>java.net</id> <url>http://download.java.net/maven/2</url> </repository> </repositories> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-rt</artifactId> <version>2.2.3</version> </dependency> <dependency> <groupId>org.jvnet.jax-ws-commons.spring</groupId> <artifactId>jaxws-spring</artifactId> <version>1.8</version> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <groupId>com.sun.xml.stream.buffer</groupId> <artifactId>streambuffer</artifactId> <groupId>org.jvnet.staxex</groupId> <artifactId>stax-ex</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <warSourceDirectory>src/main/webapp</warSourceDirectory> <warName>JAXWSSpringIntegrationExample</warName> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </pluginManagement> <finalName>JAXWSSpringIntegrationExample</finalName> </build> </project>


This is applicationContext.xml spring configuration file and these entries are used in the application.



 
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ws="http://jax-ws.dev.java.net/spring/core"
xmlns:wss="http://jax-ws.dev.java.net/spring/servlet"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://jax-ws.dev.java.net/spring/core
http://jax-ws.dev.java.net/spring/core.xsd
http://jax-ws.dev.java.net/spring/servlet
http://jax-ws.dev.java.net/spring/servlet.xsd">

<wss:binding url="/hello">
<wss:service>
<ws:service bean="#helloWs" />
</wss:service>
</wss:binding>

<!-- Web service methods -->
<bean id="helloWs" class="com.cv.webservice.HelloWorldWS">
<property name="helloWorldBo" ref="HelloWorldBo" />
</bean>

<bean id="HelloWorldBo" class="com.cv.webservice.bo.impl.HelloWorldBoImpl" />

</beans>


This is web.xml deployment descriptor file and it describes how the web application should be deployed.



	
<web-app id="WebApp_ID" version="2.4" 
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>Spring + JAX-WS</display-name>

<servlet>
<servlet-name>jaxws-servlet</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSSpringServlet
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>jaxws-servlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>

<!-- Register Spring Listener -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

</web-app>


This is log4j.properties file having the entries for logging the information into the console/file.




#By default enabling Console appender
# Root logger option
log4j.rootLogger=INFO, stdout

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p [%c]:%L -->> %m%n

# Redirect log messages to a log file
#log4j.appender.file=org.apache.log4j.RollingFileAppender
#log4j.appender.file.File=C:\servlet-application.log
#log4j.appender.file.MaxFileSize=5MB
#log4j.appender.file.MaxBackupIndex=10
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

JAX WS security deploy tomcat example

Click here to download eclipse supported ZIP file



This is input.properties properties file and these properties are used in the application.




portNumber=9090




This is index.jsp JSP file and it is used display the output for the application.




<jsp:forward page="/initServlet"></jsp:forward>


This is InitServlet.java file having the source code to execute business logic.



 

    
package com.cv.servlet.init;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

/**
 * Servlet implementation class InitServlet
 
 @author Chandra Vardhan
 *
 */

public class InitServlet extends HttpServlet {

  private static final Logger LOGGER = Logger.getLogger(InitServlet.class);

  private static final long serialVersionUID = 1L;

  /**
   @see HttpServlet#HttpServlet()
   */
  public InitServlet() {
    super();

  }

  /**
   @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
   *      response)
   */
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    LOGGER.info("Entered into doGet(--) of InitServlet class... ");

    response.setContentType("text/html");

    String contextPath = this.getClass().getClassLoader().getResource("/").getPath();
  
    if(contextPath != null) {
      contextPath = contextPath.substring(0, contextPath.lastIndexOf(".metadata")-1);
      if(contextPath.startsWith("\\")) {
        contextPath = contextPath.substring(1, contextPath.length());
      }
      contextPath = contextPath+request.getContextPath();
    }
    
    File file = new File(contextPath+"//input.properties");
    if (file != null && !file.exists()) {
      file.createNewFile();
    }
    LOGGER.info("created at :: "+file.getAbsolutePath());
    final PrintWriter pw = new PrintWriter(new FileOutputStream(file));
    pw.print("portNumber=" + request.getServerPort());
    PrintWriter out = response.getWriter();
    out.print("Successfully deployed...");
    pw.close();
    out.close();
  }

  /**
   @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
   *      response)
   */
  protected void doPost(HttpServletRequest request,
      HttpServletResponse responsethrows ServletException, IOException {
    LOGGER.info("Entered into doPost(--) of InitServlet class... ");
    doGet(request, response);
  }

}


This is WsClient.java file having the source code to execute business logic.



 

    
package com.cv.webservice.client;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import org.apache.log4j.Logger;

import com.cv.webservice.ws.HelloWorld;

public class WsClient {
  
  private static final Logger LOGGER = Logger
      .getLogger(WsClient.class);
  private static String WS_URL = "/JAXWSSecurityDeployTomcat/hello?wsdl";

  static {
    Properties properties = readFile();
    setValues(properties);
  }

  private static void setValues(Properties properties) {

    if (properties != null) {
      String port = properties.getProperty("portNumber");
      WS_URL = "http://localhost:" + port + WS_URL;
    }
  }

  private static Properties readFile() {

    File file = new File(System.getProperty("user.dir")
        "/input.properties");
    Properties prop = new Properties();
    if (file != null && file.exists()) {
      InputStream input = null;
      try {
        input = new FileInputStream(file);
        // load a properties file
        prop.load(input);
      catch (Exception e) {
        e.printStackTrace();
      }
    else {
      prop.setProperty("portNumber""8080");
    }
    return prop;
  }

  public static void main(String[] argsthrows Exception {

    URL url = new URL(WS_URL);

    QName qname = new QName("http://ws.webservice.cv.com/",
        "HelloWorldImplService");

    Service service = Service.create(url, qname);

    HelloWorld hello = service.getPort(HelloWorld.class);

    LOGGER.info(hello.getHelloWorldAsString());

  }

}


This is WsPublisher.java file having the source code to execute business logic.



 

    
package com.cv.webservice.endpoint;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;

import javax.xml.ws.Endpoint;

import org.apache.log4j.Logger;

import com.cv.webservice.ws.HelloWorldImpl;

//Endpoint publisher
public class WsPublisher {
  private static final Logger LOGGER = Logger.getLogger(WsPublisher.class);
  private static String WS_URL = "/JAXWSSecurityDeployTomcat/hello";

  static {
    Properties properties = readFile();
    setValues(properties);
  }

  public static void main(String[] args) {

    Endpoint.publish(WS_URL, new HelloWorldImpl());
    LOGGER.info("Server is URL is : : " + WS_URL);
    LOGGER.info("Server is published!");

  }

  private static void setValues(Properties properties) {

    if (properties != null) {
      String port = properties.getProperty("portNumber");
      WS_URL = "http://localhost:" + port + WS_URL;
    }
  }

  private static Properties readFile() {

    File file = new File(System.getProperty("user.dir")
        "/input.properties");
    Properties prop = new Properties();
    if (file != null && file.exists()) {
      InputStream input = null;
      try {
        input = new FileInputStream(file);
        // load a properties file
        prop.load(input);
      catch (Exception e) {
        e.printStackTrace();
      }
    else {
      prop.setProperty("portNumber""8080");
    }
    return prop;
  }

}


This is HelloWorld.java file having the source code to execute business logic.



 

    
package com.cv.webservice.ws;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

//Service Endpoint Interface
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloWorld {

  @WebMethod
  String getHelloWorldAsString();

}




This is HelloWorldImpl.java file having the source code to execute business logic.



 

    
package com.cv.webservice.ws;

import javax.jws.WebService;

//Service Implementation Bean

@WebService(endpointInterface = "com.cv.webservice.ws.HelloWorld")
public class HelloWorldImpl implements HelloWorld {

  public String getHelloWorldAsString() {
    return "Hello World JAX-WS";
  }
}


This is pom.xml file having the entries of dependency jars and information to build the application .



	
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cv.webservice</groupId> <artifactId>JAXWSSecurityDeployTomcat</artifactId> <packaging>war</packaging> <version>1.0</version> <name>JAXWSContainerAuthentication Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-rt</artifactId> <version>2.2.3</version> </dependency> <dependency> <groupId>org.jvnet.jax-ws-commons.spring</groupId> <artifactId>jaxws-spring</artifactId> <version>1.8</version> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <groupId>com.sun.xml.stream.buffer</groupId> <artifactId>streambuffer</artifactId> <groupId>org.jvnet.staxex</groupId> <artifactId>stax-ex</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <warSourceDirectory>src/main/webapp</warSourceDirectory> <warName>JAXWSSecurityDeployTomcat</warName> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </pluginManagement> <finalName>JAXWSSecurityDeployTomcat</finalName> </build> </project>


This is sun-jaxws.xml spring configuration file and these entries are used in the application.



 
<?xml version="1.0" encoding="UTF-8"?>
<endpoints
xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
version="2.0">
<endpoint
name="HelloWorld"
implementation="com.cv.webservice.ws.HelloWorldImpl"
url-pattern="/hello"/>
</endpoints>


This is web.xml deployment descriptor file and it describes how the web application should be deployed.



	
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<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>
<servlet>
<servlet-name>initServlet</servlet-name>
<servlet-class>com.cv.servlet.init.InitServlet</servlet-class>

</servlet>
<servlet-mapping>
<servlet-name>initServlet</servlet-name>
<url-pattern>/initServlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>120</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


This is log4j.properties file having the entries for logging the information into the console/file.




#By default enabling Console appender
# Root logger option
log4j.rootLogger=INFO, stdout

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p [%c]:%L -->> %m%n

# Redirect log messages to a log file
#log4j.appender.file=org.apache.log4j.RollingFileAppender
#log4j.appender.file.File=C:\servlet-application.log
#log4j.appender.file.MaxFileSize=5MB
#log4j.appender.file.MaxBackupIndex=10
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

Jax WS RPC style example

Click here to download eclipse supported ZIP file



This is index.jsp JSP file and it is used display the output for the application.




<jsp:forward page="/initServlet"></jsp:forward>


This is InitServlet.java file having the source code to execute business logic.



 

    
package com.cv.servlet.init;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

/**
 * Servlet implementation class InitServlet
 
 @author Chandra Vardhan
 *
 */

public class InitServlet extends HttpServlet {

  private static final Logger LOGGER = Logger.getLogger(InitServlet.class);

  private static final long serialVersionUID = 1L;

  /**
   @see HttpServlet#HttpServlet()
   */
  public InitServlet() {
    super();

  }

  /**
   @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
   *      response)
   */
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    LOGGER.info("Entered into doGet(--) of InitServlet class... ");

    response.setContentType("text/html");

    String contextPath = this.getClass().getClassLoader().getResource("/").getPath();
  
    if(contextPath != null) {
      contextPath = contextPath.substring(0, contextPath.lastIndexOf(".metadata")-1);
      if(contextPath.startsWith("\\")) {
        contextPath = contextPath.substring(1, contextPath.length());
      }
      contextPath = contextPath+request.getContextPath();
    }
    
    File file = new File(contextPath+"//input.properties");
    if (file != null && !file.exists()) {
      file.createNewFile();
    }
    LOGGER.info("created at :: "+file.getAbsolutePath());
    final PrintWriter pw = new PrintWriter(new FileOutputStream(file));
    pw.print("portNumber=" + request.getServerPort());
    PrintWriter out = response.getWriter();
    out.print("Successfully deployed...");
    pw.close();
    out.close();
  }

  /**
   @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
   *      response)
   */
  protected void doPost(HttpServletRequest request,
      HttpServletResponse responsethrows ServletException, IOException {
    LOGGER.info("Entered into doPost(--) of InitServlet class... ");
    doGet(request, response);
  }

}


This is HelloWorldClient.java file having the source code to execute business logic.



 

    
package com.cv.webservice.client;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import org.apache.log4j.Logger;

import com.cv.webservice.HelloWorld;


/**
 @author Chandra Vardhan
 *
 */
public class HelloWorldClient {
  private static final Logger LOGGER = Logger
      .getLogger(HelloWorldClient.class);

  private static String WS_URL = "/JaxWSRPCStyle/hello?wsdl";

  static {
    Properties properties = readFile();
    setValues(properties);
  }

  private static void setValues(Properties properties) {

    if (properties != null) {
      String port = properties.getProperty("portNumber");
      WS_URL = "http://localhost:" + port + WS_URL;
    }
  }

  private static Properties readFile() {

    File file = new File(System.getProperty("user.dir")
        "/input.properties");
    Properties prop = new Properties();
    if (file != null && file.exists()) {
      InputStream input = null;
      try {
        input = new FileInputStream(file);
        // load a properties file
        prop.load(input);
      catch (Exception e) {
        e.printStackTrace();
      }
    else {
      prop.setProperty("portNumber""8080");
    }
    return prop;
  }

  public static void main(String[] argsthrows Exception {

    URL url = new URL(WS_URL);

    // 1st argument service URI, refer to wsdl document above
    // 2nd argument is service name, refer to wsdl document above
    QName qname = new QName("http://webservice.cv.com/",
        "HelloWorldImplService");
    Service service = Service.create(url, qname);
    HelloWorld hello = service.getPort(HelloWorld.class);
    System.out.println(hello
        .getHelloWorldAsString("Web services RPC Example..."));
    LOGGER.info(hello
        .getHelloWorldAsString("Entered in HelloWorldImpl.getHelloWorldAsString(String)"));
  }
}


This is HelloWorldClient2.java file having the source code to execute business logic.



 

    
/**
 
 */
package com.cv.webservice.client;

import com.cv.webservice.HelloWorld;
import com.cv.webservice.HelloWorldImplService;


/**
 @author Chandra Vardhan
 *
 */
public class HelloWorldClient2 {
  
  /**
   
   */
  public HelloWorldClient2() {
  }

  /**
   @param args
   */
  public static void main(String[] args) {
    HelloWorldImplService hw = new HelloWorldImplService();
    HelloWorld helloWorldImplPort = hw.getHelloWorldImplPort();
    String helloWorldAsString = helloWorldImplPort.getHelloWorldAsString("hello");
    System.out.println(helloWorldAsString);      
    
  }

}


This is HelloWorldPublisher.java file having the source code to execute business logic.



 

    
package com.cv.webservice.endpoint;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;

import javax.xml.ws.Endpoint;

import org.apache.log4j.Logger;

import com.cv.webservice.HelloWorldImpl;

/**
 @author Chandra Vardhan
 *
 */
//Endpoint publisher  
public class HelloWorldPublisher {

  
  
  private static final Logger LOGGER = Logger.getLogger(HelloWorldPublisher.class);
  private static String WS_URL = "/JaxWSRPCStyle/hello";

  static {
    Properties properties = readFile();
    setValues(properties);
  }

  public static void main(String[] args) {

    Endpoint.publish(WS_URL, new HelloWorldImpl());
    
    LOGGER.info("Server is URL is : : " + WS_URL);

  }

  private static void setValues(Properties properties) {

    if (properties != null) {
      String port = properties.getProperty("portNumber");
      WS_URL = "http://localhost:" + port + WS_URL;
    }
  }

  private static Properties readFile() {

    File file = new File(System.getProperty("user.dir")
        "/input.properties");
    Properties prop = new Properties();
    if (file != null && file.exists()) {
      InputStream input = null;
      try {
        input = new FileInputStream(file);
        // load a properties file
        prop.load(input);
      catch (Exception e) {
        e.printStackTrace();
      }
    else {
      prop.setProperty("portNumber""8080");
    }
    return prop;
  }
}


This is HelloWorld.java file having the source code to execute business logic.



 

    

package com.cv.webservice;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.Action;


/**
 * This class was generated by the JAX-WS RI.
 * JAX-WS RI 2.2.9-b130926.1035
 * Generated source version: 2.2
 
 */

/**
 @author Chandra Vardhan
 *
 */
@WebService(name = "HelloWorld", targetNamespace = "http://webservice.cv.com/")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface HelloWorld {


    /**
     
     @param arg0
     @return
     *     returns java.lang.String
     */
    @WebMethod
    @WebResult(partName = "return")
    @Action(input = "http://webservice.cv.com/HelloWorld/getHelloWorldAsStringRequest", output = "http://webservice.cv.com/HelloWorld/getHelloWorldAsStringResponse")
    public String getHelloWorldAsString(
        @WebParam(name = "arg0", partName = "arg0")
        String arg0);

}


This is HelloWorldImpl.java file having the source code to execute business logic.



 

    
package com.cv.webservice;

import javax.jws.WebService;

import org.apache.log4j.Logger;

/**
 @author Chandra Vardhan
 *
 */
// Service Implementation
@WebService(endpointInterface = "com.cv.webservice.HelloWorld")
public class HelloWorldImpl implements HelloWorld {

  private static final Logger LOGGER = Logger.getLogger(HelloWorldImpl.class);
  
  public String getHelloWorldAsString(String name) {
    LOGGER.info("Entered in HelloWorldImpl.getHelloWorldAsString(String)");
    return "Hello World IMPL JAX-WS " + name;
  }
}


This is HelloWorldImplService.java file having the service/business logic to call the DAO layer and get the information from database.



 

    
package com.cv.webservice;

import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.WebServiceFeature;

/**
 * This class was generated by the JAX-WS RI. JAX-WS RI 2.2.9-b130926.1035
 * Generated source version: 2.2
 
 */

/**
 @author Chandra Vardhan
 *
 */
@WebServiceClient(name = "HelloWorldImplService", targetNamespace = "http://webservice.cv.com/")
public class HelloWorldImplService extends Service {

  private final static URL HELLOWORLDIMPLSERVICE_WSDL_LOCATION;
  private final static WebServiceException HELLOWORLDIMPLSERVICE_EXCEPTION;
  private final static QName HELLOWORLDIMPLSERVICE_QNAME = new QName(
      "http://webservice.cv.com/""HelloWorldImplService");

  static {
    URL url = null;
    WebServiceException e = null;
    try {
      url = new URL("http://localhost:8089/Jax-ws-RPC-style/hello?wsdl");
    catch (MalformedURLException ex) {
      e = new WebServiceException(ex);
    }
    HELLOWORLDIMPLSERVICE_WSDL_LOCATION = url;
    HELLOWORLDIMPLSERVICE_EXCEPTION = e;
  }

  public HelloWorldImplService() {
    super(__getWsdlLocation(), HELLOWORLDIMPLSERVICE_QNAME);
  }

  public HelloWorldImplService(WebServiceFeature... features) {
    super(__getWsdlLocation(), HELLOWORLDIMPLSERVICE_QNAME, features);
  }

  public HelloWorldImplService(URL wsdlLocation) {
    super(wsdlLocation, HELLOWORLDIMPLSERVICE_QNAME);
  }

  public HelloWorldImplService(URL wsdlLocation,
      WebServiceFeature... features) {
    super(wsdlLocation, HELLOWORLDIMPLSERVICE_QNAME, features);
  }

  public HelloWorldImplService(URL wsdlLocation, QName serviceName) {
    super(wsdlLocation, serviceName);
  }

  public HelloWorldImplService(URL wsdlLocation, QName serviceName,
      WebServiceFeature... features) {
    super(wsdlLocation, serviceName, features);
  }

  /**
   
   @return returns HelloWorld
   */
  @WebEndpoint(name = "HelloWorldImplPort")
  public HelloWorld getHelloWorldImplPort() {
    return super.getPort(new QName("http://webservice.cv.com/",
        "HelloWorldImplPort"), HelloWorld.class);
  }

  /**
   
   @param features
   *            A list of {@link javax.xml.ws.WebServiceFeature} to configure
   *            on the proxy. Supported features not in the
   *            <code>features</code> parameter will have their default
   *            values.
   @return returns HelloWorld
   */
  @WebEndpoint(name = "HelloWorldImplPort")
  public HelloWorld getHelloWorldImplPort(WebServiceFeature... features) {
    return super.getPort(new QName("http://webservice.cv.com/",
        "HelloWorldImplPort"), HelloWorld.class, features);
  }

  private static URL __getWsdlLocation() {
    if (HELLOWORLDIMPLSERVICE_EXCEPTION != null) {
      throw HELLOWORLDIMPLSERVICE_EXCEPTION;
    }
    return HELLOWORLDIMPLSERVICE_WSDL_LOCATION;
  }

}


This is pom.xml file having the entries of dependency jars and information to build the application .



	
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cv.webservice.soap</groupId> <artifactId>JaxWSRPCStyle</artifactId> <version>1.0</version> <packaging>war</packaging> <name>JaxWSRPCStyle</name> <properties> <springframework.version>4.1.6.RELEASE</springframework.version> <springsecurity.version>4.0.1.RELEASE</springsecurity.version> </properties> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <warSourceDirectory>src/main/webapp</warSourceDirectory> <warName>JaxWSRPCStyle</warName> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </pluginManagement> <finalName>JaxWSRPCStyle</finalName> </build> </project>


This is web.xml deployment descriptor file and it describes how the web application should be deployed.



	
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">

<servlet>
<servlet-name>initServlet</servlet-name>
<servlet-class>com.cv.servlet.init.InitServlet</servlet-class>

</servlet>
<servlet-mapping>
<servlet-name>initServlet</servlet-name>
<url-pattern>/initServlet</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


This is log4j.properties file having the entries for logging the information into the console/file.




#By default enabling Console appender
# Root logger option
log4j.rootLogger=INFO, stdout

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p [%c]:%L -->> %m%n

# Redirect log messages to a log file
#log4j.appender.file=org.apache.log4j.RollingFileAppender
#log4j.appender.file.File=C:\servlet-application.log
#log4j.appender.file.MaxFileSize=5MB
#log4j.appender.file.MaxBackupIndex=10
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n