Author: davsclaus
Date: Fri Aug 7 09:40:03 2009
New Revision: 801918
URL: http://svn.apache.org/viewvc?rev=801918&view=rev
Log:
CAMEL-1886: Lookup headers is now key name case agnostic (case insensitive).
Added:
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageCaseAgnosticLookupHeaderTest.java
(with props)
Modified:
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/processor/RemoveHeaderTest.java
Modified:
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
URL:
http://svn.apache.org/viewvc/camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java?rev=801918&r1=801917&r2=801918&view=diff
==============================================================================
---
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
(original)
+++
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java
Fri Aug 7 09:40:03 2009
@@ -811,13 +811,20 @@
@SuppressWarnings("unchecked")
protected void performAssertions(Exchange exchange) throws Exception {
- // must use a copy of the in message
+ // Must create a new instance and populate from the source
+ // as this is snapshot based and must not alter in case the source
+ // is altered later during routing
+ // This has the implications that received exchanges/messages on mocks
+ // are always default based and not specific types such as
org.apache.camel.component.jms.JmsMessage
+
Exchange copy = new DefaultExchange(exchange);
copy.setExchangeId(exchange.getExchangeId());
if (exchange.hasProperties()) {
copy.getProperties().putAll(exchange.getProperties());
}
+
+ // snapshot bodies
if (exchange.hasOut()) {
copy.getOut().copyFrom(exchange.getOut());
}
Modified:
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
URL:
http://svn.apache.org/viewvc/camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java?rev=801918&r1=801917&r2=801918&view=diff
==============================================================================
---
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
(original)
+++
camel/sandbox/tuning-experiment/camel-core/src/main/java/org/apache/camel/impl/DefaultMessage.java
Fri Aug 7 09:40:03 2009
@@ -33,6 +33,7 @@
public class DefaultMessage extends MessageSupport {
private boolean fault;
private Map<String, Object> headers;
+ private Map<String, Object> lowerCaseHeaders;
private Map<String, DataHandler> attachments;
@Override
@@ -55,11 +56,25 @@
}
public Object getHeader(String name) {
- return getHeaders().get(name);
+ Object answer = getHeaders().get(name);
+ if (answer != null) {
+ return answer;
+ }
+
+ // not found then try a lower case lookup
+ if (!getHeaders().isEmpty()) {
+ return getLowerCaseHeaders().get(name.toLowerCase());
+ }
+
+ // not found
+ return null;
}
public <T> T getHeader(String name, Class<T> type) {
Object value = getHeader(name);
+ if (value == null) {
+ return null;
+ }
// eager same instance type test to avoid the overhead of invoking the
type converter
// if already same type
@@ -80,10 +95,19 @@
headers = createHeaders();
}
headers.put(name, value);
+
+ // keep lower case in sync
+ if (lowerCaseHeaders != null) {
+ lowerCaseHeaders.put(name.toLowerCase(), value);
+ }
}
public Object removeHeader(String name) {
if (headers != null) {
+ // keep lower case in sync
+ if (lowerCaseHeaders != null) {
+ lowerCaseHeaders.remove(name.toLowerCase());
+ }
return headers.remove(name);
} else {
return null;
@@ -99,6 +123,11 @@
public void setHeaders(Map<String, Object> headers) {
this.headers = headers;
+
+ if (this.lowerCaseHeaders != null) {
+ this.lowerCaseHeaders.clear();
+ }
+ this.lowerCaseHeaders = null;
}
public boolean hasHeaders() {
@@ -212,4 +241,15 @@
public String createExchangeId() {
return null;
}
+
+ protected Map getLowerCaseHeaders() {
+ if (lowerCaseHeaders == null) {
+ lowerCaseHeaders = new HashMap<String, Object>(headers.size());
+ for (Map.Entry<String, Object> entry : headers.entrySet()) {
+ lowerCaseHeaders.put(entry.getKey().toLowerCase(),
entry.getValue());
+ }
+ }
+ return lowerCaseHeaders;
+ }
+
}
Added:
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageCaseAgnosticLookupHeaderTest.java
URL:
http://svn.apache.org/viewvc/camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageCaseAgnosticLookupHeaderTest.java?rev=801918&view=auto
==============================================================================
---
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageCaseAgnosticLookupHeaderTest.java
(added)
+++
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageCaseAgnosticLookupHeaderTest.java
Fri Aug 7 09:40:03 2009
@@ -0,0 +1,99 @@
+/**
+ * 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.
+ */
+package org.apache.camel.impl;
+
+import junit.framework.TestCase;
+import org.apache.camel.Message;
+
+/**
+ * @version $Revision$
+ */
+public class DefaultMessageCaseAgnosticLookupHeaderTest extends TestCase {
+
+ public void testLookupCaseAgnostic() {
+ Message msg = new DefaultMessage();
+ assertNull(msg.getHeader("foo"));
+
+ msg.setHeader("foo", "cheese");
+
+ assertEquals("cheese", msg.getHeader("foo"));
+ assertEquals("cheese", msg.getHeader("Foo"));
+ assertEquals("cheese", msg.getHeader("FOO"));
+ }
+
+ public void testLookupCaseAgnosticAddHeader() {
+ Message msg = new DefaultMessage();
+ assertNull(msg.getHeader("foo"));
+
+ msg.setHeader("foo", "cheese");
+
+ assertEquals("cheese", msg.getHeader("foo"));
+ assertEquals("cheese", msg.getHeader("Foo"));
+ assertEquals("cheese", msg.getHeader("FOO"));
+ assertNull(msg.getHeader("unknown"));
+
+ msg.setHeader("bar", "beer");
+
+ assertEquals("beer", msg.getHeader("bar"));
+ assertEquals("beer", msg.getHeader("Bar"));
+ assertEquals("beer", msg.getHeader("BAR"));
+ assertNull(msg.getHeader("unknown"));
+ }
+
+ public void testLookupCaseAgnosticAddHeader2() {
+ Message msg = new DefaultMessage();
+ assertNull(msg.getHeader("foo"));
+
+ msg.setHeader("foo", "cheese");
+
+ assertEquals("cheese", msg.getHeader("FOO"));
+ assertEquals("cheese", msg.getHeader("foo"));
+ assertEquals("cheese", msg.getHeader("Foo"));
+ assertNull(msg.getHeader("unknown"));
+
+ msg.setHeader("bar", "beer");
+
+ assertEquals("beer", msg.getHeader("BAR"));
+ assertEquals("beer", msg.getHeader("bar"));
+ assertEquals("beer", msg.getHeader("Bar"));
+ assertNull(msg.getHeader("unknown"));
+ }
+
+ public void testLookupCaseAgnosticAddHeaderRemoveHeader() {
+ Message msg = new DefaultMessage();
+ assertNull(msg.getHeader("foo"));
+
+ msg.setHeader("foo", "cheese");
+
+ assertEquals("cheese", msg.getHeader("foo"));
+ assertEquals("cheese", msg.getHeader("Foo"));
+ assertEquals("cheese", msg.getHeader("FOO"));
+ assertNull(msg.getHeader("unknown"));
+
+ msg.setHeader("bar", "beer");
+
+ assertEquals("beer", msg.getHeader("bar"));
+ assertEquals("beer", msg.getHeader("Bar"));
+ assertEquals("beer", msg.getHeader("BAR"));
+ assertNull(msg.getHeader("unknown"));
+
+ msg.removeHeader("bar");
+ assertNull(msg.getHeader("bar"));
+ assertNull(msg.getHeader("unknown"));
+ }
+
+}
Propchange:
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageCaseAgnosticLookupHeaderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/impl/DefaultMessageCaseAgnosticLookupHeaderTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/processor/RemoveHeaderTest.java
URL:
http://svn.apache.org/viewvc/camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/processor/RemoveHeaderTest.java?rev=801918&r1=801917&r2=801918&view=diff
==============================================================================
---
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/processor/RemoveHeaderTest.java
(original)
+++
camel/sandbox/tuning-experiment/camel-core/src/test/java/org/apache/camel/processor/RemoveHeaderTest.java
Fri Aug 7 09:40:03 2009
@@ -14,7 +14,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.camel.processor;
import java.util.List;