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 " :)
Technology blogs are also essential in offering readers unbiased reviews of products related to technology. These reviews are largely objective and can equip readers with sufficient information to help them make informed decisions about what devices would be best suited for their needs and so on.
ReplyDeleteTech Blog