Author: ningjiang Date: Tue Nov 20 14:41:43 2012 New Revision: 1411686 URL: http://svn.apache.org/viewvc?rev=1411686&view=rev Log: CAMEL-5724 Added test patch with thanks to Andrej
Added: camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilter.java camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/MessageFilterResolvingDefaultsTest.java camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/MessageFilterResolvingTest.java camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/filter/ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/filter/impl/ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilterTest.java camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/EmptyMessageFilter.java camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/GlobalMessageFilter.java camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/LocalMessageFilter.java camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/DefaultMessageFilter-context.xml camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/MessageFilter-context.xml camel/trunk/components/camel-spring-ws/src/test/resources/sampleAttachment.txt Removed: camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/BasicFilterStrategy.java Modified: camel/trunk/components/camel-spring-ws/pom.xml camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceComponent.java camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConfiguration.java Modified: camel/trunk/components/camel-spring-ws/pom.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/pom.xml?rev=1411686&r1=1411685&r2=1411686&view=diff ============================================================================== --- camel/trunk/components/camel-spring-ws/pom.xml (original) +++ camel/trunk/components/camel-spring-ws/pom.xml Tue Nov 20 14:41:43 2012 @@ -124,6 +124,18 @@ <scope>test</scope> </dependency> <dependency> + <groupId>net.javacrumbs</groupId> + <artifactId>smock-springws</artifactId> + <version>0.5</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.easytesting</groupId> + <artifactId>fest-assert</artifactId> + <version>1.4</version> + <scope>test</scope> + </dependency> + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> Modified: camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceComponent.java?rev=1411686&r1=1411685&r2=1411686&view=diff ============================================================================== --- camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceComponent.java (original) +++ camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceComponent.java Tue Nov 20 14:41:43 2012 @@ -68,8 +68,8 @@ public class SpringWebserviceComponent e addConsumerConfiguration(remaining, parameters, configuration); addProducerConfiguration(remaining, parameters, configuration); addXmlConverterToConfiguration(parameters, configuration); - setProperties(configuration, parameters); configureMessageFilter(parameters, configuration); + setProperties(configuration, parameters); return new SpringWebserviceEndpoint(this, uri, configuration); } Modified: camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConfiguration.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConfiguration.java?rev=1411686&r1=1411685&r2=1411686&view=diff ============================================================================== --- camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConfiguration.java (original) +++ camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConfiguration.java Tue Nov 20 14:41:43 2012 @@ -22,7 +22,7 @@ import java.net.URISyntaxException; import org.apache.camel.component.spring.ws.bean.CamelEndpointDispatcher; import org.apache.camel.component.spring.ws.bean.CamelEndpointMapping; import org.apache.camel.component.spring.ws.filter.MessageFilter; -import org.apache.camel.component.spring.ws.filter.impl.BasicFilterStrategy; +import org.apache.camel.component.spring.ws.filter.impl.BasicMessageFilter; import org.apache.camel.component.spring.ws.type.EndpointMappingKey; import org.apache.camel.converter.jaxp.XmlConverter; import org.apache.camel.util.jsse.SSLContextParameters; @@ -161,7 +161,7 @@ public class SpringWebserviceConfigurati */ public MessageFilter getMessageFilter() { if (this.messageFilter == null) { - this.messageFilter = new BasicFilterStrategy(); + this.messageFilter = new BasicMessageFilter(); } return this.messageFilter; } Added: camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilter.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilter.java?rev=1411686&view=auto ============================================================================== --- camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilter.java (added) +++ camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilter.java Tue Nov 20 14:41:43 2012 @@ -0,0 +1,133 @@ +package org.apache.camel.component.spring.ws.filter.impl; + +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import javax.activation.DataHandler; +import javax.xml.namespace.QName; + +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.component.spring.ws.SpringWebserviceConstants; +import org.apache.camel.component.spring.ws.filter.MessageFilter; +import org.springframework.ws.WebServiceMessage; +import org.springframework.ws.soap.SoapHeader; +import org.springframework.ws.soap.SoapMessage; + +/** + * This class populates a SOAP header and attachments in the WebServiceMessage instance. + * + * @author and...@chocolatejar.eu + * + */ +public class BasicMessageFilter implements MessageFilter { + private static final String LOWERCASE_BREADCRUMB_ID = "breadcrumbid"; + + @Override + public void filterProducer(Exchange exchange, WebServiceMessage response) { + if (exchange != null) { + processHeaderAndAttachments(exchange.getIn(), response); + } + } + + @Override + public void filterConsumer(Exchange exchange, WebServiceMessage response) { + if (exchange != null) { + processHeaderAndAttachments(exchange.getOut(), response); + } + } + + /** + * If applicable this method adds a SOAP headers and attachments. + * + * @param inOrOut + * @param response + */ + protected void processHeaderAndAttachments(Message inOrOut, + WebServiceMessage response) { + + if (response instanceof SoapMessage) { + SoapMessage soapMessage = (SoapMessage) response; + processSoapHeader(inOrOut, soapMessage); + doProcessSoapAttachments(inOrOut, soapMessage); + } + } + + /** + * If applicable this method adds a SOAP header. + * + * @param inOrOut + * @param soapMessage + */ + protected void processSoapHeader(Message inOrOut, SoapMessage soapMessage) { + boolean isHeaderAvailable = inOrOut != null + && inOrOut.getHeaders() != null + && !inOrOut.getHeaders().isEmpty(); + + if (isHeaderAvailable) { + doProcessSoapHeader(inOrOut, soapMessage); + } + } + + /** + * The SOAP header is populated from exchange.getOut().getHeaders() if this + * class is used by the consumer or exchange.getIn().getHeaders() if this + * class is used by the producer. + * + * If .getHeaders() contains under a certain key a value with the QName + * object, it is directly added as a new header element. If it contains only + * a String value, it is transformed into a header attribute. + * + * Following headers are excluded: {@code LOWERCASE_BREADCRUMB_ID} + * + * @see SpringWebserviceConstants.SPRING_WS_SOAP_ACTION, @see + * SpringWebserviceConstants.SPRING_WS_ADDRESSING_ACTION), @see + * SpringWebserviceConstants.SPRING_WS_ENDPOINT_URI + * + * This the convinient method for overriding. + * @param inOrOut + * @param soapMessage + */ + protected void doProcessSoapHeader(Message inOrOut, SoapMessage soapMessage) { + SoapHeader soapHeader = soapMessage.getSoapHeader(); + + Map<String, Object> headers = inOrOut.getHeaders(); + + HashSet<String> headerKeySet = new HashSet<String>(headers.keySet()); + + headerKeySet.remove(SpringWebserviceConstants.SPRING_WS_SOAP_ACTION.toLowerCase()); + headerKeySet.remove(SpringWebserviceConstants.SPRING_WS_ADDRESSING_ACTION.toLowerCase()); + headerKeySet.remove(SpringWebserviceConstants.SPRING_WS_ENDPOINT_URI.toLowerCase()); + + headerKeySet.remove(LOWERCASE_BREADCRUMB_ID); + + for (String name : headerKeySet) { + Object value = headers.get(name); + + if (value instanceof QName) { + soapHeader.addHeaderElement((QName) value); + } else { + if (value instanceof String) { + soapHeader.addAttribute(new QName(name), value + ""); + } + } + } + } + + /** + * Populate SOAP attachments from in or out exchange message. This the convenient method for overriding. + * + * @param inOrOut + * @param response + */ + protected void doProcessSoapAttachments(Message inOrOut, SoapMessage response) { + Map<String, DataHandler> attachments = inOrOut.getAttachments(); + + Set<String> keySet = new HashSet<String>(attachments.keySet()); + for (String key : keySet) { + response.addAttachment(key, attachments.get(key)); + } + } + +} Added: camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/MessageFilterResolvingDefaultsTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/MessageFilterResolvingDefaultsTest.java?rev=1411686&view=auto ============================================================================== --- camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/MessageFilterResolvingDefaultsTest.java (added) +++ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/MessageFilterResolvingDefaultsTest.java Tue Nov 20 14:41:43 2012 @@ -0,0 +1,75 @@ +package org.apache.camel.component.spring.ws; + +import java.io.IOException; +import java.net.URI; + +import javax.xml.namespace.QName; + +import net.javacrumbs.smock.springws.client.AbstractSmockClientTest; + +import org.apache.camel.ProducerTemplate; +import org.junit.After; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.ws.WebServiceMessage; +import org.springframework.ws.test.client.RequestMatcher; + +/** + * Check if the MessageFilter is used and resolved from endpoint uri or global context configuration. + * + * + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { "classpath:org/apache/camel/component/spring/ws/DefaultMessageFilter-context.xml" }) +public class MessageFilterResolvingDefaultsTest extends AbstractSmockClientTest { + + private String body = "<customerCountRequest xmlns='http://springframework.org/spring-ws'>" + + "<customerName>John Doe</customerName>" + + "</customerCountRequest>"; + + + @Test + public void isUsedDefaultFilter() { + expect(soapHeader(new QName("http://newHeaderSupport/", "testHeaderValue1"))) + .andExpect(doesntContains(soapHeader(new QName("http://virtualCheck/", "localFilter")))) + .andExpect(doesntContains(soapHeader(new QName("http://virtualCheck/", "globalFilter")))); + + template.sendBodyAndHeader("direct:sendDefault", body, + "headerKey", new QName("http://newHeaderSupport/", "testHeaderValue1")); + + } + + + private RequestMatcher doesntContains(final RequestMatcher soapHeader) { + return new RequestMatcher() { + public void match(URI uri, WebServiceMessage request) + throws IOException, AssertionError { + try { + soapHeader.match(uri, request); + + } catch (AssertionError e) { + // ok + return; + } + throw new AssertionError("Should failed!"); + } + }; + } + + @Autowired + private ProducerTemplate template; + + @Autowired + public void setApplicationContext(ApplicationContext applicationContext) { + createServer(applicationContext); + } + + @After + public void verify() { + super.verify(); + } +} \ No newline at end of file Added: camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/MessageFilterResolvingTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/MessageFilterResolvingTest.java?rev=1411686&view=auto ============================================================================== --- camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/MessageFilterResolvingTest.java (added) +++ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/MessageFilterResolvingTest.java Tue Nov 20 14:41:43 2012 @@ -0,0 +1,92 @@ +package org.apache.camel.component.spring.ws; + +import java.io.IOException; +import java.net.URI; + +import javax.xml.namespace.QName; + +import net.javacrumbs.smock.springws.client.AbstractSmockClientTest; + +import org.apache.camel.ProducerTemplate; +import org.junit.After; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.ws.WebServiceMessage; +import org.springframework.ws.test.client.RequestMatcher; + +/** + * Check if the MessageFilter is used and resolved from endpoint uri or global context configuration. + * + * + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { "classpath:org/apache/camel/component/spring/ws/MessageFilter-context.xml" }) +public class MessageFilterResolvingTest extends AbstractSmockClientTest { + + private String body = "<customerCountRequest xmlns='http://springframework.org/spring-ws'>" + + "<customerName>John Doe</customerName>" + + "</customerCountRequest>"; + + @Test + public void global_testHeaderAttribute() { + expect(soapHeader(new QName("http://newHeaderSupport/", "testHeaderValue1"))) + .andExpect(soapHeader(new QName("http://virtualCheck/", "globalFilter"))); + + template.sendBodyAndHeader("direct:sendWithGlobalFilter", body, + "headerKey", new QName("http://newHeaderSupport/", "testHeaderValue1")); + } + + @Test + public void local_testHeaderAttribute() { + expect(soapHeader(new QName("http://newHeaderSupport/", "testHeaderValue1"))) + .andExpect(soapHeader(new QName("http://virtualCheck/", "localFilter"))); + + template.sendBodyAndHeader("direct:sendWithLocalFilter", body, + "headerKey", new QName("http://newHeaderSupport/", "testHeaderValue1")); + + } + + + @Test + public void empty_testHeaderAttribute() { + expect(doesntContains(soapHeader(new QName("http://newHeaderSupport/", + "testHeaderValue1")))); + + template.sendBodyAndHeader("direct:sendWithoutFilter", body, + "headerKey", new QName("http://newHeaderSupport/", "testHeaderValue1")); + + } + + private RequestMatcher doesntContains(final RequestMatcher soapHeader) { + return new RequestMatcher() { + public void match(URI uri, WebServiceMessage request) + throws IOException, AssertionError { + try { + soapHeader.match(uri, request); + + } catch (AssertionError e) { + // ok + return; + } + throw new AssertionError("Should failed!"); + } + }; + } + + @Autowired + private ProducerTemplate template; + + @Autowired + public void setApplicationContext(ApplicationContext applicationContext) { + createServer(applicationContext); + } + + @After + public void verify() { + super.verify(); + } +} \ No newline at end of file Added: camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilterTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilterTest.java?rev=1411686&view=auto ============================================================================== --- camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilterTest.java (added) +++ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilterTest.java Tue Nov 20 14:41:43 2012 @@ -0,0 +1,167 @@ +package org.apache.camel.component.spring.ws.filter.impl; + +import javax.activation.DataHandler; +import javax.xml.namespace.QName; + +import org.apache.camel.component.spring.ws.SpringWebserviceConstants; +import org.apache.camel.test.junit4.ExchangeTestSupport; +import org.fest.assertions.Assertions; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.springframework.ws.pox.dom.DomPoxMessage; +import org.springframework.ws.pox.dom.DomPoxMessageFactory; +import org.springframework.ws.soap.SoapMessage; +import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; + +@RunWith(value = JUnit4.class) +public class BasicMessageFilterTest extends ExchangeTestSupport { + + private BasicMessageFilter filter; + private SoapMessage message; + + @Before + public void Before() { + filter = new BasicMessageFilter(); + SaajSoapMessageFactory saajSoapMessageFactory = new SaajSoapMessageFactory(); + saajSoapMessageFactory.afterPropertiesSet(); + message = saajSoapMessageFactory.createWebServiceMessage(); + } + + @Test + public void testNulls() throws Exception { + filter.filterConsumer(null, null); + filter.filterProducer(null, null); + } + + @Test + public void testNullsWithExchange() throws Exception { + filter.filterConsumer(exchange, null); + filter.filterProducer(exchange, null); + } + + @Test + public void NonSoapMessageShouldBeSkipped() throws Exception { + DomPoxMessage domPoxMessage = new DomPoxMessageFactory() + .createWebServiceMessage(); + filter.filterConsumer(exchange, domPoxMessage); + filter.filterProducer(exchange, domPoxMessage); + + } + + @Test + public void withoutHeader() throws Exception { + exchange.getIn().getHeaders().clear(); + exchange.getOut().getHeaders().clear(); + + exchange.getIn().getAttachments().clear(); + exchange.getOut().getAttachments().clear(); + + filter.filterProducer(exchange, message); + filter.filterConsumer(exchange, message); + + Assertions.assertThat(message.getAttachments()).isEmpty(); + Assertions.assertThat(message.getSoapHeader().examineAllHeaderElements()).isEmpty(); + + Assertions.assertThat(message.getSoapHeader().getAllAttributes()).isEmpty(); + } + + + @Test + public void removeCamelInternalHeaderAttributes() throws Exception { + exchange.getOut() + .getHeaders() + .put(SpringWebserviceConstants.SPRING_WS_SOAP_ACTION, + "mustBeRemoved"); + exchange.getOut() + .getHeaders() + .put(SpringWebserviceConstants.SPRING_WS_ADDRESSING_ACTION, + "mustBeRemoved"); + exchange.getOut() + .getHeaders() + .put(SpringWebserviceConstants.SPRING_WS_ENDPOINT_URI, + "mustBeRemoved"); + + exchange.getOut().getHeaders().put("breadcrumbId", "mustBeRemoved"); + + filter.filterConsumer(exchange, message); + + Assertions.assertThat(message.getAttachments()).isEmpty(); + Assertions.assertThat(message.getSoapHeader().examineAllHeaderElements()).isEmpty(); + + Assertions.assertThat(message.getSoapHeader().getAllAttributes()).isEmpty(); + } + + @Test + public void consumer_withHeader() throws Exception { + exchange.getOut().getHeaders() + .put("headerAttributeKey", "testAttributeValue"); + exchange.getOut() + .getHeaders() + .put("headerAttributeElement", + new QName("http://shouldBeInHeader", "<myElement />")); + filter.filterConsumer(exchange, message); + + Assertions.assertThat(message.getAttachments()).isEmpty(); + + Assertions.assertThat(message.getSoapHeader().examineAllHeaderElements()) + .isNotEmpty().hasSize(1); + + Assertions.assertThat(message.getSoapHeader().getAllAttributes()) + .isNotEmpty().hasSize(1); + + } + + @Test + public void producer_withHeader() throws Exception { + // foo is already in the header.in from the parent ExchangeTestSupport + exchange.getIn().getHeaders() + .put("headerAttributeKey", "testAttributeValue"); + exchange.getIn() + .getHeaders() + .put("headerAttributeElement", + new QName("http://shouldBeInHeader", "<myElement />")); + + filter.filterProducer(exchange, message); + + Assertions.assertThat(message.getAttachments()).isEmpty(); + + Assertions.assertThat(message.getSoapHeader().examineAllHeaderElements()) + .isNotEmpty().hasSize(1); + + Assertions.assertThat(message.getSoapHeader().getAllAttributes()) + .isNotEmpty().hasSize(2); + + } + + @Test + public void withoutAttachment() throws Exception { + filter.filterConsumer(exchange, message); + filter.filterProducer(exchange, message); + + Assertions.assertThat(message.getAttachments()).isEmpty(); + } + + @Test + public void producer_withAttachment() throws Exception { + exchange.getIn().addAttachment( "testAttachment", + new DataHandler(this.getClass().getResource("/sampleAttachment.txt"))); + + filter.filterProducer(exchange, message); + + Assertions.assertThat(message.getAttachments()).isNotNull().isNotEmpty(); + Assertions.assertThat(message.getAttachment("testAttachment")).isNotNull(); + } + + @Test + public void consumer_withAttachment() throws Exception { + exchange.getOut().addAttachment( "testAttachment", + new DataHandler(this.getClass().getResource("/sampleAttachment.txt"))); + + filter.filterConsumer(exchange, message); + + Assertions.assertThat(message.getAttachments()).isNotNull().isNotEmpty(); + Assertions.assertThat(message.getAttachment("testAttachment")).isNotNull(); + } +} Added: camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/EmptyMessageFilter.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/EmptyMessageFilter.java?rev=1411686&view=auto ============================================================================== --- camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/EmptyMessageFilter.java (added) +++ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/EmptyMessageFilter.java Tue Nov 20 14:41:43 2012 @@ -0,0 +1,23 @@ +package org.apache.camel.component.spring.ws.testfilters; + +import org.apache.camel.Exchange; +import org.apache.camel.component.spring.ws.filter.MessageFilter; +import org.springframework.ws.WebServiceMessage; + +public class EmptyMessageFilter implements MessageFilter { + + @Override + public void filterProducer(Exchange exchange, + WebServiceMessage produceResponse) { + // Do nothing + + } + + @Override + public void filterConsumer(Exchange exchange, + WebServiceMessage consumerResponse) { + // Do nothing + + } + +} Added: camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/GlobalMessageFilter.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/GlobalMessageFilter.java?rev=1411686&view=auto ============================================================================== --- camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/GlobalMessageFilter.java (added) +++ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/GlobalMessageFilter.java Tue Nov 20 14:41:43 2012 @@ -0,0 +1,23 @@ +package org.apache.camel.component.spring.ws.testfilters; + +import javax.xml.namespace.QName; + +import org.apache.camel.Message; +import org.apache.camel.component.spring.ws.filter.impl.BasicMessageFilter; +import org.springframework.ws.soap.SoapMessage; + +public class GlobalMessageFilter extends BasicMessageFilter { + + /** + * Add a test marker so the test method is aware which filter we are using. + */ + @Override + protected void doProcessSoapAttachments(Message inOrOut, + SoapMessage response) { + super.doProcessSoapAttachments(inOrOut, response); + response.getEnvelope() + .getHeader() + .addHeaderElement( + new QName("http://virtualCheck/", "globalFilter")); + } +} Added: camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/LocalMessageFilter.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/LocalMessageFilter.java?rev=1411686&view=auto ============================================================================== --- camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/LocalMessageFilter.java (added) +++ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/testfilters/LocalMessageFilter.java Tue Nov 20 14:41:43 2012 @@ -0,0 +1,24 @@ +package org.apache.camel.component.spring.ws.testfilters; + +import javax.xml.namespace.QName; + +import org.apache.camel.Message; +import org.apache.camel.component.spring.ws.filter.impl.BasicMessageFilter; +import org.springframework.ws.soap.SoapMessage; + +public class LocalMessageFilter extends BasicMessageFilter { + + /** + * Add a test marker so the test method is aware which filter we are using. + */ + @Override + protected void doProcessSoapAttachments(Message inOrOut, + SoapMessage response) { + super.doProcessSoapAttachments(inOrOut, response); + response.getEnvelope() + .getHeader() + .addHeaderElement( + new QName("http://virtualCheck/", "localFilter")); + } + +} Added: camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/DefaultMessageFilter-context.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/DefaultMessageFilter-context.xml?rev=1411686&view=auto ============================================================================== --- camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/DefaultMessageFilter-context.xml (added) +++ camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/DefaultMessageFilter-context.xml Tue Nov 20 14:41:43 2012 @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor + license agreements. See the NOTICE file distributed with this work for additional + information regarding copyright ownership. The ASF licenses this file to + You 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. --> +<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.xsd + http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> + + <!-- === Custom Spring-WS Camel Message Filtering ==== --> + <bean id="global" + class="org.apache.camel.component.spring.ws.testfilters.GlobalMessageFilter"></bean> + + <bean id="local" + class="org.apache.camel.component.spring.ws.testfilters.LocalMessageFilter"></bean> + + <bean id="empty" + class="org.apache.camel.component.spring.ws.testfilters.EmptyMessageFilter"></bean> + + + <camelContext xmlns="http://camel.apache.org/schema/spring"> + <!-- consumer route (providing the actual web service) --> + <route> + <from uri="direct:sendWithGlobalFilter" /> + <to + uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&webServiceTemplate=#webServiceTemplate" /> + </route> + <route> + <from uri="direct:sendWithLocalFilter" /> + <to + uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&messageFilter=local&webServiceTemplate=#webServiceTemplate" /> + </route> + <route> + <from uri="direct:sendWithoutFilter" /> + <to + uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&messageFilter=empty&webServiceTemplate=#webServiceTemplate" /> + </route> + <route> + <from uri="direct:sendDefault" /> + <to + uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&webServiceTemplate=#webServiceTemplate" /> + </route> + </camelContext> + + <bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory" /> + + <bean id="endpointMapping" + class="org.apache.camel.component.spring.ws.bean.CamelEndpointMapping" /> + + <bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate"> + <property name="defaultUri" value="http://localhost/" /> + <property name="messageSender"> + <bean + class="net.javacrumbs.springws.test.helper.InMemoryWebServiceMessageSender" /> + </property> + </bean> + +</beans> \ No newline at end of file Added: camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/MessageFilter-context.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/MessageFilter-context.xml?rev=1411686&view=auto ============================================================================== --- camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/MessageFilter-context.xml (added) +++ camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/MessageFilter-context.xml Tue Nov 20 14:41:43 2012 @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor + license agreements. See the NOTICE file distributed with this work for additional + information regarding copyright ownership. The ASF licenses this file to + You 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. --> +<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.xsd + http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> + + <!-- === Custom Spring-WS Camel Message Filtering ==== --> + <bean id="messageFilter" + class="org.apache.camel.component.spring.ws.testfilters.GlobalMessageFilter"></bean> + + <bean id="local" + class="org.apache.camel.component.spring.ws.testfilters.LocalMessageFilter"></bean> + + <bean id="empty" + class="org.apache.camel.component.spring.ws.testfilters.EmptyMessageFilter"></bean> + + + <camelContext xmlns="http://camel.apache.org/schema/spring"> + <!-- consumer route (providing the actual web service) --> + <route> + <from uri="direct:sendWithGlobalFilter" /> + <to + uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&webServiceTemplate=#webServiceTemplate" /> + </route> + <route> + <from uri="direct:sendWithLocalFilter" /> + <to + uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&messageFilter=local&webServiceTemplate=#webServiceTemplate" /> + </route> + <route> + <from uri="direct:sendWithoutFilter" /> + <to + uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&messageFilter=empty&webServiceTemplate=#webServiceTemplate" /> + </route> + </camelContext> + + <bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory" /> + + <bean id="endpointMapping" + class="org.apache.camel.component.spring.ws.bean.CamelEndpointMapping" /> + + <bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate"> + <property name="defaultUri" value="http://localhost/" /> + <property name="messageSender"> + <bean + class="net.javacrumbs.springws.test.helper.InMemoryWebServiceMessageSender" /> + </property> + </bean> + +</beans> \ No newline at end of file Added: camel/trunk/components/camel-spring-ws/src/test/resources/sampleAttachment.txt URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/resources/sampleAttachment.txt?rev=1411686&view=auto ============================================================================== --- camel/trunk/components/camel-spring-ws/src/test/resources/sampleAttachment.txt (added) +++ camel/trunk/components/camel-spring-ws/src/test/resources/sampleAttachment.txt Tue Nov 20 14:41:43 2012 @@ -0,0 +1 @@ +Sample Attachment File \ No newline at end of file