Repository: camel Updated Branches: refs/heads/master 31473bce1 -> 5bd61ab55
CAMEL-8159: Include set/remove header/properties in JMX Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5bd61ab5 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5bd61ab5 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5bd61ab5 Branch: refs/heads/master Commit: 5bd61ab558812ef9847dec9547b73ac80ca4d65a Parents: 31473bc Author: Claus Ibsen <davscl...@apache.org> Authored: Wed Dec 17 17:18:35 2014 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Dec 17 17:18:35 2014 +0100 ---------------------------------------------------------------------- .../camel/model/RemoveHeaderDefinition.java | 4 +- .../camel/model/RemoveHeadersDefinition.java | 8 +- .../camel/model/RemovePropertiesDefinition.java | 8 +- .../camel/model/RemovePropertyDefinition.java | 4 +- .../apache/camel/model/SetHeaderDefinition.java | 4 +- .../camel/model/SetPropertyDefinition.java | 4 +- .../camel/processor/RemoveHeaderProcessor.java | 72 +++++++++++++++ .../camel/processor/RemoveHeadersProcessor.java | 74 +++++++++++++++ .../processor/RemovePropertiesProcessor.java | 73 +++++++++++++++ .../processor/RemovePropertyProcessor.java | 70 ++++++++++++++ .../camel/processor/SetHeaderProcessor.java | 80 ++++++++++++++++ .../camel/processor/SetPropertyProcessor.java | 74 +++++++++++++++ ...agedSetAndRemoveHeaderAndPropertiesTest.java | 97 ++++++++++++++++++++ .../ManagedUnregisterProcessorTest.java | 2 +- 14 files changed, 557 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/5bd61ab5/camel-core/src/main/java/org/apache/camel/model/RemoveHeaderDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/RemoveHeaderDefinition.java b/camel-core/src/main/java/org/apache/camel/model/RemoveHeaderDefinition.java index 419af48..6b032ee 100644 --- a/camel-core/src/main/java/org/apache/camel/model/RemoveHeaderDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/RemoveHeaderDefinition.java @@ -22,7 +22,7 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; import org.apache.camel.Processor; -import org.apache.camel.builder.ProcessorBuilder; +import org.apache.camel.processor.RemoveHeaderProcessor; import org.apache.camel.spi.RouteContext; import org.apache.camel.util.ObjectHelper; @@ -60,7 +60,7 @@ public class RemoveHeaderDefinition extends NoOutputDefinition<RemoveHeaderDefin @Override public Processor createProcessor(RouteContext routeContext) throws Exception { ObjectHelper.notNull(getHeaderName(), "headerName", this); - return ProcessorBuilder.removeHeader(getHeaderName()); + return new RemoveHeaderProcessor(getHeaderName()); } public void setHeaderName(String headerName) { http://git-wip-us.apache.org/repos/asf/camel/blob/5bd61ab5/camel-core/src/main/java/org/apache/camel/model/RemoveHeadersDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/RemoveHeadersDefinition.java b/camel-core/src/main/java/org/apache/camel/model/RemoveHeadersDefinition.java index 447dc47..022183e 100644 --- a/camel-core/src/main/java/org/apache/camel/model/RemoveHeadersDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/RemoveHeadersDefinition.java @@ -23,7 +23,7 @@ import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; import org.apache.camel.Processor; -import org.apache.camel.builder.ProcessorBuilder; +import org.apache.camel.processor.RemoveHeadersProcessor; import org.apache.camel.spi.RouteContext; import org.apache.camel.util.ObjectHelper; @@ -72,11 +72,11 @@ public class RemoveHeadersDefinition extends NoOutputDefinition<RemoveHeadersDef public Processor createProcessor(RouteContext routeContext) throws Exception { ObjectHelper.notNull(getPattern(), "patterns", this); if (getExcludePatterns() != null) { - return ProcessorBuilder.removeHeaders(getPattern(), getExcludePatterns()); + return new RemoveHeadersProcessor(getPattern(), getExcludePatterns()); } else if (getExcludePattern() != null) { - return ProcessorBuilder.removeHeaders(getPattern(), getExcludePattern()); + return new RemoveHeadersProcessor(getPattern(), new String[]{getExcludePattern()}); } else { - return ProcessorBuilder.removeHeaders(getPattern()); + return new RemoveHeadersProcessor(getPattern(), null); } } http://git-wip-us.apache.org/repos/asf/camel/blob/5bd61ab5/camel-core/src/main/java/org/apache/camel/model/RemovePropertiesDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/RemovePropertiesDefinition.java b/camel-core/src/main/java/org/apache/camel/model/RemovePropertiesDefinition.java index 8480447..fcae605 100644 --- a/camel-core/src/main/java/org/apache/camel/model/RemovePropertiesDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/RemovePropertiesDefinition.java @@ -23,7 +23,7 @@ import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; import org.apache.camel.Processor; -import org.apache.camel.builder.ProcessorBuilder; +import org.apache.camel.processor.RemovePropertiesProcessor; import org.apache.camel.spi.RouteContext; import org.apache.camel.util.ObjectHelper; @@ -72,11 +72,11 @@ public class RemovePropertiesDefinition extends NoOutputDefinition<RemovePropert public Processor createProcessor(RouteContext routeContext) throws Exception { ObjectHelper.notNull(getPattern(), "patterns", this); if (getExcludePatterns() != null) { - return ProcessorBuilder.removeProperties(getPattern(), getExcludePatterns()); + return new RemovePropertiesProcessor(getPattern(), getExcludePatterns()); } else if (getExcludePattern() != null) { - return ProcessorBuilder.removeProperties(getPattern(), getExcludePattern()); + return new RemovePropertiesProcessor(getPattern(), new String[]{getExcludePattern()}); } else { - return ProcessorBuilder.removeProperties(getPattern()); + return new RemovePropertiesProcessor(getPattern(), null); } } http://git-wip-us.apache.org/repos/asf/camel/blob/5bd61ab5/camel-core/src/main/java/org/apache/camel/model/RemovePropertyDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/RemovePropertyDefinition.java b/camel-core/src/main/java/org/apache/camel/model/RemovePropertyDefinition.java index 2dcab42..817a2f0 100644 --- a/camel-core/src/main/java/org/apache/camel/model/RemovePropertyDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/RemovePropertyDefinition.java @@ -22,7 +22,7 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; import org.apache.camel.Processor; -import org.apache.camel.builder.ProcessorBuilder; +import org.apache.camel.processor.RemovePropertyProcessor; import org.apache.camel.spi.RouteContext; import org.apache.camel.util.ObjectHelper; @@ -60,7 +60,7 @@ public class RemovePropertyDefinition extends NoOutputDefinition<RemovePropertyD @Override public Processor createProcessor(RouteContext routeContext) throws Exception { ObjectHelper.notNull(getPropertyName(), "propertyName", this); - return ProcessorBuilder.removeProperty(getPropertyName()); + return new RemovePropertyProcessor(getPropertyName()); } public void setPropertyName(String propertyName) { http://git-wip-us.apache.org/repos/asf/camel/blob/5bd61ab5/camel-core/src/main/java/org/apache/camel/model/SetHeaderDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/SetHeaderDefinition.java b/camel-core/src/main/java/org/apache/camel/model/SetHeaderDefinition.java index 79c23e9..711339e 100644 --- a/camel-core/src/main/java/org/apache/camel/model/SetHeaderDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/SetHeaderDefinition.java @@ -24,8 +24,8 @@ import javax.xml.bind.annotation.XmlRootElement; import org.apache.camel.Expression; import org.apache.camel.Processor; import org.apache.camel.builder.ExpressionBuilder; -import org.apache.camel.builder.ProcessorBuilder; import org.apache.camel.model.language.ExpressionDefinition; +import org.apache.camel.processor.SetHeaderProcessor; import org.apache.camel.spi.Required; import org.apache.camel.spi.RouteContext; import org.apache.camel.util.ObjectHelper; @@ -76,7 +76,7 @@ public class SetHeaderDefinition extends NoOutputExpressionNode { public Processor createProcessor(RouteContext routeContext) throws Exception { ObjectHelper.notNull(headerName, "headerName"); Expression expr = getExpression().createExpression(routeContext); - return ProcessorBuilder.setHeader(getHeaderName(), expr); + return new SetHeaderProcessor(getHeaderName(), expr); } @Required http://git-wip-us.apache.org/repos/asf/camel/blob/5bd61ab5/camel-core/src/main/java/org/apache/camel/model/SetPropertyDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/SetPropertyDefinition.java b/camel-core/src/main/java/org/apache/camel/model/SetPropertyDefinition.java index 9c4434f..713f3d9 100644 --- a/camel-core/src/main/java/org/apache/camel/model/SetPropertyDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/SetPropertyDefinition.java @@ -24,8 +24,8 @@ import javax.xml.bind.annotation.XmlRootElement; import org.apache.camel.Expression; import org.apache.camel.Processor; import org.apache.camel.builder.ExpressionBuilder; -import org.apache.camel.builder.ProcessorBuilder; import org.apache.camel.model.language.ExpressionDefinition; +import org.apache.camel.processor.SetPropertyProcessor; import org.apache.camel.spi.Required; import org.apache.camel.spi.RouteContext; import org.apache.camel.util.ObjectHelper; @@ -76,7 +76,7 @@ public class SetPropertyDefinition extends NoOutputExpressionNode { public Processor createProcessor(RouteContext routeContext) throws Exception { ObjectHelper.notNull(getPropertyName(), "propertyName", this); Expression expr = getExpression().createExpression(routeContext); - return ProcessorBuilder.setProperty(getPropertyName(), expr); + return new SetPropertyProcessor(getPropertyName(), expr); } @Required http://git-wip-us.apache.org/repos/asf/camel/blob/5bd61ab5/camel-core/src/main/java/org/apache/camel/processor/RemoveHeaderProcessor.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/processor/RemoveHeaderProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/RemoveHeaderProcessor.java new file mode 100644 index 0000000..b0b83f7 --- /dev/null +++ b/camel-core/src/main/java/org/apache/camel/processor/RemoveHeaderProcessor.java @@ -0,0 +1,72 @@ +/** + * 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.processor; + +import org.apache.camel.AsyncCallback; +import org.apache.camel.AsyncProcessor; +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.Traceable; +import org.apache.camel.support.ServiceSupport; +import org.apache.camel.util.AsyncProcessorHelper; + +/** + * A processor which removes the header from the IN or OUT message + */ +public class RemoveHeaderProcessor extends ServiceSupport implements AsyncProcessor, Traceable { + private final String headerName; + + public RemoveHeaderProcessor(String headerName) { + this.headerName = headerName; + } + + public void process(Exchange exchange) throws Exception { + AsyncProcessorHelper.process(this, exchange); + } + + @Override + public boolean process(Exchange exchange, AsyncCallback callback) { + try { + Message message = exchange.hasOut() ? exchange.getOut() : exchange.getIn(); + message.removeHeader(headerName); + } catch (Exception e) { + exchange.setException(e); + } + + callback.done(true); + return true; + } + + @Override + public String toString() { + return "RemoveHeader(" + headerName + ")"; + } + + public String getTraceLabel() { + return "removeHeader[" + headerName + "]"; + } + + @Override + protected void doStart() throws Exception { + // noop + } + + @Override + protected void doStop() throws Exception { + // noop + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/5bd61ab5/camel-core/src/main/java/org/apache/camel/processor/RemoveHeadersProcessor.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/processor/RemoveHeadersProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/RemoveHeadersProcessor.java new file mode 100644 index 0000000..a104c26 --- /dev/null +++ b/camel-core/src/main/java/org/apache/camel/processor/RemoveHeadersProcessor.java @@ -0,0 +1,74 @@ +/** + * 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.processor; + +import org.apache.camel.AsyncCallback; +import org.apache.camel.AsyncProcessor; +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.Traceable; +import org.apache.camel.support.ServiceSupport; +import org.apache.camel.util.AsyncProcessorHelper; + +/** + * A processor which removes one ore more headers from the IN or OUT message + */ +public class RemoveHeadersProcessor extends ServiceSupport implements AsyncProcessor, Traceable { + private final String pattern; + private final String[] excludePattern; + + public RemoveHeadersProcessor(String pattern, String[] excludePattern) { + this.pattern = pattern; + this.excludePattern = excludePattern; + } + + public void process(Exchange exchange) throws Exception { + AsyncProcessorHelper.process(this, exchange); + } + + @Override + public boolean process(Exchange exchange, AsyncCallback callback) { + try { + Message message = exchange.hasOut() ? exchange.getOut() : exchange.getIn(); + message.removeHeaders(pattern, excludePattern); + } catch (Exception e) { + exchange.setException(e); + } + + callback.done(true); + return true; + } + + @Override + public String toString() { + return "RemoveHeaders(" + pattern + ")"; + } + + public String getTraceLabel() { + return "removeHeaders[" + pattern + "]"; + } + + @Override + protected void doStart() throws Exception { + // noop + } + + @Override + protected void doStop() throws Exception { + // noop + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/5bd61ab5/camel-core/src/main/java/org/apache/camel/processor/RemovePropertiesProcessor.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/processor/RemovePropertiesProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/RemovePropertiesProcessor.java new file mode 100644 index 0000000..0ad4096 --- /dev/null +++ b/camel-core/src/main/java/org/apache/camel/processor/RemovePropertiesProcessor.java @@ -0,0 +1,73 @@ +/** + * 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.processor; + +import org.apache.camel.AsyncCallback; +import org.apache.camel.AsyncProcessor; +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.Traceable; +import org.apache.camel.support.ServiceSupport; +import org.apache.camel.util.AsyncProcessorHelper; + +/** + * A processor which removes one ore more properties from the exchange + */ +public class RemovePropertiesProcessor extends ServiceSupport implements AsyncProcessor, Traceable { + private final String pattern; + private final String[] excludePattern; + + public RemovePropertiesProcessor(String pattern, String[] excludePattern) { + this.pattern = pattern; + this.excludePattern = excludePattern; + } + + public void process(Exchange exchange) throws Exception { + AsyncProcessorHelper.process(this, exchange); + } + + @Override + public boolean process(Exchange exchange, AsyncCallback callback) { + try { + exchange.removeProperties(pattern, excludePattern); + } catch (Exception e) { + exchange.setException(e); + } + + callback.done(true); + return true; + } + + @Override + public String toString() { + return "RemoveProperties(" + pattern + ")"; + } + + public String getTraceLabel() { + return "removeProperties[" + pattern + "]"; + } + + @Override + protected void doStart() throws Exception { + // noop + } + + @Override + protected void doStop() throws Exception { + // noop + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/5bd61ab5/camel-core/src/main/java/org/apache/camel/processor/RemovePropertyProcessor.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/processor/RemovePropertyProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/RemovePropertyProcessor.java new file mode 100644 index 0000000..a3a6ad0 --- /dev/null +++ b/camel-core/src/main/java/org/apache/camel/processor/RemovePropertyProcessor.java @@ -0,0 +1,70 @@ +/** + * 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.processor; + +import org.apache.camel.AsyncCallback; +import org.apache.camel.AsyncProcessor; +import org.apache.camel.Exchange; +import org.apache.camel.Traceable; +import org.apache.camel.support.ServiceSupport; +import org.apache.camel.util.AsyncProcessorHelper; + +/** + * A processor which removes the property from the exchange + */ +public class RemovePropertyProcessor extends ServiceSupport implements AsyncProcessor, Traceable { + private final String propertyName; + + public RemovePropertyProcessor(String propertyName) { + this.propertyName = propertyName; + } + + public void process(Exchange exchange) throws Exception { + AsyncProcessorHelper.process(this, exchange); + } + + @Override + public boolean process(Exchange exchange, AsyncCallback callback) { + try { + exchange.removeProperty(propertyName); + } catch (Exception e) { + exchange.setException(e); + } + + callback.done(true); + return true; + } + + @Override + public String toString() { + return "RemoveProperty(" + propertyName + ")"; + } + + public String getTraceLabel() { + return "removeProperty[" + propertyName + "]"; + } + + @Override + protected void doStart() throws Exception { + // noop + } + + @Override + protected void doStop() throws Exception { + // noop + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/5bd61ab5/camel-core/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java new file mode 100644 index 0000000..bfcd3dd --- /dev/null +++ b/camel-core/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java @@ -0,0 +1,80 @@ +/** + * 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.processor; + +import org.apache.camel.AsyncCallback; +import org.apache.camel.AsyncProcessor; +import org.apache.camel.Exchange; +import org.apache.camel.Expression; +import org.apache.camel.Message; +import org.apache.camel.Traceable; +import org.apache.camel.support.ServiceSupport; +import org.apache.camel.util.AsyncProcessorHelper; + +/** + * A processor which sets the header on the IN or OUT message with an {@link org.apache.camel.Expression} + */ +public class SetHeaderProcessor extends ServiceSupport implements AsyncProcessor, Traceable { + private final String headerName; + private final Expression expression; + + public SetHeaderProcessor(String headerName, Expression expression) { + this.headerName = headerName; + this.expression = expression; + } + + public void process(Exchange exchange) throws Exception { + AsyncProcessorHelper.process(this, exchange); + } + + @Override + public boolean process(Exchange exchange, AsyncCallback callback) { + try { + Object newHeader = expression.evaluate(exchange, Object.class); + + boolean out = exchange.hasOut(); + Message old = out ? exchange.getOut() : exchange.getIn(); + + old.setHeader(headerName, newHeader); + + } catch (Exception e) { + exchange.setException(e); + } + + callback.done(true); + return true; + } + + @Override + public String toString() { + return "SetHeader(" + headerName + ", " + expression + ")"; + } + + public String getTraceLabel() { + return "setHeader[" + headerName + ", " + expression + "]"; + } + + @Override + protected void doStart() throws Exception { + // noop + } + + @Override + protected void doStop() throws Exception { + // noop + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/5bd61ab5/camel-core/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java new file mode 100644 index 0000000..d50d07c --- /dev/null +++ b/camel-core/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java @@ -0,0 +1,74 @@ +/** + * 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.processor; + +import org.apache.camel.AsyncCallback; +import org.apache.camel.AsyncProcessor; +import org.apache.camel.Exchange; +import org.apache.camel.Expression; +import org.apache.camel.Traceable; +import org.apache.camel.support.ServiceSupport; +import org.apache.camel.util.AsyncProcessorHelper; + +/** + * A processor which sets the property on the exchange with an {@link org.apache.camel.Expression} + */ +public class SetPropertyProcessor extends ServiceSupport implements AsyncProcessor, Traceable { + private final String propertyName; + private final Expression expression; + + public SetPropertyProcessor(String propertyName, Expression expression) { + this.propertyName = propertyName; + this.expression = expression; + } + + public void process(Exchange exchange) throws Exception { + AsyncProcessorHelper.process(this, exchange); + } + + @Override + public boolean process(Exchange exchange, AsyncCallback callback) { + try { + Object newProperty = expression.evaluate(exchange, Object.class); + exchange.setProperty(propertyName, newProperty); + } catch (Exception e) { + exchange.setException(e); + } + + callback.done(true); + return true; + } + + @Override + public String toString() { + return "SetProperty(" + propertyName + ", " + expression + ")"; + } + + public String getTraceLabel() { + return "setProperty[" + propertyName + ", " + expression + "]"; + } + + @Override + protected void doStart() throws Exception { + // noop + } + + @Override + protected void doStop() throws Exception { + // noop + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/5bd61ab5/camel-core/src/test/java/org/apache/camel/management/ManagedSetAndRemoveHeaderAndPropertiesTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedSetAndRemoveHeaderAndPropertiesTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedSetAndRemoveHeaderAndPropertiesTest.java new file mode 100644 index 0000000..cf085f7 --- /dev/null +++ b/camel-core/src/test/java/org/apache/camel/management/ManagedSetAndRemoveHeaderAndPropertiesTest.java @@ -0,0 +1,97 @@ +/** + * 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.management; + +import java.util.Iterator; +import java.util.Set; +import javax.management.MBeanServer; +import javax.management.ObjectName; + +import org.apache.camel.builder.RouteBuilder; + +/** + * @version + */ +public class ManagedSetAndRemoveHeaderAndPropertiesTest extends ManagementTestSupport { + + public void testSetAndRemove() throws Exception { + // JMX tests dont work well on AIX CI servers (hangs them) + if (isPlatform("aix")) { + return; + } + + // fire a message to get it running + getMockEndpoint("mock:result").expectedMessageCount(1); + template.sendBody("direct:start", "Hello World"); + assertMockEndpointsSatisfied(); + + MBeanServer mbeanServer = getMBeanServer(); + + Set<ObjectName> set = mbeanServer.queryNames(new ObjectName("*:type=processors,*"), null); + assertEquals(8, set.size()); + Iterator<ObjectName> it = set.iterator(); + + boolean found = false; + boolean found2 = false; + boolean found3 = false; + boolean found4 = false; + boolean found5 = false; + boolean found6 = false; + for (int i = 0; i < 8; i++) { + ObjectName on = it.next(); + + boolean registered = mbeanServer.isRegistered(on); + assertEquals("Should be registered", true, registered); + + // should be one with name setFoo + String id = (String) mbeanServer.getAttribute(on, "ProcessorId"); + log.info("id = {}", id); + + found |= "setFoo".equals(id); + found2 |= "setBeer".equals(id); + found3 |= "unsetFoo".equals(id); + found4 |= "unsetFoos".equals(id); + found5 |= "unsetBeer".equals(id); + found6 |= "unsetBeers".equals(id); + } + + assertTrue("Should find setHeader mbean", found); + assertTrue("Should find setProperty mbean", found2); + assertTrue("Should find removeHeader mbean", found3); + assertTrue("Should find removeHeaders mbean", found4); + assertTrue("Should find removeProperty mbean", found5); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:start").routeId("foo") + .setHeader("foo", constant("bar")).id("setFoo") + .setProperty("beer", constant("yes")).id("setBeer") + .removeHeader("foo").id("unsetFoo") + .removeHeaders("foo").id("unsetFoos") + .removeProperty("beer").id("unsetBeer") + .removeProperties("beer").id("unsetBeers") + .to("log:foo").id("logFoo") + .to("mock:result").id("mockResult"); + } + }; + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/5bd61ab5/camel-core/src/test/java/org/apache/camel/management/ManagedUnregisterProcessorTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedUnregisterProcessorTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedUnregisterProcessorTest.java index 378aa8e..57ca77f 100644 --- a/camel-core/src/test/java/org/apache/camel/management/ManagedUnregisterProcessorTest.java +++ b/camel-core/src/test/java/org/apache/camel/management/ManagedUnregisterProcessorTest.java @@ -36,7 +36,7 @@ public class ManagedUnregisterProcessorTest extends ManagementTestSupport { MBeanServer mbeanServer = getMBeanServer(); Set<ObjectName> set = mbeanServer.queryNames(new ObjectName("*:type=processors,*"), null); - assertEquals(1, set.size()); + assertEquals(2, set.size()); ObjectName on = set.iterator().next();