You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2011/02/24 08:22:32 UTC
svn commit: r1074058 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/impl/
camel-core/src/main/java/org/apache/camel/model/
camel-core/src/test/java/org/apache/camel/processor/intercept/
components/camel-core-xml/src/main/java/org/apache/c...
Author: davsclaus
Date: Thu Feb 24 07:22:32 2011
New Revision: 1074058
URL: http://svn.apache.org/viewvc?rev=1074058&view=rev
Log:
CAMEL-3709: Fixed interceptFrom to work with from endpoint using ref instead of url.
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointInstanceTest.java (contents, props changed)
- copied, changed from r1074047, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointNotUriTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointRefTest.java
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointRefUriTest.java (contents, props changed)
- copied, changed from r1074047, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointNotUriTest.java
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromEndpointRefTest.java
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringInterceptFromEndpointRefTest.xml
- copied, changed from r1074047, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringInterceptFromUriSimpleLogTest.xml
Removed:
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointNotUriTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RoutesDefinition.java
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=1074058&r1=1074057&r2=1074058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Thu Feb 24 07:22:32 2011
@@ -700,7 +700,7 @@ public class DefaultCamelContext extends
isStartingRoutes.set(true);
try {
// must ensure route is prepared, before we can start it
- route.prepare();
+ route.prepare(this);
List<Route> routes = new ArrayList<Route>();
List<RouteContext> routeContexts = route.addRoutes(this, routes);
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java?rev=1074058&r1=1074057&r2=1074058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java Thu Feb 24 07:22:32 2011
@@ -89,10 +89,12 @@ public class RouteDefinition extends Pro
/**
* Prepares the route definition to be ready to be added to {@link CamelContext}
+ *
+ * @param context the camel context
*/
- public void prepare() {
+ public void prepare(CamelContext context) {
if (prepared.compareAndSet(false, true)) {
- RouteDefinitionHelper.prepareRoute(this);
+ RouteDefinitionHelper.prepareRoute(context, this);
}
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java?rev=1074058&r1=1074057&r2=1074058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java Thu Feb 24 07:22:32 2011
@@ -19,6 +19,8 @@ package org.apache.camel.model;
import java.util.ArrayList;
import java.util.List;
+import org.apache.camel.CamelContext;
+import org.apache.camel.util.CamelContextHelper;
import org.apache.camel.util.EndpointHelper;
/**
@@ -73,10 +75,11 @@ public final class RouteDefinitionHelper
* <p/>
* This method does <b>not</b> mark the route as prepared afterwards.
*
- * @param route the route
+ * @param context the camel context
+ * @param route the route
*/
- public static void prepareRoute(RouteDefinition route) {
- prepareRoute(route, null, null, null, null, null);
+ public static void prepareRoute(CamelContext context, RouteDefinition route) {
+ prepareRoute(context, route, null, null, null, null, null);
}
/**
@@ -84,6 +87,7 @@ public final class RouteDefinitionHelper
* <p/>
* This method does <b>not</b> mark the route as prepared afterwards.
*
+ * @param context the camel context
* @param route the route
* @param onExceptions optional list of onExceptions
* @param intercepts optional list of interceptors
@@ -91,7 +95,7 @@ public final class RouteDefinitionHelper
* @param interceptSendToEndpointDefinitions optional list of interceptSendToEndpoints
* @param onCompletions optional list onCompletions
*/
- public static void prepareRoute(RouteDefinition route,
+ public static void prepareRoute(CamelContext context, RouteDefinition route,
List<OnExceptionDefinition> onExceptions,
List<InterceptDefinition> intercepts,
List<InterceptFromDefinition> interceptFromDefinitions,
@@ -113,7 +117,7 @@ public final class RouteDefinitionHelper
RouteDefinitionHelper.prepareRouteForInit(route, abstracts, lower);
// interceptors should be first for the cross cutting concerns
- initInterceptors(route, abstracts, upper, intercepts, interceptFromDefinitions, interceptSendToEndpointDefinitions);
+ initInterceptors(context, route, abstracts, upper, intercepts, interceptFromDefinitions, interceptSendToEndpointDefinitions);
// then on completion
initOnCompletions(abstracts, upper, onCompletions);
// then transactions
@@ -161,7 +165,7 @@ public final class RouteDefinitionHelper
}
}
- private static void initInterceptors(RouteDefinition route,
+ private static void initInterceptors(CamelContext context, RouteDefinition route,
List<ProcessorDefinition> abstracts, List<ProcessorDefinition> upper,
List<InterceptDefinition> intercepts,
List<InterceptFromDefinition> interceptFromDefinitions,
@@ -187,10 +191,10 @@ public final class RouteDefinitionHelper
}
}
- doInitInterceptors(route, upper, intercepts, interceptFromDefinitions, interceptSendToEndpointDefinitions);
+ doInitInterceptors(context, route, upper, intercepts, interceptFromDefinitions, interceptSendToEndpointDefinitions);
}
- private static void doInitInterceptors(RouteDefinition route, List<ProcessorDefinition> upper,
+ private static void doInitInterceptors(CamelContext context, RouteDefinition route, List<ProcessorDefinition> upper,
List<InterceptDefinition> intercepts,
List<InterceptFromDefinition> interceptFromDefinitions,
List<InterceptSendToEndpointDefinition> interceptSendToEndpointDefinitions) {
@@ -216,7 +220,16 @@ public final class RouteDefinitionHelper
if (intercept.getUri() != null) {
match = false;
for (FromDefinition input : route.getInputs()) {
- if (EndpointHelper.matchEndpoint(input.getUri(), intercept.getUri())) {
+ // a bit more logic to lookup the endpoint as it can be uri/ref based
+ String uri = input.getUri();
+ if (uri != null && uri.startsWith("ref:")) {
+ // its a ref: so lookup the endpoint to get its url
+ uri = CamelContextHelper.getMandatoryEndpoint(context, uri).getEndpointUri();
+ } else if (input.getRef() != null) {
+ // lookup the endpoint to get its url
+ uri = CamelContextHelper.getMandatoryEndpoint(context, "ref:" + input.getRef()).getEndpointUri();
+ }
+ if (EndpointHelper.matchEndpoint(uri, intercept.getUri())) {
match = true;
break;
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/RoutesDefinition.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RoutesDefinition.java?rev=1074058&r1=1074057&r2=1074058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/model/RoutesDefinition.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/RoutesDefinition.java Thu Feb 24 07:22:32 2011
@@ -199,7 +199,7 @@ public class RoutesDefinition extends Op
*/
public RouteDefinition route(RouteDefinition route) {
// must prepare the route before we can add it to the routes list
- RouteDefinitionHelper.prepareRoute(route, getOnExceptions(), getIntercepts(), getInterceptFroms(),
+ RouteDefinitionHelper.prepareRoute(getCamelContext(), route, getOnExceptions(), getIntercepts(), getInterceptFroms(),
getInterceptSendTos(), getOnCompletions());
getRoutes().add(route);
// mark this route as prepared
Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointInstanceTest.java (from r1074047, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointNotUriTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointInstanceTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointInstanceTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointNotUriTest.java&r1=1074047&r2=1074058&rev=1074058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointNotUriTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointInstanceTest.java Thu Feb 24 07:22:32 2011
@@ -23,11 +23,12 @@ import org.apache.camel.builder.RouteBui
/**
* Testing intercept from can intercept when endpoint is an instance
*/
-public class InterceptFromEndpointNotUriTest extends ContextTestSupport {
+public class InterceptFromEndpointInstanceTest extends ContextTestSupport {
- public void testInterceptLog() throws Exception {
- getMockEndpoint("mock:result").expectedMessageCount(1);
+ public void testIntercept() throws Exception {
+ getMockEndpoint("mock:intercepted").expectedMessageCount(1);
getMockEndpoint("mock:first").expectedMessageCount(1);
+ getMockEndpoint("mock:result").expectedMessageCount(1);
template.sendBody("direct:start", "Hello World");
@@ -37,7 +38,7 @@ public class InterceptFromEndpointNotUri
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() throws Exception {
- interceptFrom("direct*").to("log:received");
+ interceptFrom("direct*").to("mock:intercepted");
Endpoint direct = context.getEndpoint("direct:start");
Endpoint seda = context.getEndpoint("seda:bar");
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointInstanceTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointInstanceTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointRefTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointRefTest.java?rev=1074058&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointRefTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointRefTest.java Thu Feb 24 07:22:32 2011
@@ -0,0 +1,62 @@
+/**
+ * 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.intercept;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.SimpleRegistry;
+
+/**
+ * Testing intercept from can intercept when endpoint is an instance
+ */
+public class InterceptFromEndpointRefTest extends ContextTestSupport {
+
+ private SimpleRegistry reg = new SimpleRegistry();
+
+ @Override
+ protected CamelContext createCamelContext() throws Exception {
+ return new DefaultCamelContext(reg);
+ }
+
+ public void testIntercept() throws Exception {
+ getMockEndpoint("mock:intercepted").expectedMessageCount(1);
+ getMockEndpoint("mock:first").expectedMessageCount(1);
+ getMockEndpoint("mock:result").expectedMessageCount(1);
+
+ template.sendBody("direct:start", "Hello World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() throws Exception {
+ reg.put("start", context.getEndpoint("direct:start"));
+ reg.put("bar", context.getEndpoint("seda:bar"));
+
+ interceptFrom("direct*").to("mock:intercepted");
+
+ from("ref:start").to("mock:first").to("ref:bar");
+
+ from("ref:bar").to("mock:result");
+ }
+ };
+ }
+
+}
\ No newline at end of file
Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointRefUriTest.java (from r1074047, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointNotUriTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointRefUriTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointRefUriTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointNotUriTest.java&r1=1074047&r2=1074058&rev=1074058&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointNotUriTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointRefUriTest.java Thu Feb 24 07:22:32 2011
@@ -16,18 +16,28 @@
*/
package org.apache.camel.processor.intercept;
+import org.apache.camel.CamelContext;
import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Endpoint;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.SimpleRegistry;
/**
* Testing intercept from can intercept when endpoint is an instance
*/
-public class InterceptFromEndpointNotUriTest extends ContextTestSupport {
+public class InterceptFromEndpointRefUriTest extends ContextTestSupport {
- public void testInterceptLog() throws Exception {
- getMockEndpoint("mock:result").expectedMessageCount(1);
+ private SimpleRegistry reg = new SimpleRegistry();
+
+ @Override
+ protected CamelContext createCamelContext() throws Exception {
+ return new DefaultCamelContext(reg);
+ }
+
+ public void testIntercept() throws Exception {
+ getMockEndpoint("mock:intercepted").expectedMessageCount(1);
getMockEndpoint("mock:first").expectedMessageCount(1);
+ getMockEndpoint("mock:result").expectedMessageCount(1);
template.sendBody("direct:start", "Hello World");
@@ -37,14 +47,14 @@ public class InterceptFromEndpointNotUri
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() throws Exception {
- interceptFrom("direct*").to("log:received");
+ reg.put("start", context.getEndpoint("direct:start"));
+ reg.put("bar", context.getEndpoint("seda:bar"));
- Endpoint direct = context.getEndpoint("direct:start");
- Endpoint seda = context.getEndpoint("seda:bar");
+ interceptFrom("direct*").to("mock:intercepted");
- from(direct).to("mock:first").to(seda);
+ from("ref:start").to("mock:first").to("ref:bar");
- from(seda).to("mock:result");
+ from("ref:bar").to("mock:result");
}
};
}
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointRefUriTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptFromEndpointRefUriTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java?rev=1074058&r1=1074057&r2=1074058&view=diff
==============================================================================
--- camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java (original)
+++ camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java Thu Feb 24 07:22:32 2011
@@ -307,7 +307,7 @@ public abstract class AbstractCamelConte
private void prepareRoutes() {
for (RouteDefinition route : getRoutes()) {
// leverage logic from route definition helper to prepare the route
- RouteDefinitionHelper.prepareRoute(route, getOnExceptions(), getIntercepts(), getInterceptFroms(),
+ RouteDefinitionHelper.prepareRoute(getContext(), route, getOnExceptions(), getIntercepts(), getInterceptFroms(),
getInterceptSendToEndpoints(), getOnCompletions());
// mark the route as prepared now
Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromEndpointRefTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromEndpointRefTest.java?rev=1074058&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromEndpointRefTest.java (added)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromEndpointRefTest.java Thu Feb 24 07:22:32 2011
@@ -0,0 +1,33 @@
+/**
+ * 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.spring.processor;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.processor.intercept.InterceptFromEndpointRefTest;
+
+import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
+
+/**
+ *
+ */
+public class SpringInterceptFromEndpointRefTest extends InterceptFromEndpointRefTest {
+
+ protected CamelContext createCamelContext() throws Exception {
+ return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringInterceptFromEndpointRefTest.xml");
+ }
+
+}
Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringInterceptFromEndpointRefTest.xml (from r1074047, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringInterceptFromUriSimpleLogTest.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringInterceptFromEndpointRefTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringInterceptFromEndpointRefTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringInterceptFromUriSimpleLogTest.xml&r1=1074047&r2=1074058&rev=1074058&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringInterceptFromUriSimpleLogTest.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringInterceptFromEndpointRefTest.xml Thu Feb 24 07:22:32 2011
@@ -22,29 +22,25 @@
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
">
- <!-- START SNIPPET: example -->
<camelContext xmlns="http://camel.apache.org/schema/spring">
- <!-- intercept incoming message arriving on the seda:bar endpoint -->
- <interceptFrom uri="seda:bar">
- <to uri="mock:bar"/>
+
+ <endpoint id="start" uri="direct:start"/>
+ <endpoint id="bar" uri="seda:bar"/>
+
+ <interceptFrom uri="direct:start">
+ <to uri="mock:intercepted"/>
</interceptFrom>
<route>
- <from uri="direct:start"/>
+ <from ref="start"/>
<to uri="mock:first"/>
- <to uri="seda:bar"/>
- </route>
-
- <route>
- <from uri="seda:bar"/>
- <to uri="mock:result"/>
+ <to ref="bar"/>
</route>
<route>
- <from uri="seda:foo"/>
+ <from ref="bar"/>
<to uri="mock:result"/>
</route>
</camelContext>
- <!-- END SNIPPET: example -->
</beans>