You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by df...@apache.org on 2021/04/20 18:31:38 UTC

[camel-performance-tests] 10/16: CAMEL-16251 - Move Performance and jmh itests in a separated repository

This is an automated email from the ASF dual-hosted git repository.

dfoulks pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-performance-tests.git

commit bd8fbbbe7c57a4cce0d1737d209b4cd95d6519a4
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Mar 10 16:20:58 2021 +0100

    CAMEL-16251 - Move Performance and jmh itests in a separated repository
---
 tests/camel-performance/README.adoc                |   8 +
 tests/camel-performance/pom.xml                    | 170 +++++++++++++++++++++
 .../src/test/data/1K_buyStocks.xml                 |  33 ++++
 .../test/perf/AbstractBasePerformanceTest.java     |  64 ++++++++
 .../perf/ContentBasedRoutingPerformanceTest.java   | 115 ++++++++++++++
 .../perf/HeaderBasedRoutingPerformanceTest.java    | 122 +++++++++++++++
 .../camel/test/perf/SplitterPerformanceTest.java   |  92 +++++++++++
 .../perf/XPathBasedRoutingPerformanceTest.java     |  81 ++++++++++
 .../perf/XQueryBasedRoutingPerformanceTest.java    |  81 ++++++++++
 .../camel/test/perf/XsltPerformanceTest.java       |  53 +++++++
 .../src/test/resources/1K_buyStocks.xml            |  33 ++++
 .../src/test/resources/1K_buyStocks_secure.xml     |  78 ++++++++++
 .../test/resources/META-INF/xslt/transform.xslt    |  35 +++++
 .../src/test/resources/log4j2.properties           |  29 ++++
 .../camel-performance/src/test/resources/store.jks | Bin 0 -> 6377 bytes
 .../resources/wsdl/CBRWSDL-consumer-embedded.wsdl  | 126 +++++++++++++++
 .../resources/wsdl/CBRWSDL-provider-embedded.wsdl  | 126 +++++++++++++++
 .../wsdl/HBRSoapWSDL-consumer-embedded.wsdl        | 139 +++++++++++++++++
 .../wsdl/HBRSoapWSDL-provider-embedded.wsdl        | 126 +++++++++++++++
 .../wsdl/HBRTransportWSDL-consumer-embedded.wsdl   | 126 +++++++++++++++
 .../wsdl/HBRTransportWSDL-provider-embedded.wsdl   | 126 +++++++++++++++
 .../wsdl/ProxyWSDL-consumer-embedded.wsdl          | 126 +++++++++++++++
 .../wsdl/ProxyWSDL-provider-embedded.wsdl          | 126 +++++++++++++++
 .../wsdl/SecureProxyWSDL-consumer-embedded.wsdl    | 126 +++++++++++++++
 .../wsdl/SecureProxyWSDL-provider-embedded.wsdl    | 126 +++++++++++++++
 .../wsdl/TransformerWSDL-consumer-embedded.wsdl    | 126 +++++++++++++++
 .../wsdl/TransformerWSDL-provider-embedded.wsdl    | 126 +++++++++++++++
 .../src/test/resources/wssecurity.properties       |  21 +++
 .../src/test/resources/xslt/transform.xslt         |  35 +++++
 .../src/test/resources/xslt/transform_back.xslt    |  32 ++++
 tests/pom.xml                                      |   1 +
 31 files changed, 2608 insertions(+)

