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&amp;webServiceTemplate=#webServiceTemplate";
 />
+               </route>
+               <route>
+                       <from uri="direct:sendWithLocalFilter" />
+                       <to
+                               
uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&amp;messageFilter=local&amp;webServiceTemplate=#webServiceTemplate";
 />
+               </route>
+               <route>
+                       <from uri="direct:sendWithoutFilter" />
+                       <to
+                               
uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&amp;messageFilter=empty&amp;webServiceTemplate=#webServiceTemplate";
 />
+               </route>
+               <route>
+                       <from uri="direct:sendDefault" />
+                       <to
+                               
uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&amp;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&amp;webServiceTemplate=#webServiceTemplate";
 />
+               </route>
+               <route>
+                       <from uri="direct:sendWithLocalFilter" />
+                       <to
+                               
uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&amp;messageFilter=local&amp;webServiceTemplate=#webServiceTemplate";
 />
+               </route>
+               <route>
+                       <from uri="direct:sendWithoutFilter" />
+                       <to
+                               
uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&amp;messageFilter=empty&amp;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


Reply via email to