You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2012/11/20 15:41:45 UTC
svn commit: r1411686 - in /camel/trunk/components/camel-spring-ws: ./
src/main/java/org/apache/camel/component/spring/ws/
src/main/java/org/apache/camel/component/spring/ws/filter/impl/
src/test/java/org/apache/camel/component/spring/ws/ src/test/java/...
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 andrej@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