diff --git a/tests/camel-performance/README.adoc b/tests/camel-performance/README.adoc
new file mode 100644
index 0000000..a8f82fe
--- /dev/null
+++ b/tests/camel-performance/README.adoc
@@ -0,0 +1,8 @@
+= Camel Performance Tests
+
+== Overview
+
+This module is where you should add performance tests.
+
+All tests should be disabled by default to not run on the CI server because
+we expect performance test are time and CPU consuming.
\ No newline at end of file
diff --git a/tests/camel-performance/pom.xml b/tests/camel-performance/pom.xml
new file mode 100644
index 0000000..e97fc69
--- /dev/null
+++ b/tests/camel-performance/pom.xml
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.camel.tests</groupId>
+        <artifactId>tests</artifactId>
+        <version>1.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>camel-performance</artifactId>
+    <name>Camel :: Performance Tests :: Performance</name>
+    <description>Performs cross component performance tests</description>
+
+    <dependencyManagement>
+        <dependencies>
+            <!-- Add Camel BOM -->
+            <dependency>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-bom</artifactId>
+                <version>${camel.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <!-- assuming camel is pulling aries 1.0.0, pull asm 4.0 first -->
+        <dependency>
+            <groupId>org.ow2.asm</groupId>
+            <artifactId>asm-all</artifactId>
+            <version>5.2</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.core</artifactId>
+            <scope>test</scope>
+            <version>${osgi-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.cmpn</artifactId>
+            <scope>test</scope>
+            <version>${osgi-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-test-junit5</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- logging -->
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-slf4j-impl</artifactId>
+            <scope>test</scope>
+            <version>${log4j2-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-1.2-api</artifactId>
+            <scope>test</scope>
+            <version>${log4j2-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>${commons-io-version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-http</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-saxon</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-cxf</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-ws-security</artifactId>
+            <scope>test</scope>
+            <version>${cxf-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.ws.security</groupId>
+            <artifactId>wss4j</artifactId>
+            <version>1.6.17</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcpg-jdk15on</artifactId>
+            <version>${bouncycastle-version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+            <version>${bouncycastle-version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-server</artifactId>
+            <version>${jetty9-version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-servlet</artifactId>
+            <version>${jetty9-version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-util</artifactId>
+            <version>${jetty9-version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-io</artifactId>
+            <version>${jetty9-version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-transports-http</artifactId>
+            <scope>test</scope>
+            <version>${cxf-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-transports-http-jetty</artifactId>
+            <scope>test</scope>
+            <version>${cxf-version}</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/tests/camel-performance/src/test/data/1K_buyStocks.xml b/tests/camel-performance/src/test/data/1K_buyStocks.xml
new file mode 100644
index 0000000..c57a823
--- /dev/null
+++ b/tests/camel-performance/src/test/data/1K_buyStocks.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+<soapenv:Header><routing xmlns="http://someuri">xadmin;server1;community#1.0##</routing></soapenv:Header>
+<soapenv:Body>
+<m:buyStocks xmlns:m="http://services.samples/xsd">
+<order><symbol>IBM</symbol><buyerID>asankha</buyerID><price>140.34</price><volume>2000</volume></order>
+<order><symbol>MSFT</symbol><buyerID>ruwan</buyerID><price>23.56</price><volume>8030</volume></order>
+<order><symbol>SUN</symbol><buyerID>indika</buyerID><price>14.56</price><volume>500</volume></order>
+<order><symbol>GOOG</symbol><buyerID>chathura</buyerID><price>60.24</price><volume>40000</volume></order>
+<order><symbol>IBM</symbol><buyerID>asankha</buyerID><price>140.34</price><volume>2000</volume></order>
+<order><symbol>MSFT</symbol><buyerID>ruwan</buyerID><price>23.56</price><volume>803000</volume></order>
+<order><symbol>SUN</symbol><buyerID>indika</buyerID><price>14.56</price><volume>5000</volume></order>
+</m:buyStocks>
+</soapenv:Body>
+</soapenv:Envelope>
diff --git a/tests/camel-performance/src/test/java/org/apache/camel/test/perf/AbstractBasePerformanceTest.java b/tests/camel-performance/src/test/java/org/apache/camel/test/perf/AbstractBasePerformanceTest.java
new file mode 100644
index 0000000..87a4fbb
--- /dev/null
+++ b/tests/camel-performance/src/test/java/org/apache/camel/test/perf/AbstractBasePerformanceTest.java
@@ -0,0 +1,64 @@
+/*
+ * 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.test.perf;
+
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.TestInstance;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+public abstract class AbstractBasePerformanceTest extends CamelTestSupport {
+
+    protected static final String BODY_1KB_PAYLOAD
+            = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">"
+              + "<soapenv:Header><routing xmlns=\"http://someuri\">xadmin;server1;community#1.0##</routing></soapenv:Header>"
+              + "<soapenv:Body>"
+              + "<m:buyStocks xmlns:m=\"http://services.samples/xsd\">"
+              + "<order><symbol>IBM</symbol><buyerID>asankha</buyerID><price>140.34</price><volume>2000</volume></order>"
+              + "<order><symbol>MSFT</symbol><buyerID>ruwan</buyerID><price>23.56</price><volume>8030</volume></order>"
+              + "<order><symbol>SUN</symbol><buyerID>indika</buyerID><price>14.56</price><volume>500</volume></order>"
+              + "<order><symbol>GOOG</symbol><buyerID>chathura</buyerID><price>60.24</price><volume>40000</volume></order>"
+              + "<order><symbol>IBM</symbol><buyerID>asankha</buyerID><price>140.34</price><volume>2000</volume></order>"
+              + "<order><symbol>MSFT</symbol><buyerID>ruwan</buyerID><price>23.56</price><volume>803000</volume></order>"
+              + "<order><symbol>SUN</symbol><buyerID>indika</buyerID><price>14.56</price><volume>5000</volume></order>"
+              + "</m:buyStocks>"
+              + "</soapenv:Body>"
+              + "</soapenv:Envelope>";
+
+    protected final Logger log = LoggerFactory.getLogger(getClass());
+
+    protected String getPayload() {
+        return BODY_1KB_PAYLOAD;
+    }
+
+    protected void resetMock(int count) {
+        MockEndpoint mock = getMockEndpoint("mock:end");
+        mock.reset();
+        mock.setRetainFirst(0);
+        mock.setRetainLast(0);
+        mock.expectedMessageCount(count);
+    }
+
+    protected void execute(int count) {
+        for (int counter = 0; counter < count; counter++) {
+            template.sendBody(getPayload());
+        }
+    }
+
+}
diff --git a/tests/camel-performance/src/test/java/org/apache/camel/test/perf/ContentBasedRoutingPerformanceTest.java b/tests/camel-performance/src/test/java/org/apache/camel/test/perf/ContentBasedRoutingPerformanceTest.java
new file mode 100644
index 0000000..622480c
--- /dev/null
+++ b/tests/camel-performance/src/test/java/org/apache/camel/test/perf/ContentBasedRoutingPerformanceTest.java
@@ -0,0 +1,115 @@
+/*
+ * 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.test.perf;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.util.StopWatch;
+import org.junit.jupiter.api.Test;
+
+public class ContentBasedRoutingPerformanceTest extends AbstractBasePerformanceTest {
+
+    private final int count = 30000;
+
+    @Test
+    public void testChoiceSimple() throws InterruptedException {
+        template.setDefaultEndpointUri("direct:choice-simple");
+
+        // warm up with 20.000 messages so that the JIT compiler kicks in
+        execute(20000);
+
+        resetMock(count);
+
+        StopWatch watch = new StopWatch();
+        execute(count);
+
+        assertMockEndpointsSatisfied();
+        log.warn("Ran {} tests in {}ms", count, watch.taken());
+    }
+
+    @Test
+    public void testChoiceExpression() throws InterruptedException {
+        template.setDefaultEndpointUri("direct:choice-expression");
+
+        // warm up with 20.000 messages so that the JIT compiler kicks in
+        execute(20000);
+
+        resetMock(count);
+
+        StopWatch watch = new StopWatch();
+        execute(count);
+
+        assertMockEndpointsSatisfied();
+        log.warn("Ran {} tests in {}ms", count, watch.taken());
+    }
+
+    @Test
+    public void testFilterSimple() throws InterruptedException {
+        template.setDefaultEndpointUri("direct:filter-simple");
+
+        // warm up with 20.000 messages so that the JIT compiler kicks in
+        execute(20000);
+
+        resetMock(count);
+
+        StopWatch watch = new StopWatch();
+        execute(count);
+
+        assertMockEndpointsSatisfied();
+        log.warn("Ran {} tests in {}ms", count, watch.taken());
+    }
+
+    @Test
+    public void testFilterExpression() throws InterruptedException {
+        template.setDefaultEndpointUri("direct:filter-expression");
+
+        // warm up with 20.000 messages so that the JIT compiler kicks in
+        execute(20000);
+
+        resetMock(count);
+
+        StopWatch watch = new StopWatch();
+        execute(count);
+
+        assertMockEndpointsSatisfied();
+        log.warn("Ran {} tests in {}ms", count, watch.taken());
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                from("direct:filter-simple")
+                        .filter().simple("${body} contains 'xadmin;server1;community#1.0##'")
+                        .to("mock:end");
+
+                from("direct:filter-expression")
+                        .filter(body().contains("<order><symbol>IBM</symbol><buyerID>asankha</buyerID>"))
+                        .to("mock:end");
+
+                from("direct:choice-simple")
+                        .choice()
+                        .when().simple("${body} contains 'xadmin;server1;community#1.0##'")
+                        .to("mock:end");
+
+                from("direct:choice-expression")
+                        .choice()
+                        .when(body().contains("<order><symbol>IBM</symbol><buyerID>asankha</buyerID>"))
+                        .to("mock:end");
+            }
+        };
+    }
+}
diff --git a/tests/camel-performance/src/test/java/org/apache/camel/test/perf/HeaderBasedRoutingPerformanceTest.java b/tests/camel-performance/src/test/java/org/apache/camel/test/perf/HeaderBasedRoutingPerformanceTest.java
new file mode 100644
index 0000000..eae43fa
--- /dev/null
+++ b/tests/camel-performance/src/test/java/org/apache/camel/test/perf/HeaderBasedRoutingPerformanceTest.java
@@ -0,0 +1,122 @@
+/*
+ * 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.test.perf;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.util.StopWatch;
+import org.junit.jupiter.api.Test;
+
+public class HeaderBasedRoutingPerformanceTest extends AbstractBasePerformanceTest {
+
+    private final int count = 30000;
+
+    @Test
+    public void testChoiceSimple() throws InterruptedException {
+        template.setDefaultEndpointUri("direct:choice-simple");
+
+        // warm up with 20.000 messages so that the JIT compiler kicks in
+        execute(20000);
+
+        resetMock(count);
+
+        StopWatch watch = new StopWatch();
+        execute(count);
+
+        assertMockEndpointsSatisfied();
+        log.warn("Ran {} tests in {}ms", count, watch.taken());
+    }
+
+    @Test
+    public void testChoiceExpression() throws InterruptedException {
+        template.setDefaultEndpointUri("direct:choice-expression");
+
+        // warm up with 20.000 messages so that the JIT compiler kicks in
+        execute(20000);
+
+        resetMock(count);
+
+        StopWatch watch = new StopWatch();
+        execute(count);
+
+        assertMockEndpointsSatisfied();
+        log.warn("Ran {} tests in {}ms", count, watch.taken());
+    }
+
+    @Test
+    public void testFilterSimple() throws InterruptedException {
+        template.setDefaultEndpointUri("direct:filter-simple");
+
+        // warm up with 20.000 messages so that the JIT compiler kicks in
+        execute(20000);
+
+        resetMock(count);
+
+        StopWatch watch = new StopWatch();
+        execute(count);
+
+        assertMockEndpointsSatisfied();
+        log.warn("Ran {} tests in {}ms", count, watch.taken());
+    }
+
+    @Test
+    public void testFilterExpression() throws InterruptedException {
+        template.setDefaultEndpointUri("direct:filter-expression");
+
+        // warm up with 20.000 messages so that the JIT compiler kicks in
+        execute(20000);
+
+        resetMock(count);
+
+        StopWatch watch = new StopWatch();
+        execute(count);
+
+        assertMockEndpointsSatisfied();
+        log.warn("Ran {} tests in {}ms", count, watch.taken());
+    }
+
+    @Override
+    protected void execute(int count) {
+        for (int counter = 0; counter < count; counter++) {
+            template.sendBodyAndHeader(getPayload(), "routing", "xadmin;server1;community#1.0##");
+        }
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                from("direct:filter-simple")
+                        .filter(simple("${in.header.routing} == 'xadmin;server1;community#1.0##'"))
+                        .to("mock:end");
+
+                from("direct:filter-expression")
+                        .filter(header("routing").isEqualTo("xadmin;server1;community#1.0##"))
+                        .to("mock:end");
+
+                from("direct:choice-simple")
+                        .choice()
+                        .when(simple("${in.header.routing} == 'xadmin;server1;community#1.0##'"))
+                        .to("mock:end");
+
+                from("direct:choice-expression")
+                        .choice()
+                        .when(header("routing").isEqualTo("xadmin;server1;community#1.0##"))
+                        .to("mock:end");
+            }
+        };
+    }
+}
diff --git a/tests/camel-performance/src/test/java/org/apache/camel/test/perf/SplitterPerformanceTest.java b/tests/camel-performance/src/test/java/org/apache/camel/test/perf/SplitterPerformanceTest.java
new file mode 100644
index 0000000..f0d0e68
--- /dev/null
+++ b/tests/camel-performance/src/test/java/org/apache/camel/test/perf/SplitterPerformanceTest.java
@@ -0,0 +1,92 @@
+/*
+ * 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.test.perf;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.util.StopWatch;
+import org.junit.jupiter.api.Test;
+
+public class SplitterPerformanceTest extends AbstractBasePerformanceTest {
+
+    protected static final String HEADER = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">"
+                                           + "<soapenv:Header><routing xmlns=\"http://someuri\">xadmin;server1;community#1.0##</routing></soapenv:Header>"
+                                           + "<soapenv:Body>"
+                                           + "<m:buyStocks xmlns:m=\"http://services.samples/xsd\">";
+
+    protected static final String BODY
+            = "<order><symbol>IBM</symbol><buyerID>asankha</buyerID><price>140.34</price><volume>2000</volume></order>\n"
+              + "<order><symbol>MSFT</symbol><buyerID>ruwan</buyerID><price>23.56</price><volume>8030</volume></order>\n"
+              + "<order><symbol>SUN</symbol><buyerID>indika</buyerID><price>14.56</price><volume>500</volume></order>\n"
+              + "<order><symbol>GOOG</symbol><buyerID>chathura</buyerID><price>60.24</price><volume>40000</volume></order>\n"
+              + "<order><symbol>IBM</symbol><buyerID>asankha</buyerID><price>140.34</price><volume>2000</volume></order>\n"
+              + "<order><symbol>MSFT</symbol><buyerID>ruwan</buyerID><price>23.56</price><volume>803000</volume></order>\n"
+              + "<order><symbol>SUN</symbol><buyerID>indika</buyerID><price>14.56</price><volume>5000</volume></order>\n"
+              + "<order><symbol>GOOG</symbol><buyerID>chathura</buyerID><price>60.24</price><volume>40000</volume></order>\n"
+              + "<order><symbol>IBM</symbol><buyerID>asankha</buyerID><price>140.34</price><volume>2000</volume></order>\n"
+              + "<order><symbol>MSFT</symbol><buyerID>ruwan</buyerID><price>23.56</price><volume>803000</volume></order>\n";
+
+    protected static final String TRAILER = "</m:buyStocks>"
+                                            + "</soapenv:Body>"
+                                            + "</soapenv:Envelope>";
+
+    protected static final String PAYLOAD;
+
+    static {
+        StringBuilder builder = new StringBuilder(HEADER);
+
+        for (int i = 0; i < 2000; i++) {
+            builder.append(BODY);
+        }
+
+        builder.append(TRAILER);
+        PAYLOAD = builder.toString();
+    }
+
+    private final int count = 20001;
+
+    @Test
+    public void testTokenize() throws InterruptedException {
+        template.setDefaultEndpointUri("direct:tokenize");
+
+        // warm up with 1 message so that the JIT compiler kicks in
+        execute(1);
+
+        resetMock(count);
+
+        StopWatch watch = new StopWatch();
+        execute(1);
+
+        assertMockEndpointsSatisfied();
+        log.warn("Ran {} tests in {}ms", count, watch.taken());
+    }
+
+    @Override
+    protected String getPayload() {
+        return PAYLOAD;
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                from("direct:tokenize")
+                        .split(body().tokenize("\n"))
+                        .to("mock:end");
+            }
+        };
+    }
+}
diff --git a/tests/camel-performance/src/test/java/org/apache/camel/test/perf/XPathBasedRoutingPerformanceTest.java b/tests/camel-performance/src/test/java/org/apache/camel/test/perf/XPathBasedRoutingPerformanceTest.java
new file mode 100644
index 0000000..81bd5eb
--- /dev/null
+++ b/tests/camel-performance/src/test/java/org/apache/camel/test/perf/XPathBasedRoutingPerformanceTest.java
@@ -0,0 +1,81 @@
+/*
+ * 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.test.perf;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.util.StopWatch;
+import org.junit.jupiter.api.Test;
+
+public class XPathBasedRoutingPerformanceTest extends AbstractBasePerformanceTest {
+
+    private final int count = 30000;
+
+    @Test
+    public void testChoice() throws InterruptedException {
+        template.setDefaultEndpointUri("direct:choice");
+
+        // warm up with 20.000 messages so that the JIT compiler kicks in
+        execute(20000);
+
+        resetMock(count);
+
+        StopWatch watch = new StopWatch();
+        execute(count);
+
+        assertMockEndpointsSatisfied();
+        log.warn("Ran {} tests in {}ms", count, watch.taken());
+    }
+
+    @Test
+    public void testFilter() throws InterruptedException {
+        template.setDefaultEndpointUri("direct:filter");
+
+        // warm up with 20.000 messages so that the JIT compiler kicks in
+        execute(20000);
+
+        resetMock(count);
+
+        StopWatch watch = new StopWatch();
+        execute(count);
+
+        assertMockEndpointsSatisfied();
+        log.warn("Ran {} tests in {}ms", count, watch.taken());
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                Map<String, String> namespaces = new HashMap<>();
+                namespaces.put("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
+                namespaces.put("m", "http://services.samples/xsd");
+
+                from("direct:filter")
+                        .filter().xpath("/soapenv:Envelope/soapenv:Body/m:buyStocks/order[1]/symbol='IBM'", namespaces)
+                        .to("mock:end");
+
+                from("direct:choice")
+                        .choice()
+                        .when().xpath("/soapenv:Envelope/soapenv:Body/m:buyStocks/order[1]/symbol='IBM'", namespaces)
+                        .to("mock:end");
+            }
+        };
+    }
+}
diff --git a/tests/camel-performance/src/test/java/org/apache/camel/test/perf/XQueryBasedRoutingPerformanceTest.java b/tests/camel-performance/src/test/java/org/apache/camel/test/perf/XQueryBasedRoutingPerformanceTest.java
new file mode 100644
index 0000000..c501e7f
--- /dev/null
+++ b/tests/camel-performance/src/test/java/org/apache/camel/test/perf/XQueryBasedRoutingPerformanceTest.java
@@ -0,0 +1,81 @@
+/*
+ * 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.test.perf;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.util.StopWatch;
+import org.junit.jupiter.api.Test;
+
+public class XQueryBasedRoutingPerformanceTest extends AbstractBasePerformanceTest {
+
+    private final int count = 30000;
+
+    @Test
+    public void testChoice() throws InterruptedException {
+        template.setDefaultEndpointUri("direct:choice");
+
+        // warm up with 20.000 messages so that the JIT compiler kicks in
+        execute(20000);
+
+        resetMock(count);
+
+        StopWatch watch = new StopWatch();
+        execute(count);
+
+        assertMockEndpointsSatisfied();
+        log.warn("Ran {} tests in {}ms", count, watch.taken());
+    }
+
+    @Test
+    public void testFilter() throws InterruptedException {
+        template.setDefaultEndpointUri("direct:filter");
+
+        // warm up with 20.000 messages so that the JIT compiler kicks in
+        execute(20000);
+
+        resetMock(count);
+
+        StopWatch watch = new StopWatch();
+        execute(count);
+
+        assertMockEndpointsSatisfied();
+        log.warn("Ran {} tests in {}ms", count, watch.taken());
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                Map<String, String> namespaces = new HashMap<>();
+                namespaces.put("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
+                namespaces.put("m", "http://services.samples/xsd");
+
+                from("direct:filter")
+                        .filter().xquery("/soapenv:Envelope/soapenv:Body/m:buyStocks/order[1]/symbol='IBM'", namespaces)
+                        .to("mock:end");
+
+                from("direct:choice")
+                        .choice()
+                        .when().xquery("/soapenv:Envelope/soapenv:Body/m:buyStocks/order[1]/symbol='IBM'", namespaces)
+                        .to("mock:end");
+            }
+        };
+    }
+}
diff --git a/tests/camel-performance/src/test/java/org/apache/camel/test/perf/XsltPerformanceTest.java b/tests/camel-performance/src/test/java/org/apache/camel/test/perf/XsltPerformanceTest.java
new file mode 100644
index 0000000..b3d2aa7
--- /dev/null
+++ b/tests/camel-performance/src/test/java/org/apache/camel/test/perf/XsltPerformanceTest.java
@@ -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.test.perf;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.util.StopWatch;
+import org.junit.jupiter.api.Test;
+
+public class XsltPerformanceTest extends AbstractBasePerformanceTest {
+
+    private final int count = 10000;
+
+    @Test
+    public void testXslt() throws InterruptedException {
+        template.setDefaultEndpointUri("direct:xslt");
+
+        // warm up with 1.000 messages so that the JIT compiler kicks in
+        execute(1000);
+
+        resetMock(count);
+
+        StopWatch watch = new StopWatch();
+        execute(count);
+
+        assertMockEndpointsSatisfied();
+        log.warn("Ran {} tests in {}ms", count, watch.taken());
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                from("direct:xslt")
+                        .to("xslt://META-INF/xslt/transform.xslt")
+                        .to("mock:end");
+            }
+        };
+    }
+}
diff --git a/tests/camel-performance/src/test/resources/1K_buyStocks.xml b/tests/camel-performance/src/test/resources/1K_buyStocks.xml
new file mode 100644
index 0000000..c57a823
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/1K_buyStocks.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+<soapenv:Header><routing xmlns="http://someuri">xadmin;server1;community#1.0##</routing></soapenv:Header>
+<soapenv:Body>
+<m:buyStocks xmlns:m="http://services.samples/xsd">
+<order><symbol>IBM</symbol><buyerID>asankha</buyerID><price>140.34</price><volume>2000</volume></order>
+<order><symbol>MSFT</symbol><buyerID>ruwan</buyerID><price>23.56</price><volume>8030</volume></order>
+<order><symbol>SUN</symbol><buyerID>indika</buyerID><price>14.56</price><volume>500</volume></order>
+<order><symbol>GOOG</symbol><buyerID>chathura</buyerID><price>60.24</price><volume>40000</volume></order>
+<order><symbol>IBM</symbol><buyerID>asankha</buyerID><price>140.34</price><volume>2000</volume></order>
+<order><symbol>MSFT</symbol><buyerID>ruwan</buyerID><price>23.56</price><volume>803000</volume></order>
+<order><symbol>SUN</symbol><buyerID>indika</buyerID><price>14.56</price><volume>5000</volume></order>
+</m:buyStocks>
+</soapenv:Body>
+</soapenv:Envelope>
diff --git a/tests/camel-performance/src/test/resources/1K_buyStocks_secure.xml b/tests/camel-performance/src/test/resources/1K_buyStocks_secure.xml
new file mode 100644
index 0000000..c5aa7cc
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/1K_buyStocks_secure.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+<soapenv:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1"><xenc:EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="id-1357383968943278000-1391997743"><xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/><ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><wsse:SecurityTokenReference><wsse:KeyIdentifier EncodingType="http://docs.oasis-open.org/wss/2004/ [...]
+74Cg9Ot33to1CpQ4wl7SlszeomRx+AL3GA+QuouhO9eDJyAbjYIFy+FcUJ619P1AD1FR8VVdW5P4
+DvOxGfm+htl81tdP2kU=</xenc:CipherValue></xenc:CipherData><xenc:ReferenceList><xenc:DataReference URI="#id-1357383968943430000-1928238693"/></xenc:ReferenceList></xenc:EncryptedKey><wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity- [...]
+DAVPQVNJUzEeMBwGA1UEAwwVT0FTSVMgSW50ZXJvcCBUZXN0IENBMB4XDTA1MDMxOTAwMDAwMFoX
+DTE4MDMxOTIzNTk1OVowQjEOMAwGA1UECgwFT0FTSVMxIDAeBgNVBAsMF09BU0lTIEludGVyb3Ag
+VGVzdCBDZXJ0MQ4wDAYDVQQDDAVBbGljZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAoqi9
+9By1VYo0aHrkKCNT4DkIgPL/SgahbeKdGhrbu3K2XG7arfD9tqIBIKMfrX4Gp90NJa85AV1yiNsE
+yvq+mUnMpNcKnLXLOjkTmMCqDYbbkehJlXPnaWLzve+mW0pJdPxtf3rbD4PS/cBQIvtpjmrDAU8V
+sZKT8DN5Kyz+EZsCAwEAAaOBkzCBkDAJBgNVHRMEAjAAMDMGA1UdHwQsMCowKKImhiRodHRwOi8v
+aW50ZXJvcC5iYnRlc3QubmV0L2NybC9jYS5jcmwwDgYDVR0PAQH/BAQDAgSwMB0GA1UdDgQWBBQK
+4l0TUHZ1QV3V2QtlLNDm+PoxiDAfBgNVHSMEGDAWgBTAnSj8wes1oR3WqqqgHBpNwkkPDzANBgkq
+hkiG9w0BAQUFAAOCAQEABTqpOpvW+6yrLXyUlP2xJbEkohXHI5OWwKWleOb9hlkhWntUalfcFOJA
+gUyH30TTpHldzx1+vK2LPzhoUFKYHE1IyQvokBN2JjFO64BQukCKnZhldLRPxGhfkTdxQgdf5rCK
+/wh3xVsZCNTfuMNmlAM6lOAg8QduDah3WFZpEA0s2nwQaCNQTNMjJC8tav1CBr6+E5FAmwPXP7pJ
+xn9Fw9OXRyqbRA4v2y7YpbGkG2GI9UvOHw6SGvf4FRSthMMO35YbpikGsLix3vAsXWWi4rwfVOYz
+QK0OFPNi9RMCUdSH06m9uLWckiCxjos0FQODZE9l4ATGy9s9hNVwryOJTw==</wsse:BinarySecurityToken><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+<ds:SignedInfo>
+<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
+<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
+<ds:Reference URI="#id-1357383968939063000-142227415">
+<ds:Transforms>
+<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
+</ds:Transforms>
+<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+<ds:DigestValue>SZkK3D7xaoGDBMudnAhko4svV3Y=</ds:DigestValue>
+</ds:Reference>
+<ds:Reference URI="#id-1357383968938551000-396142871">
+<ds:Transforms>
+<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
+</ds:Transforms>
+<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+<ds:DigestValue>HUHU6PCkHctVkkxdOVBTowAcTds=</ds:DigestValue>
+</ds:Reference>
+</ds:SignedInfo>
+<ds:SignatureValue>
+gAc34IGlAuClhIbQ6Vyd8iu8pw0RTw0eyXjNQEUzEzWt6/vdG1Z9clDup13SzyTvaVRkv0fbRzFy
+5joMJ7CLjdMrHJg/FP6TMFUxDlit3QXbAaiB7J/VxMuJuQ05+MjnqCy/I4D8QCt7BhlbPiPozPsk
+bhDz8LOeWQDzXSUJJ1U=
+</ds:SignatureValue>
+<ds:KeyInfo><wsse:SecurityTokenReference><wsse:Reference URI="#id-1357383968942887000-228572128" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></wsse:SecurityTokenReference></ds:KeyInfo></ds:Signature><wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="id-1357383968938551000-396142871"><wsu:Created>2013-01-05T11:06:08.938Z</wsu:Created><wsu:Expires>2013-02-04T11:06:08.93 [...]
+<soapenv:Body wsu:Id="id-1357383968939063000-142227415" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="id-1357383968943430000-1928238693" Type="http://www.w3.org/2001/04/xmlenc#Content"><xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/><ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+<wsse:SecurityTokenReference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsse:Reference URI="#id-1357383968943278000-1391997743"/></wsse:SecurityTokenReference>
+</ds:KeyInfo><xenc:CipherData><xenc:CipherValue>OaYLQwfFj0i01Zl7fCp8xclhoBR8/OJvqN6qdPUYcd2hHlYJOtHTnirPXev0xCxM4Y0/LHcFc64n
+afRkz/cT+V4yLW5MSfZfeLFvLIfrz427UblCwQxQlgyiBxP16KkGVdGLws9duaNOPE4efKt7brnV
+AOqvj2olsFLBz2LE7OAH/eDDQh2s19ivjy+OKqTDj11kOXtCb7fS6Egi5erzte9dKvE6rnUXVue3
+C+H5/NRkJXiayMznpJoVUwkmSobwHV7syuli8wF6tExKZVHZzJVJngRjvLsFJBAI9Zbcpu/VzV0U
+NtmO7wbntC/WHnTW1gqzqsyFUVrKuLtT92z8qL2PEIl8lqCYfg2LdZzVPzUNXVLA9c7WSgbeoRty
+euj20EGqLRWrMQx6/fwVoUHTqdBmI17IF0btRELVrBr+HXOOSg+WKZ2kRtQTC9fWjPHhxLaMQCMX
+0ijls8JrHdRRIOUeB3IBM4hWQwA19mXwIR+apCcjaQld0K2SvIQAqSDdwYQleYoT+lYlxTNwqDSF
+RNUPNygkDbGPF0wV4sMMgOj751VSiCSVcBNtbTsdMWxqtmvpr3IQO5HDvdr3jToDWN2a79bWBvkH
+q40bvAOLiQshMgu+wLeTRmg5yv+5TYi6bDaz20aXTSp3nKHJIvnc8386ZrpKYx8RWEvfkXgm5+Bj
+zLesMmGQLiaIcWnCDBOVa6XcGf5rxLi806vic6lqpl/12CseBuyfxN8UqvI4sRlJUbseQtUBKoov
+c+EAPPbQatoBd1xOyy6h9zIkHinCCDGjMIPQ89pVb4vb5lH7VQKgJh96gT8LX1XgHQQKpaF0ab5L
+zOd4d4Qlv+J9ZkvxrmNMYNoueDgqq/r6+Q4Q5d66lfv5jm/4GrrL6CYmC0ZasNnRBrO7B6QZnsp0
+Cjzzbl4rT0fuHGHAKnUVFCRe3puzS+nsumJ8lIMam+OQkCqvli+2wew1JtJjcll49x58hAnwRDgy
+YzukmNt73HJirVdT6Yhe3s3R0kpqRARza1UPsVheL+XQP6hVpS8etabk5cBzGatoYUK6IIDRsz9a
+RZKzN0cUEEJ/KlcsZE1hDz8/</xenc:CipherValue></xenc:CipherData></xenc:EncryptedData></soapenv:Body>
+</soapenv:Envelope>
\ No newline at end of file
diff --git a/tests/camel-performance/src/test/resources/META-INF/xslt/transform.xslt b/tests/camel-performance/src/test/resources/META-INF/xslt/transform.xslt
new file mode 100644
index 0000000..cbd3ebf
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/META-INF/xslt/transform.xslt
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<xsl:stylesheet version="2.0"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:m0="http://services.samples/xsd"
+    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+    
+    <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" exclude-result-prefixes="m0" />
+
+    <xsl:template match="m0:buyStocks">
+        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+            <soapenv:Body>
+                <m:skcotSyub xmlns:m="http://services.samples/xsd">
+                    <xsl:for-each select="order">
+                        <redro>
+                            <lobmys>
+                                <xsl:value-of select="symbol" />
+                            </lobmys>
+                            <DIreyub>
+                                <xsl:value-of select="buyerID" />
+                            </DIreyub>
+                            <ecirp>
+                                <xsl:value-of select="price" />
+                            </ecirp>
+                            <emulov>
+                                <xsl:value-of select="volume" />
+                            </emulov>
+                        </redro>
+                    </xsl:for-each>
+                </m:skcotSyub>
+            </soapenv:Body>
+        </soapenv:Envelope>
+    </xsl:template>
+
+    <xsl:template match="soapenv:Header"></xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/tests/camel-performance/src/test/resources/log4j2.properties b/tests/camel-performance/src/test/resources/log4j2.properties
new file mode 100644
index 0000000..8957aa0
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/log4j2.properties
@@ -0,0 +1,29 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+appender.file.type = File
+appender.file.name = file
+appender.file.fileName = target/camel-performance-test.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d %-5p %c{1}.%M - %m%n
+appender.out.type = Console
+appender.out.name = out
+appender.out.layout.type = PatternLayout
+appender.out.layout.pattern = %d %-5p %c{1}.%M - %m%n
+rootLogger.level = WARN
+rootLogger.appenderRef.file.ref = file
+rootLogger.appenderRef.out.ref = out
diff --git a/tests/camel-performance/src/test/resources/store.jks b/tests/camel-performance/src/test/resources/store.jks
new file mode 100644
index 0000000..02d7c4e
Binary files /dev/null and b/tests/camel-performance/src/test/resources/store.jks differ
diff --git a/tests/camel-performance/src/test/resources/wsdl/CBRWSDL-consumer-embedded.wsdl b/tests/camel-performance/src/test/resources/wsdl/CBRWSDL-consumer-embedded.wsdl
new file mode 100644
index 0000000..f61bfd0
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/wsdl/CBRWSDL-consumer-embedded.wsdl
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="EchoWSDL" targetNamespace="http://services.samples/xsd"
+             xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://services.samples/xsd"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+    <types>
+	<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+		    targetNamespace="http://services.samples/xsd"
+		    xmlns:tns="http://services.samples/xsd"
+		    elementFormDefault="unqualified">
+	    <xsd:complexType name="BuyStocks">
+		<xsd:sequence>
+		    <xsd:element name="order">
+		        <xsd:complexType>
+		            <xsd:sequence>
+		                <xsd:element name="symbol" type="xsd:string"></xsd:element>
+		                <xsd:element name="buyerID" type="xsd:string"></xsd:element>
+		                <xsd:element name="price" type="xsd:double"></xsd:element>
+		                <xsd:element name="volume" type="xsd:int"></xsd:element>
+		            </xsd:sequence>
+		        </xsd:complexType>
+		    </xsd:element>
+		</xsd:sequence>
+	    </xsd:complexType>
+	    <xsd:element name="buyStocks" type="tns:BuyStocks"></xsd:element>
+	</xsd:schema>
+    </types>
+    <message name="EchoOperationRequest">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+    <message name="EchoOperationResponse">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+
+    <portType name="buyStocksPortType">
+        <operation name="buyStocksOperation">
+            <input name="message" message="tns:EchoOperationRequest"/>
+            <output name="message" message="tns:EchoOperationResponse"/>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <input name="message1K" message="tns:EchoOperationRequest"/>
+            <output name="message1K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <input name="message5K" message="tns:EchoOperationRequest"/>
+            <output name="message5K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <input name="message10K" message="tns:EchoOperationRequest"/>
+            <output name="message10K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <input name="message100K" message="tns:EchoOperationRequest"/>
+            <output name="message100K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <input name="message500K" message="tns:EchoOperationRequest"/>
+            <output name="message500K" message="tns:EchoOperationResponse"/>
+        </operation>
+    </portType>
+    <binding name="EchoServiceSOAP11Binding" type="tns:buyStocksPortType">
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+        <operation name="buyStocksOperation">
+            <soap:operation soapAction="urn:buyStocks" style="document"/>
+            <input name="message">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <soap:operation soapAction="urn:buyStocks.2" style="document"/>
+            <input name="message1K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message1K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <soap:operation soapAction="urn:buyStocks.5" style="document"/>
+            <input name="message5K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message5K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <soap:operation soapAction="urn:buyStocks.10" style="document"/>
+            <input name="message10K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message10K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <soap:operation soapAction="urn:buyStocks.100" style="document"/>
+            <input name="message100K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message100K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <soap:operation soapAction="urn:buyStocks.500" style="document"/>
+            <input name="message500K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message500K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+    </binding>
+    <service name="CBRProxy">
+        <port name="CBREchoServicePort" binding="tns:EchoServiceSOAP11Binding">
+            <soap:address location="http://localhost:8192/service/CBRProxy"/>
+        </port>
+    </service>
+</definitions>
+
diff --git a/tests/camel-performance/src/test/resources/wsdl/CBRWSDL-provider-embedded.wsdl b/tests/camel-performance/src/test/resources/wsdl/CBRWSDL-provider-embedded.wsdl
new file mode 100644
index 0000000..a6540d9
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/wsdl/CBRWSDL-provider-embedded.wsdl
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="EchoWSDL" targetNamespace="http://services.samples/xsd"
+             xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://services.samples/xsd"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+    <types>
+	<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+		    targetNamespace="http://services.samples/xsd"
+		    xmlns:tns="http://services.samples/xsd"
+		    elementFormDefault="unqualified">
+	    <xsd:complexType name="BuyStocks">
+		<xsd:sequence>
+		    <xsd:element name="order">
+		        <xsd:complexType>
+		            <xsd:sequence>
+		                <xsd:element name="symbol" type="xsd:string"></xsd:element>
+		                <xsd:element name="buyerID" type="xsd:string"></xsd:element>
+		                <xsd:element name="price" type="xsd:double"></xsd:element>
+		                <xsd:element name="volume" type="xsd:int"></xsd:element>
+		            </xsd:sequence>
+		        </xsd:complexType>
+		    </xsd:element>
+		</xsd:sequence>
+	    </xsd:complexType>
+	    <xsd:element name="buyStocks" type="tns:BuyStocks"></xsd:element>
+	</xsd:schema>
+    </types>
+    <message name="EchoOperationRequest">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+    <message name="EchoOperationResponse">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+
+    <portType name="buyStocksPortType">
+        <operation name="buyStocksOperation">
+            <input name="message" message="tns:EchoOperationRequest"/>
+            <output name="message" message="tns:EchoOperationResponse"/>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <input name="message1K" message="tns:EchoOperationRequest"/>
+            <output name="message1K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <input name="message5K" message="tns:EchoOperationRequest"/>
+            <output name="message5K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <input name="message10K" message="tns:EchoOperationRequest"/>
+            <output name="message10K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <input name="message100K" message="tns:EchoOperationRequest"/>
+            <output name="message100K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <input name="message500K" message="tns:EchoOperationRequest"/>
+            <output name="message500K" message="tns:EchoOperationResponse"/>
+        </operation>
+    </portType>
+    <binding name="EchoServiceSOAP11Binding" type="tns:buyStocksPortType">
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+        <operation name="buyStocksOperation">
+            <soap:operation soapAction="urn:buyStocks" style="document"/>
+            <input name="message">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <soap:operation soapAction="urn:buyStocks.2" style="document"/>
+            <input name="message1K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message1K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <soap:operation soapAction="urn:buyStocks.5" style="document"/>
+            <input name="message5K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message5K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <soap:operation soapAction="urn:buyStocks.10" style="document"/>
+            <input name="message10K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message10K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <soap:operation soapAction="urn:buyStocks.100" style="document"/>
+            <input name="message100K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message100K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <soap:operation soapAction="urn:buyStocks.500" style="document"/>
+            <input name="message500K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message500K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+    </binding>
+    <service name="CBREchoService">
+        <port name="CBREchoServicePort" binding="tns:EchoServiceSOAP11Binding">
+            <soap:address location="http://localhost:9000/service/EchoService"/>
+        </port>
+    </service>
+</definitions>
+
diff --git a/tests/camel-performance/src/test/resources/wsdl/HBRSoapWSDL-consumer-embedded.wsdl b/tests/camel-performance/src/test/resources/wsdl/HBRSoapWSDL-consumer-embedded.wsdl
new file mode 100644
index 0000000..72d23cd
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/wsdl/HBRSoapWSDL-consumer-embedded.wsdl
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="EchoWSDL" targetNamespace="http://services.samples/xsd"
+             xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://services.samples/xsd"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+    <types>
+	<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+		    targetNamespace="http://services.samples/xsd"
+		    xmlns:tns="http://services.samples/xsd"
+		    elementFormDefault="unqualified">
+	    <xsd:complexType name="BuyStocks">
+		<xsd:sequence>
+		    <xsd:element name="order">
+		        <xsd:complexType>
+		            <xsd:sequence>
+		                <xsd:element name="symbol" type="xsd:string"></xsd:element>
+		                <xsd:element name="buyerID" type="xsd:string"></xsd:element>
+		                <xsd:element name="price" type="xsd:double"></xsd:element>
+		                <xsd:element name="volume" type="xsd:int"></xsd:element>
+		            </xsd:sequence>
+		        </xsd:complexType>
+		    </xsd:element>
+		</xsd:sequence>
+	    </xsd:complexType>
+	    <xsd:element name="buyStocks" type="tns:BuyStocks"></xsd:element>
+    </xsd:schema>
+        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+                    targetNamespace="http://someuri"
+                    xmlns:tns="http://someuri"
+                    elementFormDefault="unqualified">
+            <xsd:element name="routing" type="xsd:string"></xsd:element>
+        </xsd:schema>
+    </types>
+    <message name="EchoOperationRequest">
+        <part name="request_header" element="some:routing" xmlns:some="http://someuri"/>
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+    <message name="EchoOperationResponse">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+
+    <portType name="buyStocksPortType">
+        <operation name="buyStocksOperation">
+            <input name="message" message="tns:EchoOperationRequest"/>
+            <output name="message" message="tns:EchoOperationResponse"/>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <input name="message1K" message="tns:EchoOperationRequest"/>
+            <output name="message1K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <input name="message5K" message="tns:EchoOperationRequest"/>
+            <output name="message5K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <input name="message10K" message="tns:EchoOperationRequest"/>
+            <output name="message10K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <input name="message100K" message="tns:EchoOperationRequest"/>
+            <output name="message100K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <input name="message500K" message="tns:EchoOperationRequest"/>
+            <output name="message500K" message="tns:EchoOperationResponse"/>
+        </operation>
+    </portType>
+    <binding name="EchoServiceSOAP11Binding" type="tns:buyStocksPortType">
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+        <operation name="buyStocksOperation">
+            <soap:operation soapAction="urn:buyStocks" style="document"/>
+            <input name="message">
+                <soap:header use="literal" message="tns:EchoOperationRequest" part="request_header" required="true"/>
+                <soap:body use="literal" parts="parameters"/>
+            </input>
+            <output name="message">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <soap:operation soapAction="urn:buyStocks.2" style="document"/>
+            <input name="message1K">
+                <soap:header use="literal" message="tns:EchoOperationRequest" part="request_header" required="true"/>
+                <soap:body use="literal"/>
+            </input>
+            <output name="message1K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <soap:operation soapAction="urn:buyStocks.5" style="document"/>
+            <input name="message5K">
+                <soap:header use="literal" message="tns:EchoOperationRequest" part="request_header" required="true"/>
+                <soap:body use="literal"/>
+            </input>
+            <output name="message5K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <soap:operation soapAction="urn:buyStocks.10" style="document"/>
+            <input name="message10K">
+                <soap:header use="literal" message="tns:EchoOperationRequest" part="request_header" required="true"/>
+                <soap:body use="literal"/>
+            </input>
+            <output name="message10K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <soap:operation soapAction="urn:buyStocks.100" style="document"/>
+            <input name="message100K">
+                <soap:header use="literal" message="tns:EchoOperationRequest" part="request_header" required="true"/>
+                <soap:body use="literal"/>
+            </input>
+            <output name="message100K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <soap:operation soapAction="urn:buyStocks.500" style="document"/>
+            <input name="message500K">
+                <soap:header use="literal" message="tns:EchoOperationRequest" part="request_header" required="true"/>
+                <soap:body use="literal"/>
+            </input>
+            <output name="message500K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+    </binding>
+    <service name="CBRSOAPHeaderProxy">
+        <port name="CBRSOAPHeaderEchoServicePort" binding="tns:EchoServiceSOAP11Binding">
+            <soap:address location="http://localhost:8192/service/CBRSOAPHeaderProxy"/>
+        </port>
+    </service>
+</definitions>
+
diff --git a/tests/camel-performance/src/test/resources/wsdl/HBRSoapWSDL-provider-embedded.wsdl b/tests/camel-performance/src/test/resources/wsdl/HBRSoapWSDL-provider-embedded.wsdl
new file mode 100644
index 0000000..e2392f0
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/wsdl/HBRSoapWSDL-provider-embedded.wsdl
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="EchoWSDL" targetNamespace="http://services.samples/xsd"
+             xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://services.samples/xsd"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+    <types>
+	<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+		    targetNamespace="http://services.samples/xsd"
+		    xmlns:tns="http://services.samples/xsd"
+		    elementFormDefault="unqualified">
+	    <xsd:complexType name="BuyStocks">
+		<xsd:sequence>
+		    <xsd:element name="order">
+		        <xsd:complexType>
+		            <xsd:sequence>
+		                <xsd:element name="symbol" type="xsd:string"></xsd:element>
+		                <xsd:element name="buyerID" type="xsd:string"></xsd:element>
+		                <xsd:element name="price" type="xsd:double"></xsd:element>
+		                <xsd:element name="volume" type="xsd:int"></xsd:element>
+		            </xsd:sequence>
+		        </xsd:complexType>
+		    </xsd:element>
+		</xsd:sequence>
+	    </xsd:complexType>
+	    <xsd:element name="buyStocks" type="tns:BuyStocks"></xsd:element>
+	</xsd:schema>
+    </types>
+    <message name="EchoOperationRequest">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+    <message name="EchoOperationResponse">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+
+    <portType name="buyStocksPortType">
+        <operation name="buyStocksOperation">
+            <input name="message" message="tns:EchoOperationRequest"/>
+            <output name="message" message="tns:EchoOperationResponse"/>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <input name="message1K" message="tns:EchoOperationRequest"/>
+            <output name="message1K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <input name="message5K" message="tns:EchoOperationRequest"/>
+            <output name="message5K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <input name="message10K" message="tns:EchoOperationRequest"/>
+            <output name="message10K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <input name="message100K" message="tns:EchoOperationRequest"/>
+            <output name="message100K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <input name="message500K" message="tns:EchoOperationRequest"/>
+            <output name="message500K" message="tns:EchoOperationResponse"/>
+        </operation>
+    </portType>
+    <binding name="EchoServiceSOAP11Binding" type="tns:buyStocksPortType">
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+        <operation name="buyStocksOperation">
+            <soap:operation soapAction="urn:buyStocks" style="document"/>
+            <input name="message">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <soap:operation soapAction="urn:buyStocks.2" style="document"/>
+            <input name="message1K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message1K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <soap:operation soapAction="urn:buyStocks.5" style="document"/>
+            <input name="message5K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message5K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <soap:operation soapAction="urn:buyStocks.10" style="document"/>
+            <input name="message10K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message10K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <soap:operation soapAction="urn:buyStocks.100" style="document"/>
+            <input name="message100K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message100K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <soap:operation soapAction="urn:buyStocks.500" style="document"/>
+            <input name="message500K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message500K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+    </binding>
+    <service name="HBRSoapEchoService">
+        <port name="HBRSoapEchoServicePort" binding="tns:EchoServiceSOAP11Binding">
+            <soap:address location="http://localhost:9001/service/EchoService"/>
+        </port>
+    </service>
+</definitions>
+
diff --git a/tests/camel-performance/src/test/resources/wsdl/HBRTransportWSDL-consumer-embedded.wsdl b/tests/camel-performance/src/test/resources/wsdl/HBRTransportWSDL-consumer-embedded.wsdl
new file mode 100644
index 0000000..4ece9fb
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/wsdl/HBRTransportWSDL-consumer-embedded.wsdl
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="EchoWSDL" targetNamespace="http://services.samples/xsd"
+             xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://services.samples/xsd"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+    <types>
+	<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+		    targetNamespace="http://services.samples/xsd"
+		    xmlns:tns="http://services.samples/xsd"
+		    elementFormDefault="unqualified">
+	    <xsd:complexType name="BuyStocks">
+		<xsd:sequence>
+		    <xsd:element name="order">
+		        <xsd:complexType>
+		            <xsd:sequence>
+		                <xsd:element name="symbol" type="xsd:string"></xsd:element>
+		                <xsd:element name="buyerID" type="xsd:string"></xsd:element>
+		                <xsd:element name="price" type="xsd:double"></xsd:element>
+		                <xsd:element name="volume" type="xsd:int"></xsd:element>
+		            </xsd:sequence>
+		        </xsd:complexType>
+		    </xsd:element>
+		</xsd:sequence>
+	    </xsd:complexType>
+	    <xsd:element name="buyStocks" type="tns:BuyStocks"></xsd:element>
+	</xsd:schema>
+    </types>
+    <message name="EchoOperationRequest">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+    <message name="EchoOperationResponse">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+
+    <portType name="buyStocksPortType">
+        <operation name="buyStocksOperation">
+            <input name="message" message="tns:EchoOperationRequest"/>
+            <output name="message" message="tns:EchoOperationResponse"/>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <input name="message1K" message="tns:EchoOperationRequest"/>
+            <output name="message1K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <input name="message5K" message="tns:EchoOperationRequest"/>
+            <output name="message5K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <input name="message10K" message="tns:EchoOperationRequest"/>
+            <output name="message10K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <input name="message100K" message="tns:EchoOperationRequest"/>
+            <output name="message100K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <input name="message500K" message="tns:EchoOperationRequest"/>
+            <output name="message500K" message="tns:EchoOperationResponse"/>
+        </operation>
+    </portType>
+    <binding name="EchoServiceSOAP11Binding" type="tns:buyStocksPortType">
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+        <operation name="buyStocksOperation">
+            <soap:operation soapAction="urn:buyStocks" style="document"/>
+            <input name="message">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <soap:operation soapAction="urn:buyStocks.2" style="document"/>
+            <input name="message1K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message1K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <soap:operation soapAction="urn:buyStocks.5" style="document"/>
+            <input name="message5K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message5K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <soap:operation soapAction="urn:buyStocks.10" style="document"/>
+            <input name="message10K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message10K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <soap:operation soapAction="urn:buyStocks.100" style="document"/>
+            <input name="message100K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message100K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <soap:operation soapAction="urn:buyStocks.500" style="document"/>
+            <input name="message500K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message500K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+    </binding>
+    <service name="CBRTransportHeaderProxy">
+        <port name="CBRTransportHeaderEchoServicePort" binding="tns:EchoServiceSOAP11Binding">
+            <soap:address location="http://localhost:8192/service/CBRTransportHeaderProxy"/>
+        </port>
+    </service>
+</definitions>
+
diff --git a/tests/camel-performance/src/test/resources/wsdl/HBRTransportWSDL-provider-embedded.wsdl b/tests/camel-performance/src/test/resources/wsdl/HBRTransportWSDL-provider-embedded.wsdl
new file mode 100644
index 0000000..ee03250
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/wsdl/HBRTransportWSDL-provider-embedded.wsdl
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="EchoWSDL" targetNamespace="http://services.samples/xsd"
+             xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://services.samples/xsd"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+    <types>
+	<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+		    targetNamespace="http://services.samples/xsd"
+		    xmlns:tns="http://services.samples/xsd"
+		    elementFormDefault="unqualified">
+	    <xsd:complexType name="BuyStocks">
+		<xsd:sequence>
+		    <xsd:element name="order">
+		        <xsd:complexType>
+		            <xsd:sequence>
+		                <xsd:element name="symbol" type="xsd:string"></xsd:element>
+		                <xsd:element name="buyerID" type="xsd:string"></xsd:element>
+		                <xsd:element name="price" type="xsd:double"></xsd:element>
+		                <xsd:element name="volume" type="xsd:int"></xsd:element>
+		            </xsd:sequence>
+		        </xsd:complexType>
+		    </xsd:element>
+		</xsd:sequence>
+	    </xsd:complexType>
+	    <xsd:element name="buyStocks" type="tns:BuyStocks"></xsd:element>
+	</xsd:schema>
+    </types>
+    <message name="EchoOperationRequest">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+    <message name="EchoOperationResponse">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+
+    <portType name="buyStocksPortType">
+        <operation name="buyStocksOperation">
+            <input name="message" message="tns:EchoOperationRequest"/>
+            <output name="message" message="tns:EchoOperationResponse"/>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <input name="message1K" message="tns:EchoOperationRequest"/>
+            <output name="message1K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <input name="message5K" message="tns:EchoOperationRequest"/>
+            <output name="message5K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <input name="message10K" message="tns:EchoOperationRequest"/>
+            <output name="message10K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <input name="message100K" message="tns:EchoOperationRequest"/>
+            <output name="message100K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <input name="message500K" message="tns:EchoOperationRequest"/>
+            <output name="message500K" message="tns:EchoOperationResponse"/>
+        </operation>
+    </portType>
+    <binding name="EchoServiceSOAP11Binding" type="tns:buyStocksPortType">
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+        <operation name="buyStocksOperation">
+            <soap:operation soapAction="urn:buyStocks" style="document"/>
+            <input name="message">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <soap:operation soapAction="urn:buyStocks.2" style="document"/>
+            <input name="message1K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message1K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <soap:operation soapAction="urn:buyStocks.5" style="document"/>
+            <input name="message5K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message5K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <soap:operation soapAction="urn:buyStocks.10" style="document"/>
+            <input name="message10K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message10K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <soap:operation soapAction="urn:buyStocks.100" style="document"/>
+            <input name="message100K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message100K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <soap:operation soapAction="urn:buyStocks.500" style="document"/>
+            <input name="message500K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message500K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+    </binding>
+    <service name="HBRTransportEchoService">
+        <port name="HBRTransportEchoServicePort" binding="tns:EchoServiceSOAP11Binding">
+            <soap:address location="http://localhost:9000/service/EchoService"/>
+        </port>
+    </service>
+</definitions>
+
diff --git a/tests/camel-performance/src/test/resources/wsdl/ProxyWSDL-consumer-embedded.wsdl b/tests/camel-performance/src/test/resources/wsdl/ProxyWSDL-consumer-embedded.wsdl
new file mode 100644
index 0000000..bb5bee0
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/wsdl/ProxyWSDL-consumer-embedded.wsdl
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="EchoWSDL" targetNamespace="http://services.samples/xsd"
+             xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://services.samples/xsd"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+    <types>
+	<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+		    targetNamespace="http://services.samples/xsd"
+		    xmlns:tns="http://services.samples/xsd"
+		    elementFormDefault="unqualified">
+	    <xsd:complexType name="BuyStocks">
+		<xsd:sequence>
+		    <xsd:element name="order">
+		        <xsd:complexType>
+		            <xsd:sequence>
+		                <xsd:element name="symbol" type="xsd:string"></xsd:element>
+		                <xsd:element name="buyerID" type="xsd:string"></xsd:element>
+		                <xsd:element name="price" type="xsd:double"></xsd:element>
+		                <xsd:element name="volume" type="xsd:int"></xsd:element>
+		            </xsd:sequence>
+		        </xsd:complexType>
+		    </xsd:element>
+		</xsd:sequence>
+	    </xsd:complexType>
+	    <xsd:element name="buyStocks" type="tns:BuyStocks"></xsd:element>
+	</xsd:schema>
+    </types>
+    <message name="EchoOperationRequest">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+    <message name="EchoOperationResponse">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+
+    <portType name="buyStocksPortType">
+        <operation name="buyStocksOperation">
+            <input name="message" message="tns:EchoOperationRequest"/>
+            <output name="message" message="tns:EchoOperationResponse"/>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <input name="message1K" message="tns:EchoOperationRequest"/>
+            <output name="message1K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <input name="message5K" message="tns:EchoOperationRequest"/>
+            <output name="message5K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <input name="message10K" message="tns:EchoOperationRequest"/>
+            <output name="message10K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <input name="message100K" message="tns:EchoOperationRequest"/>
+            <output name="message100K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <input name="message500K" message="tns:EchoOperationRequest"/>
+            <output name="message500K" message="tns:EchoOperationResponse"/>
+        </operation>
+    </portType>
+    <binding name="EchoServiceSOAP11Binding" type="tns:buyStocksPortType">
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+        <operation name="buyStocksOperation">
+            <soap:operation soapAction="urn:buyStocks" style="document"/>
+            <input name="message">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <soap:operation soapAction="urn:buyStocks.2" style="document"/>
+            <input name="message1K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message1K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <soap:operation soapAction="urn:buyStocks.5" style="document"/>
+            <input name="message5K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message5K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <soap:operation soapAction="urn:buyStocks.10" style="document"/>
+            <input name="message10K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message10K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <soap:operation soapAction="urn:buyStocks.100" style="document"/>
+            <input name="message100K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message100K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <soap:operation soapAction="urn:buyStocks.500" style="document"/>
+            <input name="message500K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message500K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+    </binding>
+    <service name="DirectProxy">
+        <port name="EchoServicePort" binding="tns:EchoServiceSOAP11Binding">
+            <soap:address location="http://localhost:8192/service/DirectProxy"/>
+        </port>
+    </service>
+</definitions>
+
diff --git a/tests/camel-performance/src/test/resources/wsdl/ProxyWSDL-provider-embedded.wsdl b/tests/camel-performance/src/test/resources/wsdl/ProxyWSDL-provider-embedded.wsdl
new file mode 100644
index 0000000..7a62555
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/wsdl/ProxyWSDL-provider-embedded.wsdl
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="EchoWSDL" targetNamespace="http://services.samples/xsd"
+             xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://services.samples/xsd"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+    <types>
+	<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+		    targetNamespace="http://services.samples/xsd"
+		    xmlns:tns="http://services.samples/xsd"
+		    elementFormDefault="unqualified">
+	    <xsd:complexType name="BuyStocks">
+		<xsd:sequence>
+		    <xsd:element name="order">
+		        <xsd:complexType>
+		            <xsd:sequence>
+		                <xsd:element name="symbol" type="xsd:string"></xsd:element>
+		                <xsd:element name="buyerID" type="xsd:string"></xsd:element>
+		                <xsd:element name="price" type="xsd:double"></xsd:element>
+		                <xsd:element name="volume" type="xsd:int"></xsd:element>
+		            </xsd:sequence>
+		        </xsd:complexType>
+		    </xsd:element>
+		</xsd:sequence>
+	    </xsd:complexType>
+	    <xsd:element name="buyStocks" type="tns:BuyStocks"></xsd:element>
+	</xsd:schema>
+    </types>
+    <message name="EchoOperationRequest">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+    <message name="EchoOperationResponse">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+
+    <portType name="buyStocksPortType">
+        <operation name="buyStocksOperation">
+            <input name="message" message="tns:EchoOperationRequest"/>
+            <output name="message" message="tns:EchoOperationResponse"/>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <input name="message1K" message="tns:EchoOperationRequest"/>
+            <output name="message1K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <input name="message5K" message="tns:EchoOperationRequest"/>
+            <output name="message5K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <input name="message10K" message="tns:EchoOperationRequest"/>
+            <output name="message10K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <input name="message100K" message="tns:EchoOperationRequest"/>
+            <output name="message100K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <input name="message500K" message="tns:EchoOperationRequest"/>
+            <output name="message500K" message="tns:EchoOperationResponse"/>
+        </operation>
+    </portType>
+    <binding name="EchoServiceSOAP11Binding" type="tns:buyStocksPortType">
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+        <operation name="buyStocksOperation">
+            <soap:operation soapAction="urn:buyStocks" style="document"/>
+            <input name="message">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <soap:operation soapAction="urn:buyStocks.2" style="document"/>
+            <input name="message1K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message1K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <soap:operation soapAction="urn:buyStocks.5" style="document"/>
+            <input name="message5K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message5K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <soap:operation soapAction="urn:buyStocks.10" style="document"/>
+            <input name="message10K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message10K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <soap:operation soapAction="urn:buyStocks.100" style="document"/>
+            <input name="message100K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message100K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <soap:operation soapAction="urn:buyStocks.500" style="document"/>
+            <input name="message500K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message500K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+    </binding>
+    <service name="ProxyEchoService">
+        <port name="EchoServicePort" binding="tns:EchoServiceSOAP11Binding">
+            <soap:address location="http://localhost:9000/service/EchoService"/>
+        </port>
+    </service>
+</definitions>
+
diff --git a/tests/camel-performance/src/test/resources/wsdl/SecureProxyWSDL-consumer-embedded.wsdl b/tests/camel-performance/src/test/resources/wsdl/SecureProxyWSDL-consumer-embedded.wsdl
new file mode 100644
index 0000000..5b34f98
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/wsdl/SecureProxyWSDL-consumer-embedded.wsdl
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="EchoWSDL" targetNamespace="http://services.samples/xsd"
+             xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://services.samples/xsd"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+    <types>
+	<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+		    targetNamespace="http://services.samples/xsd"
+		    xmlns:tns="http://services.samples/xsd"
+		    elementFormDefault="unqualified">
+	    <xsd:complexType name="BuyStocks">
+		<xsd:sequence>
+		    <xsd:element name="order">
+		        <xsd:complexType>
+		            <xsd:sequence>
+		                <xsd:element name="symbol" type="xsd:string"></xsd:element>
+		                <xsd:element name="buyerID" type="xsd:string"></xsd:element>
+		                <xsd:element name="price" type="xsd:double"></xsd:element>
+		                <xsd:element name="volume" type="xsd:int"></xsd:element>
+		            </xsd:sequence>
+		        </xsd:complexType>
+		    </xsd:element>
+		</xsd:sequence>
+	    </xsd:complexType>
+	    <xsd:element name="buyStocks" type="tns:BuyStocks"></xsd:element>
+	</xsd:schema>
+    </types>
+    <message name="EchoOperationRequest">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+    <message name="EchoOperationResponse">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+
+    <portType name="buyStocksPortType">
+        <operation name="buyStocksOperation">
+            <input name="message" message="tns:EchoOperationRequest"/>
+            <output name="message" message="tns:EchoOperationResponse"/>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <input name="message1K" message="tns:EchoOperationRequest"/>
+            <output name="message1K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <input name="message5K" message="tns:EchoOperationRequest"/>
+            <output name="message5K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <input name="message10K" message="tns:EchoOperationRequest"/>
+            <output name="message10K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <input name="message100K" message="tns:EchoOperationRequest"/>
+            <output name="message100K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <input name="message500K" message="tns:EchoOperationRequest"/>
+            <output name="message500K" message="tns:EchoOperationResponse"/>
+        </operation>
+    </portType>
+    <binding name="EchoServiceSOAP11Binding" type="tns:buyStocksPortType">
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+        <operation name="buyStocksOperation">
+            <soap:operation soapAction="urn:buyStocks" style="document"/>
+            <input name="message">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <soap:operation soapAction="urn:buyStocks.2" style="document"/>
+            <input name="message1K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message1K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <soap:operation soapAction="urn:buyStocks.5" style="document"/>
+            <input name="message5K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message5K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <soap:operation soapAction="urn:buyStocks.10" style="document"/>
+            <input name="message10K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message10K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <soap:operation soapAction="urn:buyStocks.100" style="document"/>
+            <input name="message100K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message100K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <soap:operation soapAction="urn:buyStocks.500" style="document"/>
+            <input name="message500K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message500K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+    </binding>
+    <service name="SecureProxy">
+        <port name="EchoServicePort" binding="tns:EchoServiceSOAP11Binding">
+            <soap:address location="http://localhost:8192/service/SecureProxy"/>
+        </port>
+    </service>
+</definitions>
+
diff --git a/tests/camel-performance/src/test/resources/wsdl/SecureProxyWSDL-provider-embedded.wsdl b/tests/camel-performance/src/test/resources/wsdl/SecureProxyWSDL-provider-embedded.wsdl
new file mode 100644
index 0000000..57b8fa4
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/wsdl/SecureProxyWSDL-provider-embedded.wsdl
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="EchoWSDL" targetNamespace="http://services.samples/xsd"
+             xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://services.samples/xsd"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+    <types>
+	<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+		    targetNamespace="http://services.samples/xsd"
+		    xmlns:tns="http://services.samples/xsd"
+		    elementFormDefault="unqualified">
+	    <xsd:complexType name="BuyStocks">
+		<xsd:sequence>
+		    <xsd:element name="order">
+		        <xsd:complexType>
+		            <xsd:sequence>
+		                <xsd:element name="symbol" type="xsd:string"></xsd:element>
+		                <xsd:element name="buyerID" type="xsd:string"></xsd:element>
+		                <xsd:element name="price" type="xsd:double"></xsd:element>
+		                <xsd:element name="volume" type="xsd:int"></xsd:element>
+		            </xsd:sequence>
+		        </xsd:complexType>
+		    </xsd:element>
+		</xsd:sequence>
+	    </xsd:complexType>
+	    <xsd:element name="buyStocks" type="tns:BuyStocks"></xsd:element>
+	</xsd:schema>
+    </types>
+    <message name="EchoOperationRequest">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+    <message name="EchoOperationResponse">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+
+    <portType name="buyStocksPortType">
+        <operation name="buyStocksOperation">
+            <input name="message" message="tns:EchoOperationRequest"/>
+            <output name="message" message="tns:EchoOperationResponse"/>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <input name="message1K" message="tns:EchoOperationRequest"/>
+            <output name="message1K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <input name="message5K" message="tns:EchoOperationRequest"/>
+            <output name="message5K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <input name="message10K" message="tns:EchoOperationRequest"/>
+            <output name="message10K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <input name="message100K" message="tns:EchoOperationRequest"/>
+            <output name="message100K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <input name="message500K" message="tns:EchoOperationRequest"/>
+            <output name="message500K" message="tns:EchoOperationResponse"/>
+        </operation>
+    </portType>
+    <binding name="EchoServiceSOAP11Binding" type="tns:buyStocksPortType">
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+        <operation name="buyStocksOperation">
+            <soap:operation soapAction="urn:buyStocks" style="document"/>
+            <input name="message">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <soap:operation soapAction="urn:buyStocks.2" style="document"/>
+            <input name="message1K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message1K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <soap:operation soapAction="urn:buyStocks.5" style="document"/>
+            <input name="message5K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message5K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <soap:operation soapAction="urn:buyStocks.10" style="document"/>
+            <input name="message10K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message10K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <soap:operation soapAction="urn:buyStocks.100" style="document"/>
+            <input name="message100K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message100K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <soap:operation soapAction="urn:buyStocks.500" style="document"/>
+            <input name="message500K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message500K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+    </binding>
+    <service name="SecureEchoService">
+        <port name="EchoServicePort" binding="tns:EchoServiceSOAP11Binding">
+            <soap:address location="http://localhost:9000/service/EchoService"/>
+        </port>
+    </service>
+</definitions>
+
diff --git a/tests/camel-performance/src/test/resources/wsdl/TransformerWSDL-consumer-embedded.wsdl b/tests/camel-performance/src/test/resources/wsdl/TransformerWSDL-consumer-embedded.wsdl
new file mode 100644
index 0000000..2591b6f
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/wsdl/TransformerWSDL-consumer-embedded.wsdl
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="EchoWSDL" targetNamespace="http://services.samples/xsd"
+             xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://services.samples/xsd"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+    <types>
+	<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+		    targetNamespace="http://services.samples/xsd"
+		    xmlns:tns="http://services.samples/xsd"
+		    elementFormDefault="unqualified">
+	    <xsd:complexType name="BuyStocks">
+		<xsd:sequence>
+		    <xsd:element name="order">
+		        <xsd:complexType>
+		            <xsd:sequence>
+		                <xsd:element name="symbol" type="xsd:string"></xsd:element>
+		                <xsd:element name="buyerID" type="xsd:string"></xsd:element>
+		                <xsd:element name="price" type="xsd:double"></xsd:element>
+		                <xsd:element name="volume" type="xsd:int"></xsd:element>
+		            </xsd:sequence>
+		        </xsd:complexType>
+		    </xsd:element>
+		</xsd:sequence>
+	    </xsd:complexType>
+	    <xsd:element name="buyStocks" type="tns:BuyStocks"></xsd:element>
+	</xsd:schema>
+    </types>
+    <message name="EchoOperationRequest">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+    <message name="EchoOperationResponse">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+
+    <portType name="buyStocksPortType">
+        <operation name="buyStocksOperation">
+            <input name="message" message="tns:EchoOperationRequest"/>
+            <output name="message" message="tns:EchoOperationResponse"/>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <input name="message1K" message="tns:EchoOperationRequest"/>
+            <output name="message1K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <input name="message5K" message="tns:EchoOperationRequest"/>
+            <output name="message5K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <input name="message10K" message="tns:EchoOperationRequest"/>
+            <output name="message10K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <input name="message100K" message="tns:EchoOperationRequest"/>
+            <output name="message100K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <input name="message500K" message="tns:EchoOperationRequest"/>
+            <output name="message500K" message="tns:EchoOperationResponse"/>
+        </operation>
+    </portType>
+    <binding name="EchoServiceSOAP11Binding" type="tns:buyStocksPortType">
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+        <operation name="buyStocksOperation">
+            <soap:operation soapAction="urn:buyStocks" style="document"/>
+            <input name="message">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <soap:operation soapAction="urn:buyStocks.2" style="document"/>
+            <input name="message1K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message1K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <soap:operation soapAction="urn:buyStocks.5" style="document"/>
+            <input name="message5K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message5K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <soap:operation soapAction="urn:buyStocks.10" style="document"/>
+            <input name="message10K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message10K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <soap:operation soapAction="urn:buyStocks.100" style="document"/>
+            <input name="message100K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message100K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <soap:operation soapAction="urn:buyStocks.500" style="document"/>
+            <input name="message500K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message500K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+    </binding>
+    <service name="XSLTProxy">
+        <port name="EchoServicePort" binding="tns:EchoServiceSOAP11Binding">
+            <soap:address location="http://localhost:8192/service/XSLTProxy"/>
+        </port>
+    </service>
+</definitions>
+
diff --git a/tests/camel-performance/src/test/resources/wsdl/TransformerWSDL-provider-embedded.wsdl b/tests/camel-performance/src/test/resources/wsdl/TransformerWSDL-provider-embedded.wsdl
new file mode 100644
index 0000000..6b9b3a1
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/wsdl/TransformerWSDL-provider-embedded.wsdl
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="EchoWSDL" targetNamespace="http://services.samples/xsd"
+             xmlns="http://schemas.xmlsoap.org/wsdl/"
+             xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://services.samples/xsd"
+             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+    <types>
+	<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+		    targetNamespace="http://services.samples/xsd"
+		    xmlns:tns="http://services.samples/xsd"
+		    elementFormDefault="unqualified">
+	    <xsd:complexType name="BuyStocks">
+		<xsd:sequence>
+		    <xsd:element name="order">
+		        <xsd:complexType>
+		            <xsd:sequence>
+		                <xsd:element name="symbol" type="xsd:string"></xsd:element>
+		                <xsd:element name="buyerID" type="xsd:string"></xsd:element>
+		                <xsd:element name="price" type="xsd:double"></xsd:element>
+		                <xsd:element name="volume" type="xsd:int"></xsd:element>
+		            </xsd:sequence>
+		        </xsd:complexType>
+		    </xsd:element>
+		</xsd:sequence>
+	    </xsd:complexType>
+	    <xsd:element name="buyStocks" type="tns:BuyStocks"></xsd:element>
+	</xsd:schema>
+    </types>
+    <message name="EchoOperationRequest">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+    <message name="EchoOperationResponse">
+        <part name="parameters" element="tns:buyStocks"/>
+    </message>
+
+    <portType name="buyStocksPortType">
+        <operation name="buyStocksOperation">
+            <input name="message" message="tns:EchoOperationRequest"/>
+            <output name="message" message="tns:EchoOperationResponse"/>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <input name="message1K" message="tns:EchoOperationRequest"/>
+            <output name="message1K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <input name="message5K" message="tns:EchoOperationRequest"/>
+            <output name="message5K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <input name="message10K" message="tns:EchoOperationRequest"/>
+            <output name="message10K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <input name="message100K" message="tns:EchoOperationRequest"/>
+            <output name="message100K" message="tns:EchoOperationResponse"/>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <input name="message500K" message="tns:EchoOperationRequest"/>
+            <output name="message500K" message="tns:EchoOperationResponse"/>
+        </operation>
+    </portType>
+    <binding name="EchoServiceSOAP11Binding" type="tns:buyStocksPortType">
+        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+        <operation name="buyStocksOperation">
+            <soap:operation soapAction="urn:buyStocks" style="document"/>
+            <input name="message">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+
+        <operation name="buyStocksOperation1K">
+            <soap:operation soapAction="urn:buyStocks.2" style="document"/>
+            <input name="message1K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message1K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation5K">
+            <soap:operation soapAction="urn:buyStocks.5" style="document"/>
+            <input name="message5K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message5K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation10K">
+            <soap:operation soapAction="urn:buyStocks.10" style="document"/>
+            <input name="message10K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message10K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation100K">
+            <soap:operation soapAction="urn:buyStocks.100" style="document"/>
+            <input name="message100K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message100K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+        <operation name="buyStocksOperation500K">
+            <soap:operation soapAction="urn:buyStocks.500" style="document"/>
+            <input name="message500K">
+                <soap:body use="literal"/>
+            </input>
+            <output name="message500K">
+                <soap:body use="literal"/>
+            </output>
+        </operation>
+    </binding>
+    <service name="XSLTEchoService">
+        <port name="EchoServicePort" binding="tns:EchoServiceSOAP11Binding">
+            <soap:address location="http://localhost:9000/service/EchoService"/>
+        </port>
+    </service>
+</definitions>
+
diff --git a/tests/camel-performance/src/test/resources/wssecurity.properties b/tests/camel-performance/src/test/resources/wssecurity.properties
new file mode 100644
index 0000000..68196c1
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/wssecurity.properties
@@ -0,0 +1,21 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=jks
+org.apache.ws.security.crypto.merlin.keystore.password=password
+org.apache.ws.security.crypto.merlin.file=store.jks
+timeToLive=6307200000
\ No newline at end of file
diff --git a/tests/camel-performance/src/test/resources/xslt/transform.xslt b/tests/camel-performance/src/test/resources/xslt/transform.xslt
new file mode 100644
index 0000000..cbd3ebf
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/xslt/transform.xslt
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<xsl:stylesheet version="2.0"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:m0="http://services.samples/xsd"
+    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+    
+    <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" exclude-result-prefixes="m0" />
+
+    <xsl:template match="m0:buyStocks">
+        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+            <soapenv:Body>
+                <m:skcotSyub xmlns:m="http://services.samples/xsd">
+                    <xsl:for-each select="order">
+                        <redro>
+                            <lobmys>
+                                <xsl:value-of select="symbol" />
+                            </lobmys>
+                            <DIreyub>
+                                <xsl:value-of select="buyerID" />
+                            </DIreyub>
+                            <ecirp>
+                                <xsl:value-of select="price" />
+                            </ecirp>
+                            <emulov>
+                                <xsl:value-of select="volume" />
+                            </emulov>
+                        </redro>
+                    </xsl:for-each>
+                </m:skcotSyub>
+            </soapenv:Body>
+        </soapenv:Envelope>
+    </xsl:template>
+
+    <xsl:template match="soapenv:Header"></xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/tests/camel-performance/src/test/resources/xslt/transform_back.xslt b/tests/camel-performance/src/test/resources/xslt/transform_back.xslt
new file mode 100644
index 0000000..04ea451
--- /dev/null
+++ b/tests/camel-performance/src/test/resources/xslt/transform_back.xslt
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<xsl:stylesheet version="2.0"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns:m0="http://services.samples/xsd">
+    
+    <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" exclude-result-prefixes="m0" />
+
+    <xsl:template match="m0:skcotSyub">
+        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
+            <soapenv:Body>
+                <m:buyStocks xmlns:m="http://services.samples/xsd">
+                    <xsl:for-each select="redro">
+                        <order>
+                            <symbol>
+                                <xsl:value-of select="lobmys" />
+                            </symbol>
+                            <buyerID>
+                                <xsl:value-of select="DIreyub" />
+                            </buyerID>
+                            <price>
+                                <xsl:value-of select="ecirp" />
+                            </price>
+                            <volume>
+                                <xsl:value-of select="emulov" />
+                            </volume>
+                        </order>
+                    </xsl:for-each>
+                </m:buyStocks>
+            </soapenv:Body>
+        </soapenv:Envelope>
+    </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/tests/pom.xml b/tests/pom.xml
index a5e25db..4f56de4 100644
--- a/tests/pom.xml
+++ b/tests/pom.xml
@@ -36,6 +36,7 @@
 
     <modules>
         <module>camel-jmh</module>
+        <module>camel-performance</module>
     </modules>
 
 </project>