net.javacrumbs.springws.test.helper.InMemoryWebServiceMessageSender Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of spring-ws-test Show documentation
Show all versions of spring-ws-test Show documentation
Spring WS Test is a tool to simplify Spring WS client
functional testing.
/**
* Copyright 2009-2010 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 net.javacrumbs.springws.test.helper;
import static net.javacrumbs.springws.test.helper.DefaultStrategiesHelperFactory.createMessageFactory;
import static net.javacrumbs.springws.test.helper.DefaultStrategiesHelperFactory.getDefaultStrategiesHelper;
import java.io.IOException;
import java.net.URI;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.ws.WebServiceMessageFactory;
import org.springframework.ws.transport.WebServiceMessageReceiver;
import org.springframework.ws.transport.WebServiceMessageSender;
import org.springframework.ws.transport.http.MessageDispatcherServlet;
/**
* Sends messages locally in memory. Cretes {@link InMemoryWebServiceConnection} that sends the message directly to {@link WebServiceMessageReceiver}. Used for server side test.
* @author Lukas Krecan
*
*/
public class InMemoryWebServiceMessageSender implements WebServiceMessageSender, ApplicationContextAware, InitializingBean {
private WebServiceMessageFactory messageFactory;
private WebServiceMessageReceiver webServiceMessageReceiver;
private ApplicationContext applicationContext;
private static final String DEFAULT_MESSAGE_RECEIVER_BEAN_NAME = MessageDispatcherServlet.DEFAULT_MESSAGE_RECEIVER_BEAN_NAME;
private final Log logger = LogFactory.getLog(getClass());
public InMemoryWebServiceConnection createConnection(URI uri) throws IOException {
return new InMemoryWebServiceConnection(uri, messageFactory, webServiceMessageReceiver);
}
public boolean supports(URI uri) {
return true;
}
public WebServiceMessageFactory getMessageFactory() {
return messageFactory;
}
public WebServiceMessageReceiver getWebServiceMessageReceiver() {
return webServiceMessageReceiver;
}
/**
* Creates {@link WebServiceMessageReceiver}. If it's not in the applicationContext, uses {@link DefaultWsTestHelper} to create it.
* @return
*/
protected WebServiceMessageReceiver createWebServiceMessageReceiver() {
if (applicationContext!=null && applicationContext.containsBean(DEFAULT_MESSAGE_RECEIVER_BEAN_NAME))
{
return (WebServiceMessageReceiver) applicationContext.getBean(DEFAULT_MESSAGE_RECEIVER_BEAN_NAME, WebServiceMessageReceiver.class);
}
else
{
logger.debug("No WebServiceMessageReceiver found, using default");
return (WebServiceMessageReceiver) getDefaultStrategiesHelper().getDefaultStrategy(WebServiceMessageReceiver.class, applicationContext);
}
}
public void afterPropertiesSet(){
initializeMessageReceiver();
initializeMessageFactory();
}
protected void initializeMessageReceiver() {
if (webServiceMessageReceiver==null)
{
webServiceMessageReceiver = createWebServiceMessageReceiver();
}
}
protected void initializeMessageFactory() {
if (messageFactory==null)
{
messageFactory = createMessageFactory(applicationContext);
}
}
void setWebServiceMessageReceiver(WebServiceMessageReceiver webServiceMessageReceiver) {
this.webServiceMessageReceiver = webServiceMessageReceiver;
}
public ApplicationContext getApplicationContext() {
return applicationContext;
}
public void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
void setMessageFactory(WebServiceMessageFactory messageFactory) {
this.messageFactory = messageFactory;
}
}