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));
+ }
+ }
}