You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ha...@apache.org on 2008/08/08 22:11:44 UTC

svn commit: r684073 - in /activemq/camel/trunk/components: camel-mail/src/main/java/org/apache/camel/component/mail/ camel-xmpp/src/main/java/org/apache/camel/component/xmpp/

Author: hadrian
Date: Fri Aug  8 13:11:43 2008
New Revision: 684073

URL: http://svn.apache.org/viewvc?rev=684073&view=rev
Log:
CAMEL-766.  Patch applied with many thanks!

Modified:
    activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
    activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java
    activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
    activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java
    activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppBinding.java
    activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppComponent.java
    activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppEndpoint.java
    activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppMessage.java

Modified: activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java?rev=684073&r1=684072&r2=684073&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java (original)
+++ activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java Fri Aug  8 13:11:43 2008
@@ -17,12 +17,15 @@
 package org.apache.camel.component.mail;
 
 import java.io.IOException;
+import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import javax.activation.DataHandler;
 import javax.activation.DataSource;
 import javax.mail.Address;
 import javax.mail.BodyPart;
+import javax.mail.Header;
 import javax.mail.Message;
 import javax.mail.MessagingException;
 import javax.mail.Part;
@@ -35,6 +38,9 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.converter.ObjectConverter;
+import org.apache.camel.impl.DefaultHeaderFilterStrategy;
+import org.apache.camel.spi.HeaderFilterStrategy;
+import org.apache.camel.util.CollectionHelper;
 
 /**
  * A Strategy used to convert between a Camel {@link Exchange} and {@link Message} to and
@@ -44,6 +50,16 @@
  */
 public class MailBinding {
 
+    private HeaderFilterStrategy headerFilterStrategy;
+
+    public MailBinding() {
+        headerFilterStrategy = new DefaultHeaderFilterStrategy();
+    }
+    
+    public MailBinding(HeaderFilterStrategy headerFilterStrategy) {
+        this.headerFilterStrategy = headerFilterStrategy; 
+    }
+
     public void populateMailMessage(MailEndpoint endpoint, MimeMessage mimeMessage, Exchange exchange)
         throws MessagingException, IOException {
 
@@ -114,8 +130,8 @@
             String headerName = entry.getKey();
             Object headerValue = entry.getValue();
             if (headerValue != null) {
-                if (shouldOutputHeader(camelMessage, headerName, headerValue)) {
-
+                if (headerFilterStrategy != null && 
+                        !headerFilterStrategy.applyFilterToCamelHeaders(headerName, headerValue)) {
                     // Mail messages can repeat the same header...
                     if (ObjectConverter.isCollection(headerValue)) {
                         Iterator iter = ObjectConverter.iterator(headerValue);
@@ -185,14 +201,7 @@
         // Put parts in message
         mimeMessage.setContent(multipart);
     }
-
-    /**
-     * Strategy to allow filtering of headers which are put on the Mail message
-     */
-    protected boolean shouldOutputHeader(org.apache.camel.Message camelMessage, String headerName, Object headerValue) {
-        return true;
-    }
-
+    
     /**
      * Strategy to allow filtering of attachments which are put on the Mail message
      */
@@ -208,4 +217,25 @@
         return exchange.getContext().getTypeConverter().convertTo(String.class, value);
     }
 
+    public Map<String, Object> extractHeadersFromMail(Message mailMessage) throws MessagingException {
+        Map<String, Object> answer = new HashMap<String, Object>();
+        Enumeration names = mailMessage.getAllHeaders();
+        
+        while (names.hasMoreElements()) {
+            Header header = (Header)names.nextElement();
+            String[] value = mailMessage.getHeader(header.getName());
+            if (headerFilterStrategy != null && 
+                    !headerFilterStrategy.applyFilterToExternalHeaders(header.getName(), value)) {
+                // toLowerCase() for doing case insensitive search
+                if (value.length == 1) {
+                    CollectionHelper.appendValue(answer, header.getName().toLowerCase(), value[0]);
+                } else {
+                    CollectionHelper.appendValue(answer, header.getName().toLowerCase(), value);
+                }
+            }
+        }
+        
+        return answer;
+    }
+
 }

Modified: activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java?rev=684073&r1=684072&r2=684073&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java (original)
+++ activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java Fri Aug  8 13:11:43 2008
@@ -21,15 +21,19 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
+import org.apache.camel.HeaderFilterStrategyAware;
 import org.apache.camel.impl.DefaultComponent;
+import org.apache.camel.impl.DefaultHeaderFilterStrategy;
+import org.apache.camel.spi.HeaderFilterStrategy;
 
 /**
  * Component for JavaMail.
  *
  * @version $Revision:520964 $
  */
-public class MailComponent extends DefaultComponent<MailExchange> {
+public class MailComponent extends DefaultComponent<MailExchange> implements HeaderFilterStrategyAware {
     private MailConfiguration configuration;
+    private HeaderFilterStrategy headerFilterStrategy = new DefaultHeaderFilterStrategy();
 
     public MailComponent() {
         this.configuration = new MailConfiguration();
@@ -96,4 +100,13 @@
     protected String convertPathToActualDestination(String path) {
         return path;
     }
+
+    public HeaderFilterStrategy getHeaderFilterStrategy() {
+        return headerFilterStrategy;
+    }
+
+    public void setHeaderFilterStrategy(HeaderFilterStrategy strategy) {
+        headerFilterStrategy = strategy;
+        
+    }
 }

Modified: activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java?rev=684073&r1=684072&r2=684073&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java (original)
+++ activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java Fri Aug  8 13:11:43 2008
@@ -38,6 +38,7 @@
     public MailEndpoint(String uri, MailComponent component, MailConfiguration configuration) {
         super(uri, component);
         this.configuration = configuration;
+        binding = new MailBinding(component.getHeaderFilterStrategy());
     }
 
     public MailEndpoint(String endpointUri, MailConfiguration configuration) {

Modified: activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java?rev=684073&r1=684072&r2=684073&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java (original)
+++ activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java Fri Aug  8 13:11:43 2008
@@ -17,11 +17,9 @@
 package org.apache.camel.component.mail;
 
 import java.io.IOException;
-import java.util.Enumeration;
 import java.util.Map;
 
 import javax.activation.DataHandler;
-import javax.mail.Header;
 import javax.mail.Message;
 import javax.mail.MessagingException;
 import javax.mail.Multipart;
@@ -77,24 +75,17 @@
         this.mailMessage = mailMessage;
     }
 
+    @Override
     public Object getHeader(String name) {
-        String[] answer = null;
-        if (mailMessage != null) {
-            try {
-                answer = mailMessage.getHeader(name);
-            } catch (MessagingException e) {
-                throw new RuntimeCamelException("Error accessing header: " + name, e);
-            }
-        }
+        Object answer = super.getHeader(name);
+        
+        // mimic case insensitive search of mail message getHeader
         if (answer == null) {
-            return super.getHeader(name);
-        }
-        if (answer.length == 1) {
-            return answer[0];
+            answer = super.getHeader(name.toLowerCase());
         }
         return answer;
     }
-
+  
     @Override
     public MailMessage newInstance() {
         return new MailMessage();
@@ -112,13 +103,7 @@
     protected void populateInitialHeaders(Map<String, Object> map) {
         if (mailMessage != null) {
             try {
-                Enumeration names = mailMessage.getAllHeaders();
-                while (names.hasMoreElements()) {
-                    Header header = (Header)names.nextElement();
-                    String value = header.getValue();
-                    String name = header.getName();
-                    CollectionHelper.appendValue(map, name, value);
-                }
+                map.putAll(getExchange().getBinding().extractHeadersFromMail(mailMessage));
             } catch (MessagingException e) {
                 throw new RuntimeCamelException("Error accessing headers due to: " + e.getMessage(), e);
             }

Modified: activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppBinding.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppBinding.java?rev=684073&r1=684072&r2=684073&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppBinding.java (original)
+++ activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppBinding.java Fri Aug  8 13:11:43 2008
@@ -16,10 +16,13 @@
  */
 package org.apache.camel.component.xmpp;
 
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
 import org.apache.camel.Exchange;
+import org.apache.camel.impl.DefaultHeaderFilterStrategy;
+import org.apache.camel.spi.HeaderFilterStrategy;
 import org.jivesoftware.smack.packet.Message;
 
 /**
@@ -30,6 +33,16 @@
  */
 public class XmppBinding {
 
+    private HeaderFilterStrategy headerFilterStrategy;
+
+    public XmppBinding() {
+        this.headerFilterStrategy = new DefaultHeaderFilterStrategy();
+    }
+    
+    public XmppBinding(HeaderFilterStrategy headerFilterStrategy) {
+        this.headerFilterStrategy = headerFilterStrategy;
+    }
+
     /**
      * Populates the given XMPP message from the inbound exchange
      */
@@ -41,7 +54,8 @@
             String name = entry.getKey();
             Object value = entry.getValue();
             // BUG?
-            if (value != null && shouldOutputHeader(exchange, name, value)) {
+            if (headerFilterStrategy != null 
+                    && !headerFilterStrategy.applyFilterToCamelHeaders(name, value)) {
                 message.setProperty(name, value);
             }
         }
@@ -58,10 +72,17 @@
         return message.getBody();
     }
 
-    /**
-     * Strategy to allow filtering of headers which are put on the XMPP message
-     */
-    protected boolean shouldOutputHeader(Exchange exchange, String headerName, Object headerValue) {
-        return true;
+    public Map<String, Object> extractHeadersFromXmpp(Message xmppMessage) {
+        Map<String, Object> answer = new HashMap<String, Object>();
+        
+        for (String name : xmppMessage.getPropertyNames()) {
+            Object value = xmppMessage.getProperty(name);
+            
+            if (headerFilterStrategy != null && 
+                    !headerFilterStrategy.applyFilterToExternalHeaders(name, value)) {
+                answer.put(name, value);
+            }
+        }
+        return answer;
     }
 }

Modified: activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppComponent.java?rev=684073&r1=684072&r2=684073&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppComponent.java (original)
+++ activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppComponent.java Fri Aug  8 13:11:43 2008
@@ -21,12 +21,17 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
+import org.apache.camel.HeaderFilterStrategyAware;
 import org.apache.camel.impl.DefaultComponent;
+import org.apache.camel.impl.DefaultHeaderFilterStrategy;
+import org.apache.camel.spi.HeaderFilterStrategy;
 
 /**
  * @version $Revision:520964 $
  */
-public class XmppComponent extends DefaultComponent<XmppExchange> {
+public class XmppComponent extends DefaultComponent<XmppExchange> implements HeaderFilterStrategyAware {
+
+    private HeaderFilterStrategy headerFilterStrategy = new DefaultHeaderFilterStrategy();
 
     public XmppComponent() {
     }
@@ -65,4 +70,13 @@
         }
         return endpoint;
     }
+
+    public HeaderFilterStrategy getHeaderFilterStrategy() {
+        return headerFilterStrategy;
+    }
+
+    public void setHeaderFilterStrategy(HeaderFilterStrategy strategy) {
+        headerFilterStrategy = strategy;
+        
+    }
 }

Modified: activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppEndpoint.java?rev=684073&r1=684072&r2=684073&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppEndpoint.java (original)
+++ activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppEndpoint.java Fri Aug  8 13:11:43 2008
@@ -55,6 +55,7 @@
 
     public XmppEndpoint(String uri, XmppComponent component) {
         super(uri, component);
+        binding = new XmppBinding(component.getHeaderFilterStrategy());
     }
 
     public XmppEndpoint(String endpointUri) {

Modified: activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppMessage.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppMessage.java?rev=684073&r1=684072&r2=684073&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppMessage.java (original)
+++ activemq/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppMessage.java Fri Aug  8 13:11:43 2008
@@ -16,9 +16,6 @@
  */
 package org.apache.camel.component.xmpp;
 
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
 
 import org.apache.camel.impl.DefaultMessage;
@@ -65,31 +62,7 @@
     public void setXmppMessage(Message xmppMessage) {
         this.xmppMessage = xmppMessage;
     }
-
-    public Object getHeader(String name) {
-        return xmppMessage.getProperty(name);
-    }
-
-    @Override
-    public void setHeader(String name, Object value) {
-        if (value == null) {
-            xmppMessage.deleteProperty(name);
-        } else {
-            xmppMessage.setProperty(name, value);
-        }
-    }
-
-    @Override
-    public Map<String, Object> getHeaders() {
-        Map<String, Object> answer = new HashMap<String, Object>();
-        Collection<String> propertyNames = xmppMessage.getPropertyNames();
-        for (Iterator iter = propertyNames.iterator(); iter.hasNext();) {
-            String name = (String)iter.next();
-            answer.put(name, xmppMessage.getProperty(name));
-        }
-        return answer;
-    }
-
+    
     @Override
     public XmppMessage newInstance() {
         return new XmppMessage();
@@ -102,4 +75,11 @@
         }
         return null;
     }
+    
+    @Override
+    protected void populateInitialHeaders(Map<String, Object> map) {
+        if (xmppMessage != null) {
+            map.putAll(getExchange().getBinding().extractHeadersFromXmpp(xmppMessage));
+        }
+    }
 }