package sk.novotnyr.movie;
import java.util.Date;
public class MovieReservation {
protected String title;
protected Date date;
protected int numberOfTickets;
// gettre a settre
}
Stiahneme Spring-WS. Do classpath:
- activation.jar
- commons-logging-1.1.1.jar
- log4j-1.2.15.jar
- saaj-api-1.3.jar
- saaj-impl-1.3.jar
- spring-web.jar
- spring-webmvc.jar
- spring-ws-1.5.2.jar
- spring.jar
- stax-api-1.0.1.jar
- xstream-1.3.jar
Kostra webovej aplikácie:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<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">
<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>/*</url-pattern>
</servlet-mapping>
</web-app>
spring-ws-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<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 id="movieReservationEndpoint" class="sk.novotnyr.movie.ws.XStreamMovieReservationEndpoint" />
<bean id="endpointMapping" class="org.springframework.ws.server.endpoint.mapping.UriEndpointMapping">
<property name="mappings">
<props>
<prop key="http://localhost:8080/movie/ws/reservation">movieReservationEndpoint</prop>
</props>
</property>
</bean>
</beans>
Dokument pre požiadavku
<?xml version="1.0" encoding="UTF-8"?>
<movieReservationRequest>
<title>Battlestar Galactica</title>
<date>2008-12-24</date>
<numberOfTickets>4</numberOfTickets>
</movieReservationRequest>
log4j.properties
log4j.rootCategory=INFO, stdout
log4j.logger.org.springframework.ws=DEBUG
log4j.logger.org.springframework.ws.client.MessageTracing.sent=TRACE
log4j.logger.org.springframework.ws.client.MessageTracing.received=TRACE
log4j.logger.org.springframework.ws.server.MessageTracing=TRACE
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p [%c{3}] %m%n
Endpoint
package sk.novotnyr.movie.ws;
import org.springframework.oxm.xstream.XStreamMarshaller;
import org.springframework.ws.server.endpoint.AbstractMarshallingPayloadEndpoint;
import sk.novotnyr.movie.MovieReservation;
import com.thoughtworks.xstream.converters.basic.DateConverter;
public class XStreamMovieReservationEndpoint extends AbstractMarshallingPayloadEndpoint {
@Override
protected Object invokeInternal(Object object) throws Exception {
MovieReservation movieReservationRequest = (MovieReservation) object;
System.out.println(movieReservationRequest.getTitle());
System.out.println(movieReservationRequest.getDate());
System.out.println(movieReservationRequest.getNumberOfTickets());
// one-way messages return null
return null;
}
@Override
public void afterPropertiesSet() throws Exception {
super.afterPropertiesSet();
XStreamMarshaller marshaller = new XStreamMarshaller();
marshaller.addAlias("movieReservationRequest", MovieReservation.class);
marshaller.getXStream().registerConverter(new DateConverter("yyyy-DD-mm", new String[]{}));
setMarshaller(marshaller);
setUnmarshaller(marshaller);
}
}
Klient
package sk.novotnyr.movie.ws;
import java.io.FileReader;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.springframework.ws.client.core.WebServiceTemplate;
public class Client {
public static void main(String[] args) throws Exception {
WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
webServiceTemplate.setDefaultUri("http://localhost:8080/movie/ws/reservation");
StreamSource source = new StreamSource(new FileReader("D:\\Projects\\movie-ws\\web\\WEB-INF\\xml\\movieReservationRequest.xml"));
StreamResult result = new StreamResult(System.out);
webServiceTemplate.sendSourceAndReceiveToResult(source, result);
}
}