As you know that Spring support only contract first web service , i am giving you complete example how to write Web service.
IDE : Any Eclipse or Spring suit
Server : Tomcat 6 or 7
1) Create Dynamic web project with "ws-tutorial" you can use any other name but then you need to take care web.xml and -servlet.xml
2) Inside of lib folder following jar required .
You can directly copy it or cretae pom file with dependency .
Now your project is created
3)Create any XML request message you required example :
<QuickViewRequest xmlns="http://mycompany.com/hr/schemas">
<QuickView>
<Plan>2006-07-03</Plan>
</QuickView>
</QuickViewRequest>
4)Now using XML tools create XSD file "quickview.xsd" will discuss each mapping in details copy xsd inside of web inf folder /WEB-INF/quickview.xsd"
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:hr="http://mycompany.com/hr/schemas"
elementFormDefault="qualified"
targetNamespace="http://mycompany.com/hr/schemas">
<xs:element name="QuickViewRequest">
<xs:complexType>
<xs:all>
<xs:element name="QuickView" type="hr:QuickViewType" />
</xs:all>
</xs:complexType>
</xs:element>
<xs:complexType name="QuickViewType">
<xs:sequence>
<xs:element name="Plan" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
Now you are ready to create web service
Add inside of web.xml following configuration
<web-app 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"
version="2.4">
<display-name>MyCompany HR Holiday Service</display-name>
<servlet>
<servlet-name>spring-ws</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>spring-ws</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
now create "spring-ws-servlet.xml" with following configuration
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean
class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
<property name="mappings">
<props>
<prop key="{http://mycompany.com/hr/schemas}QuickViewRequest">QuickViewEndpoint</prop>
</props>
</property>
<property name="interceptors">
<bean
class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor" />
</property>
</bean>
<bean id="QuickViewEndpoint" class="com.mycompany.hr.ws.QuickViewEndpoint">
<constructor-arg ref="iQuickViewResourceService" />
</bean>
<bean id="iQuickViewResourceService" class="com.mycompany.hr.service.QuickViewResourceService" />
<!--
<bean
class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
<property name="mappings">
<props>
<prop key="{http://mycompany.com/hr/schemas}QuickViewRequest">QuickViewEndpoint</prop>
</props>
</property>
<property name="interceptors">
<bean
class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor" />
</property>
</bean>
-->
<bean id="quickview"
class="org.springframework.ws.wsdl.wsdl11.DynamicWsdl11Definition">
<property name="builder">
<bean
class="org.springframework.ws.wsdl.wsdl11.builder.XsdBasedSoap11Wsdl4jDefinitionBuilder">
<property name="schema" value="/WEB-INF/quickview.xsd" />
<property name="portTypeName" value="QuickViewResource" />
<property name="locationUri" value="http://localhost:8080/ws-tutorial/services" />
<property name="targetNamespace" value="http://mycompany.com/hr/definitions" />
</bean>
</property>
</bean>
</beans>
5) Create interface and give its implementation in class
public interface IQuickViewResourceService {
public String getQuickView(String url,String Plan);
}
public class QuickViewResourceService implements IQuickViewResourceService {
private static final Log logger = LogFactory.getLog(StubHumanResourceService.class);
public String getQuickView(String URL ,String plan) {
logger.info("Inside Service-->."+plan);
return "Vaquar";
}
}
6) Create End point
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.xpath.XPath;
import org.springframework.ws.server.endpoint.AbstractJDomPayloadEndpoint;
import com.mycompany.hr.service.HumanResourceService;
import com.mycompany.hr.service.IQuickViewResourceService;
public class QuickViewEndpoint extends AbstractJDomPayloadEndpoint {
private XPath Plan;
private IQuickViewResourceService iQuickViewResourceService;
public QuickViewEndpoint(IQuickViewResourceService iQuickViewResourceService) throws JDOMException {
this.iQuickViewResourceService = iQuickViewResourceService;
Namespace namespace = Namespace.getNamespace("hr", "http://mycompany.com/hr/schemas");
Plan = XPath.newInstance("//hr:Plan");
Plan.addNamespace(namespace);
}
protected Element invokeInternal(Element holidayRequest) throws Exception {
String name = "Vaquar Khan";
iQuickViewResourceService.getQuickView("",name);
System.out.println("QuickViewEndpoint ..........................");
return null;
}
}
Now you are done with Web service code .
7)We are going to write client for web service
public class QuickViewMain {
public static void main(String[] args) throws Exception {
try{
QuickViewRequestClient iQuickViewResourceService = new QuickViewRequestClient();
String url = "http://localhost:8080/ws-tutorial/services";
String Plan="Vaquar";
iQuickViewResourceService.getQuickView(Plan,url);
}catch(Exception e){
e.printStackTrace();
}
System.exit(0);
}
}
IDE : Any Eclipse or Spring suit
Server : Tomcat 6 or 7
1) Create Dynamic web project with "ws-tutorial" you can use any other name but then you need to take care web.xml and -servlet.xml
2) Inside of lib folder following jar required .
You can directly copy it or cretae pom file with dependency .
- activation-1.1.1.jar
- aopalliance-1.0.jar
- commons-logging-1.1.1.jar
- easymock-1.2_Java1.3.jar
- jaxb-api-2.1.jar
- jaxb-impl-2.1.5.jar
- jaxen-1.1.1.jar
- jdom-1.0.jar
- junit-3.8.2.jar
- log4j-1.2.15.jar
- mail-1.4.1.jar
- saaj-api-1.3.jar
- saaj-impl-1.3.jar
- spring-aop-2.5.1.jar
- spring-beans-2.5.1.jar
- spring-context-2.5.1.jar
- spring-context-support-2.5.1.jar
- spring-core-2.5.1.jar
- spring-jdbc-2.5.1.jar
- spring-jms-2.5.1.jar
- spring-orm-2.5.1.jar
- spring-oxm-1.5.0-m2.jar
- spring-tx-2.5.1.jar
- spring-web-2.5.1.jar
- spring-webmvc-2.5.1.jar
- spring-ws-core-1.5.0-m2.jar
- spring-xml-1.5.0-m2.jar
- stax-api-1.0.1.jar
- wsdl4j-1.6.1.jar
- xalan-2.7.0.jar
- xercesImpl-2.8.1.jar
- xml-apis-1.3.04.jar
Now your project is created
3)Create any XML request message you required example :
<QuickViewRequest xmlns="http://mycompany.com/hr/schemas">
<QuickView>
<Plan>2006-07-03</Plan>
</QuickView>
</QuickViewRequest>
4)Now using XML tools create XSD file "quickview.xsd" will discuss each mapping in details copy xsd inside of web inf folder /WEB-INF/quickview.xsd"
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:hr="http://mycompany.com/hr/schemas"
elementFormDefault="qualified"
targetNamespace="http://mycompany.com/hr/schemas">
<xs:element name="QuickViewRequest">
<xs:complexType>
<xs:all>
<xs:element name="QuickView" type="hr:QuickViewType" />
</xs:all>
</xs:complexType>
</xs:element>
<xs:complexType name="QuickViewType">
<xs:sequence>
<xs:element name="Plan" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
Now you are ready to create web service
Add inside of web.xml following configuration
<web-app 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"
version="2.4">
<display-name>MyCompany HR Holiday Service</display-name>
<servlet>
<servlet-name>spring-ws</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>spring-ws</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
now create "spring-ws-servlet.xml" with following configuration
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean
class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
<property name="mappings">
<props>
<prop key="{http://mycompany.com/hr/schemas}QuickViewRequest">QuickViewEndpoint</prop>
</props>
</property>
<property name="interceptors">
<bean
class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor" />
</property>
</bean>
<bean id="QuickViewEndpoint" class="com.mycompany.hr.ws.QuickViewEndpoint">
<constructor-arg ref="iQuickViewResourceService" />
</bean>
<bean id="iQuickViewResourceService" class="com.mycompany.hr.service.QuickViewResourceService" />
<!--
<bean
class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
<property name="mappings">
<props>
<prop key="{http://mycompany.com/hr/schemas}QuickViewRequest">QuickViewEndpoint</prop>
</props>
</property>
<property name="interceptors">
<bean
class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor" />
</property>
</bean>
-->
<bean id="quickview"
class="org.springframework.ws.wsdl.wsdl11.DynamicWsdl11Definition">
<property name="builder">
<bean
class="org.springframework.ws.wsdl.wsdl11.builder.XsdBasedSoap11Wsdl4jDefinitionBuilder">
<property name="schema" value="/WEB-INF/quickview.xsd" />
<property name="portTypeName" value="QuickViewResource" />
<property name="locationUri" value="http://localhost:8080/ws-tutorial/services" />
<property name="targetNamespace" value="http://mycompany.com/hr/definitions" />
</bean>
</property>
</bean>
</beans>
5) Create interface and give its implementation in class
public interface IQuickViewResourceService {
public String getQuickView(String url,String Plan);
}
public class QuickViewResourceService implements IQuickViewResourceService {
private static final Log logger = LogFactory.getLog(StubHumanResourceService.class);
public String getQuickView(String URL ,String plan) {
logger.info("Inside Service-->."+plan);
return "Vaquar";
}
}
6) Create End point
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.xpath.XPath;
import org.springframework.ws.server.endpoint.AbstractJDomPayloadEndpoint;
import com.mycompany.hr.service.HumanResourceService;
import com.mycompany.hr.service.IQuickViewResourceService;
public class QuickViewEndpoint extends AbstractJDomPayloadEndpoint {
private XPath Plan;
private IQuickViewResourceService iQuickViewResourceService;
public QuickViewEndpoint(IQuickViewResourceService iQuickViewResourceService) throws JDOMException {
this.iQuickViewResourceService = iQuickViewResourceService;
Namespace namespace = Namespace.getNamespace("hr", "http://mycompany.com/hr/schemas");
Plan = XPath.newInstance("//hr:Plan");
Plan.addNamespace(namespace);
}
protected Element invokeInternal(Element holidayRequest) throws Exception {
String name = "Vaquar Khan";
iQuickViewResourceService.getQuickView("",name);
System.out.println("QuickViewEndpoint ..........................");
return null;
}
}
7)We are going to write client for web service
public class QuickViewMain {
public static void main(String[] args) throws Exception {
try{
QuickViewRequestClient iQuickViewResourceService = new QuickViewRequestClient();
String url = "http://localhost:8080/ws-tutorial/services";
String Plan="Vaquar";
iQuickViewResourceService.getQuickView(Plan,url);
}catch(Exception e){
e.printStackTrace();
}
System.exit(0);
}
}
import java.text.SimpleDateFormat;
import java.util.Date;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.Namespace;
import org.jdom.transform.JDOMResult;
import org.jdom.transform.JDOMSource;
import org.springframework.ws.client.core.WebServiceTemplate;
/**
* Example client code using Spring-WS.
*/
public class QuickViewRequestClient {
private Namespace hrNs;
private WebServiceTemplate wsTemplate;
/**
* Default class constructor
*/
public QuickViewRequestClient() {
hrNs = Namespace.getNamespace("hr", "http://mycompany.com/hr/schemas");
wsTemplate = new WebServiceTemplate();
}
public void getQuickView(String plan,String url) {
Document document =
createQuickViewRequest(plan);
wsTemplate.sendSourceAndReceiveToResult(url, new JDOMSource(document.getRootElement()), new JDOMResult());
}
/**
* Creates a JDOM element representing a holiday request.
*/
private Document createQuickViewRequest(String Plan) {
Document document= new Document(new Element("QuickViewRequest", hrNs));
document.getRootElement()
.addContent(new Element("QuickView", hrNs).addContent(new Element("Plan", hrNs).setText("100")));
return document;
}
}
Add your war into tomcat server and run server and run java class "QuickViewMain " :)