Moved Spring-WS to separate dir.
This commit is contained in:
16
samples/echo/src/etc/test-resources/log4j.properties
Normal file
16
samples/echo/src/etc/test-resources/log4j.properties
Normal file
@@ -0,0 +1,16 @@
|
||||
log4j.rootCategory=WARN, stdout, logfile
|
||||
|
||||
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
|
||||
|
||||
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
|
||||
log4j.appender.logfile.File=${@PROJECT_NAME@.root}/@PROJECT_NAME@.log
|
||||
log4j.appender.logfile.MaxFileSize=512KB
|
||||
|
||||
# Keep three backup files
|
||||
log4j.appender.logfile.MaxBackupIndex=3
|
||||
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
|
||||
|
||||
#Pattern to output : date priority [category] - <message>line_separator
|
||||
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%n
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2006 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.ws.samples.echo.service;
|
||||
|
||||
/**
|
||||
* Defines the "business logic" of the web service.
|
||||
*
|
||||
* @author Ingo Siebert
|
||||
* @author Arjen Poutsma
|
||||
*/
|
||||
public interface EchoService {
|
||||
|
||||
/**
|
||||
* Returns the given string.
|
||||
*
|
||||
* @return <code>s</code>
|
||||
*/
|
||||
String echo(String s);
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2006 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.ws.samples.echo.service.impl;
|
||||
|
||||
import org.springframework.ws.samples.echo.service.EchoService;
|
||||
|
||||
/**
|
||||
* Default implementation of <code>EchoService</code>.
|
||||
*
|
||||
* @author Ingo Siebert
|
||||
* @author Arjen Poutsma
|
||||
*/
|
||||
public class EchoServiceImpl implements EchoService {
|
||||
|
||||
public String echo(String s) {
|
||||
return s;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
* Copyright 2006 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.ws.samples.echo.ws;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.w3c.dom.Text;
|
||||
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.ws.endpoint.AbstractDomPayloadEndpoint;
|
||||
import org.springframework.ws.samples.echo.service.EchoService;
|
||||
|
||||
/**
|
||||
* Simple echoing Web service endpoint. Uses a <code>EchoService</code> to create a response string.
|
||||
*
|
||||
* @author Ingo Siebert
|
||||
* @author Arjen Poutsma
|
||||
*/
|
||||
public class EchoEndpoint extends AbstractDomPayloadEndpoint {
|
||||
|
||||
/**
|
||||
* Namespace of both request and response.
|
||||
*/
|
||||
public static final String NAMESPACE_URI = "http://www.springframework.org/spring-ws/samples/echo";
|
||||
|
||||
/**
|
||||
* The local name of the expected request.
|
||||
*/
|
||||
public static final String ECHO_REQUEST_LOCAL_NAME = "echoRequest";
|
||||
|
||||
/**
|
||||
* The local name of the created response.
|
||||
*/
|
||||
public static final String ECHO_RESPONSE_LOCAL_NAME = "echoResponse";
|
||||
|
||||
private EchoService echoService;
|
||||
|
||||
/**
|
||||
* Sets the "business service" to delegate to.
|
||||
*/
|
||||
public void setEchoService(EchoService echoService) {
|
||||
this.echoService = echoService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads the given <code>requestElement</code>, and sends a the response back.
|
||||
*
|
||||
* @param requestElement the contents of the SOAP message as DOM elements
|
||||
* @param document a DOM document to be used for constructing <code>Node</code>s
|
||||
* @return the response element
|
||||
*/
|
||||
protected Element invokeInternal(Element requestElement, Document document) throws Exception {
|
||||
Assert.isTrue(NAMESPACE_URI.equals(requestElement.getNamespaceURI()), "Invalid namespace");
|
||||
Assert.isTrue(ECHO_REQUEST_LOCAL_NAME.equals(requestElement.getLocalName()), "Invalid local name");
|
||||
NodeList children = requestElement.getChildNodes();
|
||||
Text requestText = null;
|
||||
for (int i = 0; i < children.getLength(); i++) {
|
||||
if (children.item(i).getNodeType() == Node.TEXT_NODE) {
|
||||
requestText = (Text) children.item(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (requestText == null) {
|
||||
throw new IllegalArgumentException("Could not find request text node");
|
||||
}
|
||||
|
||||
String echo = echoService.echo(requestText.getNodeValue());
|
||||
Element responseElement = document.createElementNS(NAMESPACE_URI, ECHO_RESPONSE_LOCAL_NAME);
|
||||
Text responseText = document.createTextNode(echo);
|
||||
responseElement.appendChild(responseText);
|
||||
return responseElement;
|
||||
}
|
||||
}
|
||||
56
samples/echo/src/main/webapp/WEB-INF/applicationContext.xml
Executable file
56
samples/echo/src/main/webapp/WEB-INF/applicationContext.xml
Executable file
@@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
|
||||
<beans>
|
||||
<!-- Spring-WS beans -->
|
||||
<bean id="messageDispatcher" class="org.springframework.ws.soap.SoapMessageDispatcher">
|
||||
<description>
|
||||
The MessageDispatcher is responsible for routing messages to endpoints.</description>
|
||||
<property name="endpointMappings" ref="payloadMapping"/>
|
||||
<property name="endpointExceptionResolvers" ref="endpointExceptionResolver"/>
|
||||
</bean>
|
||||
|
||||
<bean id="payloadMapping" class="org.springframework.ws.endpoint.mapping.PayloadRootQNameEndpointMapping">
|
||||
<description>
|
||||
This endpoint mapping uses the qualified name of the payload (body contents) to determine the endpoint for
|
||||
an incoming message. Every message is passed to the default endpoint. Additionally, messages are logged
|
||||
using the logging interceptor.</description>
|
||||
<property name="defaultEndpoint" ref="echoEndpoint"/>
|
||||
<property name="interceptors">
|
||||
<list>
|
||||
<ref local="validatingInterceptor"/>
|
||||
<ref local="loggingInterceptor"/>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="validatingInterceptor" class="org.springframework.ws.endpoint.interceptor.PayloadValidatingInterceptor">
|
||||
<description>
|
||||
This interceptor validates both incoming and outgoing message contents according to the 'echo.xsd' XML
|
||||
Schema file.</description>
|
||||
<property name="schema" value="/echo.xsd"/>
|
||||
<property name="validateRequest" value="true"/>
|
||||
<property name="validateResponse" value="true"/>
|
||||
</bean>
|
||||
|
||||
<bean id="loggingInterceptor" class="org.springframework.ws.endpoint.interceptor.PayloadLoggingInterceptor">
|
||||
<description>
|
||||
This interceptor logs the message payload.</description>
|
||||
</bean>
|
||||
|
||||
<bean id="echoEndpoint" class="org.springframework.ws.samples.echo.ws.EchoEndpoint">
|
||||
<description>
|
||||
This endpoint handles echo requests.</description>
|
||||
<property name="echoService" ref="echoService"/>
|
||||
</bean>
|
||||
|
||||
<bean id="echoWsdl" class="org.springframework.ws.wsdl.wsdl11.SimpleWsdl11Definition">
|
||||
<property name="wsdl" value="/echo.wsdl"/>
|
||||
</bean>
|
||||
|
||||
<bean id="endpointExceptionResolver" class="org.springframework.ws.soap.endpoint.SimpleSoapExceptionResolver"/>
|
||||
|
||||
<!-- "Business" (POJO) services -->
|
||||
<bean id="echoService" class="org.springframework.ws.samples.echo.service.impl.EchoServiceImpl"/>
|
||||
|
||||
|
||||
</beans>
|
||||
7
samples/echo/src/main/webapp/WEB-INF/log4j.properties
Normal file
7
samples/echo/src/main/webapp/WEB-INF/log4j.properties
Normal file
@@ -0,0 +1,7 @@
|
||||
log4j.rootLogger=WARN, stdout
|
||||
log4j.logger.org.springframework.ws=DEBUG
|
||||
log4j.logger.org.springframework.xml=DEBUG
|
||||
|
||||
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
|
||||
32
samples/echo/src/main/webapp/WEB-INF/springws-servlet.xml
Executable file
32
samples/echo/src/main/webapp/WEB-INF/springws-servlet.xml
Executable file
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
|
||||
"http://www.springframework.org/dtd/spring-beans.dtd">
|
||||
<beans>
|
||||
<bean id="messageEndpointHandlerAdapter"
|
||||
class="org.springframework.ws.transport.http.MessageEndpointHandlerAdapter">
|
||||
<description>
|
||||
This handler adapter makes sure that Spring's DispatcherServlet supports MessageEndpoint instances as
|
||||
handlers. It uses a SAAJ to construct SoapMessageContexts (and SoapMessages).</description>
|
||||
<property name="messageContextFactory">
|
||||
<bean class="org.springframework.ws.soap.saaj.SaajSoapMessageContextFactory"/>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="wsdlDefinitionHandlerAdapter" class="org.springframework.ws.transport.http.WsdlDefinitionHandlerAdapter">
|
||||
<description>
|
||||
This handler adapter adds support for WsdlDefinitions to Spring's DispatcherServlet. It transforms location
|
||||
attributes in the original WSDL to reflect the URL of the incoming HTTP request.</description>
|
||||
<property name="transformLocations" value="true"/>
|
||||
</bean>
|
||||
|
||||
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
|
||||
<description>
|
||||
All incoming request are mapped to the messageDispatcher defined in applicationContext-ws.xml</description>
|
||||
<property name="defaultHandler" ref="messageDispatcher"/>
|
||||
<property name="mappings">
|
||||
<props>
|
||||
<prop key="/services/*">messageDispatcher</prop>
|
||||
<prop key="echo.wsdl">echoWsdl</prop>
|
||||
</props>
|
||||
</property>
|
||||
</bean>
|
||||
</beans>
|
||||
57
samples/echo/src/main/webapp/WEB-INF/web.xml
Executable file
57
samples/echo/src/main/webapp/WEB-INF/web.xml
Executable file
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
|
||||
<!DOCTYPE web-app PUBLIC
|
||||
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
|
||||
"http://java.sun.com/dtd/web-app_2_3.dtd">
|
||||
|
||||
<web-app>
|
||||
<display-name>
|
||||
"Echo" WebService</display-name>
|
||||
<description>Returns a given string(only A-Z and a-z chars allowed). See echo.xsd file.</description>
|
||||
|
||||
<!--Location of the Log4J config file, for initialization and refresh checks.
|
||||
Applied by Log4jConfigListener. -->
|
||||
<context-param>
|
||||
<param-name>log4jConfigLocation</param-name>
|
||||
<param-value>/WEB-INF/log4j.properties</param-value>
|
||||
</context-param>
|
||||
|
||||
<!-- Logger for web server specific messages. -->
|
||||
<listener>
|
||||
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
|
||||
</listener>
|
||||
|
||||
<!-- Loads the root application context of this web app at startup.
|
||||
Use WebApplicationContextUtils.getWebApplicationContext(servletContext)
|
||||
to access it anywhere in the web application, outside of the framework.
|
||||
|
||||
The root context is the parent of all servlet-specific contexts.
|
||||
This means that its beans are automatically available in these child contexts,
|
||||
both for getBean(name) calls and (external) bean references. -->
|
||||
<listener>
|
||||
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
|
||||
</listener>
|
||||
|
||||
<!-- Starts the web service servlet. -->
|
||||
<servlet>
|
||||
<servlet-name>springws</servlet-name>
|
||||
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<!-- We map all service request to the springws servlet. -->
|
||||
<servlet-mapping>
|
||||
<servlet-name>springws</servlet-name>
|
||||
<url-pattern>/services</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>springws</servlet-name>
|
||||
<url-pattern>*.wsdl</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<mime-mapping>
|
||||
<extension>xsd</extension>
|
||||
<mime-type>text/xml</mime-type>
|
||||
</mime-mapping>
|
||||
|
||||
</web-app>
|
||||
48
samples/echo/src/main/webapp/echo.wsdl
Normal file
48
samples/echo/src/main/webapp/echo.wsdl
Normal file
@@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
||||
xmlns:tns="http://www.springframework.org/spring-ws/samples/echo"
|
||||
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://www.springframework.org/spring-ws/samples/echo">
|
||||
|
||||
<wsdl:types>
|
||||
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||
<xsd:import namespace="http://www.springframework.org/spring-ws/samples/echo/schemas"
|
||||
schemaLocation="echo.xsd"/>
|
||||
</xsd:schema>
|
||||
</wsdl:types>
|
||||
|
||||
<wsdl:message name="echoRequest">
|
||||
<wsdl:part name="echoString" element="tns:echoRequest"/>
|
||||
</wsdl:message>
|
||||
|
||||
<wsdl:message name="echoResponse">
|
||||
<wsdl:part name="theEcho" element="tns:echoResponse"/>
|
||||
</wsdl:message>
|
||||
|
||||
<wsdl:portType name="TestServicePortType">
|
||||
<wsdl:operation name="echo">
|
||||
<wsdl:input message="tns:echoRequest" name="echoRequest"/>
|
||||
<wsdl:output message="tns:echoResponse" name="echoResponse"/>
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
|
||||
<wsdl:binding name="TestServiceHttpBinding" type="tns:TestServicePortType">
|
||||
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
|
||||
<wsdl:operation name="echo">
|
||||
<wsdlsoap:operation soapAction=""/>
|
||||
<wsdl:input name="echoRequest">
|
||||
<wsdlsoap:body use="literal"/>
|
||||
</wsdl:input>
|
||||
<wsdl:output name="echoResponse">
|
||||
<wsdlsoap:body use="literal"/>
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
|
||||
<wsdl:service name="TestService">
|
||||
<wsdl:port binding="tns:TestServiceHttpBinding" name="TestServiceHttpPort">
|
||||
<wsdlsoap:address location="http://localhost:8080/echo/services"/>
|
||||
</wsdl:port>
|
||||
</wsdl:service>
|
||||
</wsdl:definitions>
|
||||
|
||||
15
samples/echo/src/main/webapp/echo.xsd
Executable file
15
samples/echo/src/main/webapp/echo.xsd
Executable file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified"
|
||||
targetNamespace="http://www.springframework.org/spring-ws/samples/echo"
|
||||
xmlns:tns="http://www.springframework.org/spring-ws/samples/echo">
|
||||
|
||||
<element name="echoRequest">
|
||||
<simpleType>
|
||||
<restriction base="string">
|
||||
<pattern value="([A-Z]|[a-z])+"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
</element>
|
||||
|
||||
<element name="echoResponse" type="string"/>
|
||||
</schema>
|
||||
14
samples/echo/src/main/webapp/index.html
Executable file
14
samples/echo/src/main/webapp/index.html
Executable file
@@ -0,0 +1,14 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta name="Author" content="Ingo Siebert">
|
||||
<title>Spring WS test page</title>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF">
|
||||
<h1>Spring-WS Echo</h1>
|
||||
If you see this page, the WAR deployment was successful.
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright 2006 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.ws.samples.echo.ws;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
||||
import org.custommonkey.xmlunit.XMLTestCase;
|
||||
import org.easymock.MockControl;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Text;
|
||||
|
||||
import org.springframework.ws.samples.echo.service.EchoService;
|
||||
|
||||
public class EchoEndpointTest extends XMLTestCase {
|
||||
|
||||
private EchoEndpoint endpoint;
|
||||
|
||||
private Document requestDocument;
|
||||
|
||||
private Document responseDocument;
|
||||
|
||||
private MockControl control;
|
||||
|
||||
private EchoService mock;
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
endpoint = new EchoEndpoint();
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
documentBuilderFactory.setNamespaceAware(true);
|
||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
requestDocument = documentBuilder.newDocument();
|
||||
responseDocument = documentBuilder.newDocument();
|
||||
control = MockControl.createControl(EchoService.class);
|
||||
mock = (EchoService) control.getMock();
|
||||
endpoint.setEchoService(mock);
|
||||
}
|
||||
|
||||
public void testInvokeInternal() throws Exception {
|
||||
Element echoRequest =
|
||||
requestDocument.createElementNS(EchoEndpoint.NAMESPACE_URI, EchoEndpoint.ECHO_REQUEST_LOCAL_NAME);
|
||||
String content = "ABC";
|
||||
Text requestText = requestDocument.createTextNode(content);
|
||||
echoRequest.appendChild(requestText);
|
||||
String result = "DEF";
|
||||
control.expectAndReturn(mock.echo(content), result);
|
||||
control.replay();
|
||||
Element echoResponse = endpoint.invokeInternal(echoRequest, responseDocument);
|
||||
assertEquals("Invalid namespace", EchoEndpoint.NAMESPACE_URI, echoResponse.getNamespaceURI());
|
||||
assertEquals("Invalid namespace", EchoEndpoint.ECHO_RESPONSE_LOCAL_NAME, echoResponse.getLocalName());
|
||||
Text responseText = (Text) echoResponse.getChildNodes().item(0);
|
||||
assertEquals("Invalid content", result, responseText.getNodeValue());
|
||||
control.verify();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user