net.javacrumbs.smock.springws.client.SmockClient Maven / Gradle / Ivy
/**
* 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.smock.springws.client;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import net.javacrumbs.smock.common.EndpointInterceptorClientAdapter;
import net.javacrumbs.smock.common.client.CommonSmockClient;
import org.springframework.context.ApplicationContext;
import org.springframework.util.Assert;
import org.springframework.ws.client.core.WebServiceTemplate;
import org.springframework.ws.client.core.support.WebServiceGatewaySupport;
import org.springframework.ws.client.support.interceptor.ClientInterceptor;
import org.springframework.ws.server.EndpointInterceptor;
import org.springframework.ws.test.client.MockWebServiceServer;
import org.springframework.ws.test.support.MockStrategiesHelper;
/*
* Copyright 2005-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.
*/
/**
* Adds extra features to Spring WS client test support.
* @author Lukas Krecan
*/
public abstract class SmockClient extends CommonSmockClient {
/**
* Creates a {@code MockWebServiceServer} instance based on the given {@link WebServiceTemplate}.
* Supports interceptors that will be applied on the incomming message. Please note that acctually the interceptoes will
* be added to the {@link ClientInterceptor} set on the client side. it's an ugly hack, but that's the only way to do it
* without reimplementing the whole testing library. I hope it will change in next releases.
*
* @param webServiceTemplate the web service template
* @return the created server
*/
public static MockWebServiceServer createServer(WebServiceTemplate webServiceTemplate, EndpointInterceptor[] interceptors) {
if (interceptors!=null && interceptors.length>0)
{
List newInterceptors = new ArrayList();
if (webServiceTemplate.getInterceptors()!=null)
{
newInterceptors.addAll(Arrays.asList(webServiceTemplate.getInterceptors()));
}
newInterceptors.addAll(Arrays.asList(EndpointInterceptorClientAdapter.wrapEndpointInterceptors(interceptors)));
webServiceTemplate.setInterceptors(newInterceptors.toArray(new ClientInterceptor[newInterceptors.size()]));
}
return MockWebServiceServer.createServer(webServiceTemplate);
}
/**
* Creates a {@code MockWebServiceServer} instance based on the given {@link WebServiceGatewaySupport}.
* Supports interceptors that will be applied on the incomming message. Please note that acctually the interceptoes will
* be added to the {@link ClientInterceptor} set on the client side. it's an ugly hack, but that's the only way to do it
* without reimplementing the whole testing library. I hope it will change in next releases.
* @param gatewaySupport
* @param interceptors
* @return
*/
public static MockWebServiceServer createServer(WebServiceGatewaySupport gatewaySupport, EndpointInterceptor[] interceptors) {
Assert.notNull(gatewaySupport, "'gatewaySupport' must not be null");
return createServer(gatewaySupport.getWebServiceTemplate(), interceptors);
}
/**
* Creates a {@code MockWebServiceServer} instance based on the given {@link ApplicationContext}.
* Supports interceptors that will be applied on the incomming message. Please note that acctually the interceptoes will
* be added to the {@link ClientInterceptor} set on the client side. it's an ugly hack, but that's the only way to do it
* without reimplementing the whole testing library. I hope it will change in next releases.
* @param applicationContext
* @param interceptors
* @return
*/
public static MockWebServiceServer createServer(ApplicationContext applicationContext, EndpointInterceptor[] interceptors) {
MockStrategiesHelper strategiesHelper = new MockStrategiesHelper(applicationContext);
WebServiceTemplate webServiceTemplate = strategiesHelper.getStrategy(WebServiceTemplate.class);
if (webServiceTemplate != null) {
return createServer(webServiceTemplate, interceptors);
}
WebServiceGatewaySupport gatewaySupport = strategiesHelper.getStrategy(WebServiceGatewaySupport.class);
if (gatewaySupport != null) {
return createServer(gatewaySupport, interceptors);
}
throw new IllegalArgumentException(
"Could not find either WebServiceTemplate or WebServiceGatewaySupport in application context");
}
}