6. Add dynamic-wsdl configuration to spring-ws-servlet.xml. The <dynamic-wsdl> builds a WSDL from a XSD schema so that you don’t have to create a wsdl by hand.
<?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:sws="http://www.springframework.org/schema/web-services"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/web-services
http://www.springframework.org/schema/web-services/web-services-2.0.xsd">
<!-- detects @PayloadRoot -->
<sws:annotation-driven/>
<sws:dynamic-wsdl id="bookstore" portTypeName="BookStoreInterface"
locationUri="http://localhost:8080/bookstore-web-service/services"
targetNamespace="http://www.bookstore.com/schema">
<sws:xsd location="WEB-INF/bookstore.xsd"/>
</sws:dynamic-wsdl>
</beans>
|
Please note here that the id “bookstore” will be used to access wsdl by the clients and all the client request will be handled by the MessageDispatcherServlet configured in web.xml
7. Build the project using the following maven command from bookstore-web-service directory
mvn clean package
|
This output of this command will bookstore-web-service.war created inside bookstore-web-service\target directory
8. Deploy bookstore-web-service.war by copying it in C:\ apache-tomcat-7.0.42\webapps directory. Start tomcat by running startup.bat located in C:\ apache-tomcat-7.0.42\bin directory.
9. Access wsdl from the browser using the following url
wsdl will be displayed in the browser indicating that the bookstore web service is published and is now available for client/consumer. However there are few more steps to be done before the client could invoke bookstore web services.
10. Bind the contract defined by bookstore.xsd to java classes using JAXB’s xjc command at command prompt. Run the xjc command from bookstore-web-service\src\main directory
xjc –d java webapp\WEB-INF\bookstore.xsd
|
This command will result in creation of following java classes
com\bookstore\schema\AddBookRequest.java
com\bookstore\schema\AddBookResponse.java
com\bookstore\schema\Book.java
com\bookstore\schema\DeleteBookRequest.java
com\bookstore\schema\DeleteBookResponse.java
com\bookstore\schema\GenericResponse.java
com\bookstore\schema\GetBookRequest.java
com\bookstore\schema\GetBookResponse.java
com\bookstore\schema\ObjectFactory.java
com\bookstore\schema\package-info.java
|
Now build the project using mvn clean package from bookstore-web-service directory and check that bookstore-web-service.war is created successfully.
11. Add a provider class BookStoreServiceProvider in a new com.bookstore.core package for servicing add, get and delete book requests. The requests don’t directly come to the provider instead the endpoints forward the request to this provider.
package com.bookstore.core;
import java.util.Hashtable;
import org.springframework.stereotype.Service;
import com.bookstore.schema.Book;
@Service
public class BookStoreServiceProvider {
Hashtable<String, Object> store = new Hashtable<String, Object>();
public void addBook(Book book) {
store.put(book.getName(), book);
}
public void delete(String bookName) {
store.remove(bookName);
}
public Book getByName(String name) {
return (Book) store.get(name);
}
}
|
12. Create endpoints to handle add, get and delete book requests. Here all the endpoints are implemented in a single BookStoreEndpoints class in com.bookstore.endpoints package
package com.bookstore.endpoints;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;
import com.bookstore.core.BookStoreServiceProvider;
import com.bookstore.schema.AddBookRequest;
import com.bookstore.schema.Book;
import com.bookstore.schema.DeleteBookRequest;
import com.bookstore.schema.GenericResponse;
import com.bookstore.schema.GetBookRequest;
import com.bookstore.schema.GetBookResponse;
import com.bookstore.schema.ObjectFactory;
@Endpoint
public class BookStoreEndpoints {
@Autowired
BookStoreServiceProvider bookStoreServiceProvider;
ObjectFactory factory = new ObjectFactory();
@PayloadRoot(localPart="AddBookRequest", namespace="http://www.bookstore.com/schema")
@ResponsePayload
public GenericResponse addBook(@RequestPayload AddBookRequest request) {
Book book = request.getBook();
bookStoreServiceProvider.addBook(book);
GenericResponse response = factory.createGenericResponse();
response.setCode(-1);
response.setMessage("Book Added Successfully");
return response;
}
@PayloadRoot(localPart="DeleteBookRequest", namespace="http://www.bookstore.com/schema")
@ResponsePayload
public GenericResponse deleteBook(@RequestPayload DeleteBookRequest request) {
String bookName = request.getName();
bookStoreServiceProvider.delete(bookName);
GenericResponse response = factory.createGenericResponse();
response.setCode(-1);
response.setMessage("Book Deleted Successfully");
return response;
}
@PayloadRoot(localPart="GetBookRequest", namespace="http://www.bookstore.com/schema")
@ResponsePayload
public GetBookResponse getBook(@RequestPayload GetBookRequest request) {
String bookName = request.getName();
Book book = bookStoreServiceProvider.getByName(bookName);
GetBookResponse response = factory.createGetBookResponse();
response.setBook(book);
return response;
}
}
|
No comments :
Post a Comment