From 730c634c46fdfe6ebfd81712577a5ef5dfe64c1c Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Sat, 8 May 2010 19:54:27 +0000 Subject: [PATCH] INT-1135 added HeaderFilter --- .../integration/transformer/HeaderFilter.java | 48 ++++++++++++ .../transformer/HeaderFilterTests.java | 76 +++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 org.springframework.integration/src/main/java/org/springframework/integration/transformer/HeaderFilter.java create mode 100644 org.springframework.integration/src/test/java/org/springframework/integration/transformer/HeaderFilterTests.java diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/HeaderFilter.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/HeaderFilter.java new file mode 100644 index 0000000000..cc6d039e88 --- /dev/null +++ b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/HeaderFilter.java @@ -0,0 +1,48 @@ +/* + * Copyright 2002-2010 the original author or authors. + * + * Licensed 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.springframework.integration.transformer; + +import org.springframework.integration.core.Message; +import org.springframework.integration.message.MessageBuilder; +import org.springframework.util.Assert; + +/** + * Transformer that removes Message headers. + * + * @author Mark Fisher + * @since 2.0 + */ +public class HeaderFilter implements Transformer { + + private final String[] headersToRemove; + + + public HeaderFilter(String... headersToRemove) { + Assert.notEmpty(headersToRemove, "At least one header name to remove is required."); + this.headersToRemove = headersToRemove; + } + + + public Message transform(Message message) { + MessageBuilder builder = MessageBuilder.fromMessage(message); + for (String headerName : headersToRemove) { + builder.removeHeader(headerName); + } + return builder.build(); + } + +} diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/transformer/HeaderFilterTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/transformer/HeaderFilterTests.java new file mode 100644 index 0000000000..c3065b1586 --- /dev/null +++ b/org.springframework.integration/src/test/java/org/springframework/integration/transformer/HeaderFilterTests.java @@ -0,0 +1,76 @@ +/* + * Copyright 2002-2010 the original author or authors. + * + * Licensed 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.springframework.integration.transformer; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.util.UUID; + +import org.junit.Test; + +import org.springframework.integration.channel.QueueChannel; +import org.springframework.integration.core.Message; +import org.springframework.integration.message.MessageBuilder; +import org.springframework.integration.transformer.HeaderFilter; +import org.springframework.integration.transformer.MessageTransformingHandler; + +/** + * @author Mark Fisher + * @since 2.0 + */ +public class HeaderFilterTests { + + @Test + public void testFilterDirectly() { + Message message = MessageBuilder.withPayload("test") + .setHeader("x", 1).setHeader("y", 2).setHeader("z", 3) + .build(); + HeaderFilter filter = new HeaderFilter("x", "z"); + Message result = filter.transform(message); + assertNotNull(result); + assertNotNull(result.getHeaders().get("y")); + assertNull(result.getHeaders().get("x")); + assertNull(result.getHeaders().get("z")); + } + + @Test + public void testFilterWithinHandler() { + UUID correlationId = UUID.randomUUID(); + QueueChannel replyChannel = new QueueChannel(); + Message message = MessageBuilder.withPayload("test") + .setHeader("x", 1).setHeader("y", 2).setHeader("z", 3) + .setCorrelationId(correlationId) + .setReplyChannel(replyChannel) + .setErrorChannelName("testErrorChannel") + .build(); + HeaderFilter filter = new HeaderFilter("x", "z"); + MessageTransformingHandler handler = new MessageTransformingHandler(filter); + handler.afterPropertiesSet(); + handler.handleMessage(message); + Message result = replyChannel.receive(0); + assertNotNull(result); + assertNotNull(result.getHeaders().get("y")); + assertNull(result.getHeaders().get("x")); + assertNull(result.getHeaders().get("z")); + assertEquals("testErrorChannel", result.getHeaders().getErrorChannel()); + assertEquals(replyChannel, result.getHeaders().getReplyChannel()); + assertEquals(correlationId, result.getHeaders().getCorrelationId()); + } + +}