Author: jstrachan
Date: Fri Oct 19 10:04:59 2012
New Revision: 1400019
URL: http://svn.apache.org/viewvc?rev=1400019&view=rev
Log:
initial spike of support for Bindings on camel endpoints. see
https://cwiki.apache.org/confluence/display/CAMEL/Binding for more details
Added:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingComponent.java
(with props)
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingConsumerProcessor.java
(with props)
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingEndpoint.java
(with props)
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingNameComponent.java
(with props)
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingProducer.java
(with props)
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/binding/
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/binding/DataFormatBinding.java
(with props)
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/binding/package.html
- copied, changed from r1399705,
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/package.html
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Binding.java
(with props)
camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/binding
- copied, changed from r1399705,
camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/bean
camel/trunk/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonBindingTest.java
- copied, changed from r1399705,
camel/trunk/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalTest.java
camel/trunk/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonNameBindingTest.java
(with props)
Added:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingComponent.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingComponent.java?rev=1400019&view=auto
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingComponent.java
(added)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingComponent.java
Fri Oct 19 10:04:59 2012
@@ -0,0 +1,100 @@
+/**
+ *
+ * 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.component.binding;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.impl.DefaultComponent;
+import org.apache.camel.spi.Binding;
+import org.apache.camel.util.CamelContextHelper;
+import org.apache.camel.util.ObjectHelper;
+
+import static org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint;
+
+/**
+ * A composite {@link Component} which creates a {@link BindingEndpoint} from a
+ * configured {@link Binding} instance and using the optional {@link
#setUriPostfix(String)}
+ * and {@link #setUriPostfix(String)} to create the underlying endpoint from
the remaining URI
+ */
+public class BindingComponent extends DefaultComponent {
+ private Binding binding;
+ private String uriPrefix;
+ private String uriPostfix;
+
+ public BindingComponent() {
+ }
+
+ public BindingComponent(Binding binding) {
+ this.binding = binding;
+ }
+
+ public BindingComponent(Binding binding, String uriPrefix) {
+ this(binding);
+ this.uriPrefix = uriPrefix;
+ }
+
+ public BindingComponent(Binding binding, String uriPrefix, String
uriPostfix) {
+ this(binding, uriPrefix);
+ this.uriPostfix = uriPostfix;
+ }
+
+ public Binding getBinding() {
+ return binding;
+ }
+
+ public void setBinding(Binding binding) {
+ this.binding = binding;
+ }
+
+ public String getUriPostfix() {
+ return uriPostfix;
+ }
+
+ public void setUriPostfix(String uriPostfix) {
+ this.uriPostfix = uriPostfix;
+ }
+
+ public String getUriPrefix() {
+ return uriPrefix;
+ }
+
+ public void setUriPrefix(String uriPrefix) {
+ this.uriPrefix = uriPrefix;
+ }
+
+ @Override
+ protected Endpoint createEndpoint(String uri, String remaining,
Map<String, Object> parameters)
+ throws Exception {
+ Binding bindingValue = getBinding();
+ ObjectHelper.notNull(bindingValue, "binding");
+ CamelContext camelContext = getCamelContext();
+ String delegateURI = createDelegateURI(remaining, parameters);
+ Endpoint delegate = getMandatoryEndpoint(camelContext, delegateURI);
+ return new BindingEndpoint(uri, this, bindingValue, delegate);
+ }
+
+ protected String createDelegateURI(String remaining, Map<String,Object>
parameters) {
+ return getOrEmpty(uriPrefix) + remaining + getOrEmpty(uriPostfix);
+ }
+
+ protected static String getOrEmpty(String text) {
+ return text != null ? text : "";
+ }
+}
Propchange:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingComponent.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingConsumerProcessor.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingConsumerProcessor.java?rev=1400019&view=auto
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingConsumerProcessor.java
(added)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingConsumerProcessor.java
Fri Oct 19 10:04:59 2012
@@ -0,0 +1,53 @@
+/**
+ *
+ * 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.component.binding;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.support.ServiceSupport;
+import org.apache.camel.util.ServiceHelper;
+
+/**
+ * Applies a {@link org.apache.camel.spi.Binding} to a consumer
+ */
+public class BindingConsumerProcessor extends ServiceSupport implements
Processor {
+ private final BindingEndpoint endpoint;
+ private final Processor delegateProcessor;
+ private final Processor bindingProcessor;
+
+ public BindingConsumerProcessor(BindingEndpoint endpoint, Processor
delegateProcessor) {
+ this.endpoint = endpoint;
+ this.delegateProcessor = delegateProcessor;
+ this.bindingProcessor = endpoint.getBinding().createConsumeProcessor();
+ }
+
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ endpoint.pipelineBindingProcessor(bindingProcessor, exchange,
delegateProcessor);
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+ ServiceHelper.startService(bindingProcessor);
+ }
+
+ @Override
+ protected void doStop() throws Exception {
+ ServiceHelper.stopService(bindingProcessor);
+ }
+}
Propchange:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingConsumerProcessor.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingEndpoint.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingEndpoint.java?rev=1400019&view=auto
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingEndpoint.java
(added)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingEndpoint.java
Fri Oct 19 10:04:59 2012
@@ -0,0 +1,95 @@
+/**
+ *
+ * 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.component.binding;
+
+import org.apache.camel.Component;
+import org.apache.camel.Consumer;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.impl.DefaultEndpoint;
+import org.apache.camel.spi.Binding;
+import org.apache.camel.util.ExchangeHelper;
+
+/**
+ * Applies a {@link org.apache.camel.spi.Binding} to an underlying {@link
Endpoint} so that the binding processes messages
+ * before its sent to the endpoint and processes messages received by the
endpoint consumer before its passed
+ * to the real consumer.
+ */
+public class BindingEndpoint extends DefaultEndpoint {
+ private final Binding binding;
+ private final Endpoint delegate;
+
+ public BindingEndpoint(String uri, Component component, Binding binding,
Endpoint delegate) {
+ super(uri, component);
+ this.binding = binding;
+ this.delegate = delegate;
+ }
+
+ @Override
+ public Producer createProducer() throws Exception {
+ return new BindingProducer(this);
+ }
+
+ @Override
+ public Consumer createConsumer(Processor processor) throws Exception {
+ Processor bindingProcessor = new BindingConsumerProcessor(this,
processor);
+ return delegate.createConsumer(bindingProcessor);
+ }
+
+ @Override
+ public boolean isSingleton() {
+ return true;
+ }
+
+ public Binding getBinding() {
+ return binding;
+ }
+
+ public Endpoint getDelegate() {
+ return delegate;
+ }
+
+
+ /**
+ * Applies the {@link Binding} processor to the given exchange before
passing it on to the delegateProcessor (either a producer or consumer)
+ */
+ public void pipelineBindingProcessor(Processor bindingProcessor, Exchange
exchange, Processor delegateProcessor) throws Exception {
+ // use same exchange - seems Pipeline does these days
+ Exchange bindingExchange = exchange;
+ bindingProcessor.process(bindingExchange);
+ Exchange delegateExchange = createNextExchange(bindingExchange);
+ ExchangeHelper.copyResults(bindingExchange, delegateExchange);
+ delegateProcessor.process(delegateExchange);
+ }
+
+ // TODO this code was copied from Pipeline - should make it static and
reuse the code?
+ protected Exchange createNextExchange(Exchange previousExchange) {
+ Exchange answer = previousExchange;
+
+ // now lets set the input of the next exchange to the output of the
+ // previous message if it is not null
+ if (answer.hasOut()) {
+ answer.setIn(answer.getOut());
+ answer.setOut(null);
+ }
+ return answer;
+ }
+
+}
Propchange:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingEndpoint.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingNameComponent.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingNameComponent.java?rev=1400019&view=auto
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingNameComponent.java
(added)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingNameComponent.java
Fri Oct 19 10:04:59 2012
@@ -0,0 +1,57 @@
+/**
+ *
+ * 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.component.binding;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.impl.DefaultComponent;
+import org.apache.camel.spi.Binding;
+import org.apache.camel.util.CamelContextHelper;
+
+import static org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint;
+
+/**
+ * A Binding component using the URI form
<code>binding:nameOfBinding:endpointURI</code>
+ * to extract the binding name which is then resolved from the registry and
used to create a
+ * {@link BindingEndpoint} from the underlying {@link Endpoint}
+ */
+public class BindingNameComponent extends DefaultComponent {
+ protected static final String BAD_FORMAT_MESSAGE
+ = "URI should be of the format binding:nameOfBinding:endpointURI";
+
+ @Override
+ protected Endpoint createEndpoint(String uri, String remaining,
Map<String, Object> parameters)
+ throws Exception {
+
+ CamelContext camelContext = getCamelContext();
+ int idx = remaining.indexOf(":");
+ if (idx <= 0) {
+ throw new IllegalArgumentException(BAD_FORMAT_MESSAGE);
+ }
+ String bindingName = remaining.substring(0, idx);
+ String delegateURI = remaining.substring(idx + 1);
+ if (delegateURI.isEmpty()) {
+ throw new IllegalArgumentException(BAD_FORMAT_MESSAGE);
+ }
+ Binding binding = CamelContextHelper.mandatoryLookup(camelContext,
bindingName, Binding.class);
+ Endpoint delegate = getMandatoryEndpoint(camelContext, delegateURI);
+ return new BindingEndpoint(uri, this, binding, delegate);
+ }
+}
Propchange:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingNameComponent.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingProducer.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingProducer.java?rev=1400019&view=auto
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingProducer.java
(added)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingProducer.java
Fri Oct 19 10:04:59 2012
@@ -0,0 +1,58 @@
+/**
+ *
+ * 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.component.binding;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.util.ServiceHelper;
+
+/**
+ * A {@link Producer} which applies a {@link org.apache.camel.spi.Binding}
before invoking the underlying {@link Producer} on the {@link Endpoint}
+ */
+public class BindingProducer extends DefaultProducer {
+ private final BindingEndpoint endpoint;
+ private final Processor bindingProcessor;
+ private final Producer delegateProducer;
+
+ public BindingProducer(BindingEndpoint endpoint) throws Exception {
+ super(endpoint);
+ this.endpoint = endpoint;
+ bindingProcessor = endpoint.getBinding().createProduceProcessor();
+ delegateProducer = endpoint.getDelegate().createProducer();
+ }
+
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ endpoint.pipelineBindingProcessor(bindingProcessor, exchange,
delegateProducer);
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+ ServiceHelper.startServices(bindingProcessor, delegateProducer);
+ super.doStart();
+ }
+
+ @Override
+ protected void doStop() throws Exception {
+ ServiceHelper.stopServices(delegateProducer, bindingProcessor);
+ super.doStop();
+ }
+}
Propchange:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/binding/BindingProducer.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/binding/DataFormatBinding.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/binding/DataFormatBinding.java?rev=1400019&view=auto
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/binding/DataFormatBinding.java
(added)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/binding/DataFormatBinding.java
Fri Oct 19 10:04:59 2012
@@ -0,0 +1,98 @@
+/**
+ *
+ * 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.binding;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.Processor;
+import org.apache.camel.processor.MarshalProcessor;
+import org.apache.camel.processor.UnmarshalProcessor;
+import org.apache.camel.spi.Binding;
+import org.apache.camel.spi.DataFormat;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * Represents a {@link org.apache.camel.spi.Binding} which Marshals the
message in the ProduceProcessor and
+ * Unmarshals the message in the ConsumeProcessor
+ */
+public class DataFormatBinding implements Binding {
+ private DataFormat producerDataFormat;
+ private DataFormat consumerDataFormat;
+
+ public DataFormatBinding() {
+ }
+
+ public DataFormatBinding(DataFormat dataFormat) {
+ this(dataFormat, dataFormat);
+ }
+
+ public DataFormatBinding(DataFormat consumerDataFormat, DataFormat
producerDataFormat) {
+ this.consumerDataFormat = consumerDataFormat;
+ this.producerDataFormat = producerDataFormat;
+ }
+
+ @Override
+ public Processor createProduceProcessor() {
+ ObjectHelper.notNull(producerDataFormat, "producerDataFormat");
+ return new MarshalProcessor(producerDataFormat);
+ }
+
+ @Override
+ public Processor createConsumeProcessor() {
+ ObjectHelper.notNull(consumerDataFormat, "consumerDataFormat");
+ return new UnmarshalProcessor(consumerDataFormat);
+ }
+
+ /**
+ * Sets the data format for both producer and consumer sides
+ */
+ public void setDataFormat(DataFormat dataFormat) {
+ setConsumerDataFormat(dataFormat);
+ setProducerDataFormat(dataFormat);
+ }
+
+
+ public DataFormat getConsumerDataFormat() {
+ return consumerDataFormat;
+ }
+
+ public void setConsumerDataFormat(DataFormat consumerDataFormat) {
+ this.consumerDataFormat = consumerDataFormat;
+ }
+
+ public DataFormat getProducerDataFormat() {
+ return producerDataFormat;
+ }
+
+ public void setProducerDataFormat(DataFormat producerDataFormat) {
+ this.producerDataFormat = producerDataFormat;
+ }
+
+
+ /**
+ * We need to set the exchange as being out capable for the output to be
copied in a pipeline
+ * <p/>
+ * TODO should we be more clever about other patterns here?
+ */
+ protected void makeOutCapable(Exchange exchange) {
+ if (!exchange.getPattern().isOutCapable()) {
+ exchange.setPattern(ExchangePattern.InOut);
+ }
+ }
+
+}
Propchange:
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/binding/DataFormatBinding.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied:
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/binding/package.html
(from r1399705,
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/package.html)
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/binding/package.html?p2=camel/trunk/camel-core/src/main/java/org/apache/camel/processor/binding/package.html&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/package.html&r1=1399705&r2=1400019&rev=1400019&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/package.html
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/binding/package.html
Fri Oct 19 10:04:59 2012
@@ -19,7 +19,7 @@
</head>
<body>
-Helper classes for the <a
href="http://camel.apache.org/aggregator.html">Aggregator</a> pattern.
+Helper classes for the <a
href="http://camel.apache.org/binding.html">Binding</a> concept on Endpoints.
</body>
</html>
Added: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Binding.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Binding.java?rev=1400019&view=auto
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Binding.java
(added)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Binding.java Fri
Oct 19 10:04:59 2012
@@ -0,0 +1,40 @@
+/**
+ *
+ * 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.spi;
+
+import org.apache.camel.Processor;
+
+/**
+ * Represents a <a href="http://camel.apache.org/binding.html">Binding</a> or
contract
+ * which can be applied to an Endpoint; such as ensuring that a particular
+ * <a href="http://camel.apache.org/data-format.html">Data Format</a> is used
on messages in and out of an endpoint.
+ */
+public interface Binding {
+
+ /**
+ * Returns a new {@link Processor} which is used by a producer on an
endpoint to implement
+ * the producer side binding before the message is sent to the underlying
endpoint.
+ */
+ Processor createProduceProcessor();
+
+ /**
+ * Returns a new {@link Processor} which is used by a consumer on an
endpoint to process the
+ * message with the binding before its passed to the endpoint consumer
producer.
+ */
+ Processor createConsumeProcessor();
+}
Propchange:
camel/trunk/camel-core/src/main/java/org/apache/camel/spi/Binding.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied:
camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/binding
(from r1399705,
camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/bean)
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/binding?p2=camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/binding&p1=camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/bean&r1=1399705&r2=1400019&rev=1400019&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/bean
(original)
+++
camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/binding
Fri Oct 19 10:04:59 2012
@@ -15,4 +15,4 @@
# limitations under the License.
#
-class=org.apache.camel.component.bean.BeanComponent
\ No newline at end of file
+class=org.apache.camel.component.binding.BindingNameComponent
\ No newline at end of file
Copied:
camel/trunk/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonBindingTest.java
(from r1399705,
camel/trunk/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalTest.java)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonBindingTest.java?p2=camel/trunk/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonBindingTest.java&p1=camel/trunk/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalTest.java&r1=1399705&r2=1400019&rev=1400019&view=diff
==============================================================================
---
camel/trunk/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalTest.java
(original)
+++
camel/trunk/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonBindingTest.java
Fri Oct 19 10:04:59 2012
@@ -16,75 +16,50 @@
*/
package org.apache.camel.component.jackson;
-import java.util.HashMap;
-import java.util.Map;
+import javax.naming.Context;
+import org.apache.camel.Endpoint;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.binding.BindingComponent;
+import org.apache.camel.processor.binding.DataFormatBinding;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
-public class JacksonMarshalTest extends CamelTestSupport {
-
- @Test
- public void testMarshalAndUnmarshalMap() throws Exception {
-
- Map<String, Object> in = new HashMap<String, Object>();
- in.put("name", "Camel");
-
- MockEndpoint mock = getMockEndpoint("mock:reverse");
- mock.expectedMessageCount(1);
- mock.message(0).body().isInstanceOf(Map.class);
- mock.message(0).body().equals(in);
-
- Object marshalled = template.requestBody("direct:in", in);
- String marshalledAsString =
context.getTypeConverter().convertTo(String.class, marshalled);
- assertEquals("{\"name\":\"Camel\"}", marshalledAsString);
-
- template.sendBody("direct:back", marshalled);
-
- mock.assertIsSatisfied();
- }
+public class JacksonBindingTest extends CamelTestSupport {
+ protected MockEndpoint results;
@Test
public void testMarshalAndUnmarshalPojo() throws Exception {
-
TestPojo in = new TestPojo();
in.setName("Camel");
- MockEndpoint mock = getMockEndpoint("mock:reversePojo");
- mock.expectedMessageCount(1);
- mock.message(0).body().isInstanceOf(TestPojo.class);
- mock.message(0).body().equals(in);
-
- Object marshalled = template.requestBody("direct:inPojo", in);
- String marshalledAsString =
context.getTypeConverter().convertTo(String.class, marshalled);
- assertEquals("{\"name\":\"Camel\"}", marshalledAsString);
+ results.expectedMessageCount(1);
+ results.message(0).body().isInstanceOf(TestPojo.class);
+ results.message(0).body().equals(in);
- template.sendBody("direct:backPojo", marshalled);
-
- mock.assertIsSatisfied();
+ template.sendBody("direct:start", in);
+ results.assertIsSatisfied();
}
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
+ results = getMockEndpoint("mock:results");
return new RouteBuilder() {
@Override
public void configure() throws Exception {
-
- JacksonDataFormat format = new JacksonDataFormat();
-
- from("direct:in").marshal(format);
- from("direct:back").unmarshal(format).to("mock:reverse");
-
- JacksonDataFormat formatPojo = new
JacksonDataFormat(TestPojo.class);
-
- from("direct:inPojo").marshal(formatPojo);
-
from("direct:backPojo").unmarshal(formatPojo).to("mock:reversePojo");
-
+
from("direct:start").to("jsonmq:orders").to("file:target/copyOfMessages");
+ from("jsonmq:orders").to(results);
}
};
}
+ @Override
+ protected Context createJndiContext() throws Exception {
+ Context context = super.createJndiContext();
+ JacksonDataFormat format = new JacksonDataFormat(TestPojo.class);
+ context.bind("jsonmq", new BindingComponent(new
DataFormatBinding(format), "file:target/"));
+ return context;
+ }
}
Added:
camel/trunk/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonNameBindingTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonNameBindingTest.java?rev=1400019&view=auto
==============================================================================
---
camel/trunk/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonNameBindingTest.java
(added)
+++
camel/trunk/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonNameBindingTest.java
Fri Oct 19 10:04:59 2012
@@ -0,0 +1,69 @@
+/**
+ * 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.component.jackson;
+
+import javax.naming.Context;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.processor.binding.DataFormatBinding;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class JacksonNameBindingTest extends CamelTestSupport {
+ protected Endpoint boundEndpoint;
+ protected MockEndpoint results;
+
+ @Test
+ public void testMarshalAndUnmarshalPojo() throws Exception {
+ TestPojo in = new TestPojo();
+ in.setName("Camel");
+
+ results.expectedMessageCount(1);
+ results.message(0).body().isInstanceOf(TestPojo.class);
+ results.message(0).body().equals(in);
+
+ template.sendBody("direct:start", in);
+ results.assertIsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ results = getMockEndpoint("mock:results");
+ return new RouteBuilder() {
+
+ @Override
+ public void configure() throws Exception {
+ // lets use the URI to associate the binding
+ // though it would be cleaner to use a DSL...
+ boundEndpoint = endpoint("binding:jackson:file:target/queue");
+
+
from("direct:start").to(boundEndpoint).to("file:target/copyOfMessages");
+ from(boundEndpoint).to(results);
+ }
+ };
+ }
+
+ @Override
+ protected Context createJndiContext() throws Exception {
+ Context context = super.createJndiContext();
+ JacksonDataFormat format = new JacksonDataFormat(TestPojo.class);
+ context.bind("jackson", new DataFormatBinding(format));
+ return context;
+ }
+}
Propchange:
camel/trunk/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonNameBindingTest.java
------------------------------------------------------------------------------
svn:eol-style = native