You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2021/03/23 20:01:26 UTC
[camel-kafka-connector] 01/02: add itests for
camel-cxfrs-kafka-connector #996 (#1099)
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch master-alignment
in repository https://gitbox.apache.org/repos/asf/camel-kafka-connector.git
commit 31d19da3690a399e622bec67077f344e2b83b8f2
Author: Freeman(Yue) Fang <fr...@gmail.com>
AuthorDate: Thu Mar 18 10:23:49 2021 -0400
add itests for camel-cxfrs-kafka-connector #996 (#1099)
* add itests for camel-cxfrs-kafka-connector #996
* NetworkUtils should be able to hold a free port for later usage #1109
* address feedback
* #1109 address PR review feedback
(cherry picked from commit 94929f308ae7a155a6b3d0de23657bff11f41fde)
---
tests/itests-cxfrs/pom.xml | 114 +++++++++++
.../camel/kafkaconnector/cxfrs/Customer.java | 79 +++++++
.../cxfrs/CustomerServiceResource.java | 49 +++++
.../cxfrs/source/CamelSourceCXFRSITCase.java | 228 +++++++++++++++++++++
.../source/CamelSourceCXFRSPropertyFactory.java | 63 ++++++
.../kafkaconnector/cxfrs/source/HelloService.java | 35 ++++
tests/pom.xml | 1 +
7 files changed, 569 insertions(+)
diff --git a/tests/itests-cxfrs/pom.xml b/tests/itests-cxfrs/pom.xml
new file mode 100644
index 0000000..f8f8fed
--- /dev/null
+++ b/tests/itests-cxfrs/pom.xml
@@ -0,0 +1,114 @@
+<?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/xsd/maven-4.0.0.xsd">
+ <parent>
+ <groupId>org.apache.camel.kafkaconnector</groupId>
+ <artifactId>itests-parent</artifactId>
+ <version>0.9.0-SNAPSHOT</version>
+ <relativePath>../itests-parent/pom.xml</relativePath>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>itests-cxfrs</artifactId>
+ <name>Camel-Kafka-Connector :: Tests :: CXF RS</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel.kafkaconnector</groupId>
+ <artifactId>itests-common</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-test-infra-common</artifactId>
+ <version>${camel.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-test-infra-dispatch-router</artifactId>
+ <version>${camel.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-cxf</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-transports-http-jetty</artifactId>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-util</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-io</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-security</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-continuation</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-http</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-testutils</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-rs-extension-providers</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.jettison</groupId>
+ <artifactId>jettison</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+
+</project>
diff --git a/tests/itests-cxfrs/src/test/java/org/apache/camel/kafkaconnector/cxfrs/Customer.java b/tests/itests-cxfrs/src/test/java/org/apache/camel/kafkaconnector/cxfrs/Customer.java
new file mode 100644
index 0000000..fee5122
--- /dev/null
+++ b/tests/itests-cxfrs/src/test/java/org/apache/camel/kafkaconnector/cxfrs/Customer.java
@@ -0,0 +1,79 @@
+/**
+ * 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.kafkaconnector.cxfrs;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ *
+ * @version
+ */
+@XmlRootElement(name = "Customer")
+public class Customer {
+ private long id;
+ private String name;
+
+ public Customer() {
+ }
+
+ public Customer(long id, String name) {
+ setId(id);
+ setName(name);
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (int) (id ^ (id >>> 32));
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof Customer)) {
+ return false;
+ }
+
+ if (this == obj) {
+ return true;
+ }
+
+ Customer other = (Customer) obj;
+ return id == other.id && ObjectHelper.equal(name, other.name);
+ }
+
+}
diff --git a/tests/itests-cxfrs/src/test/java/org/apache/camel/kafkaconnector/cxfrs/CustomerServiceResource.java b/tests/itests-cxfrs/src/test/java/org/apache/camel/kafkaconnector/cxfrs/CustomerServiceResource.java
new file mode 100644
index 0000000..1de876e
--- /dev/null
+++ b/tests/itests-cxfrs/src/test/java/org/apache/camel/kafkaconnector/cxfrs/CustomerServiceResource.java
@@ -0,0 +1,49 @@
+/**
+ * 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.kafkaconnector.cxfrs;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Response;
+
+
+// START SNIPPET: example
+@Path("/customerservice/")
+public interface CustomerServiceResource {
+
+ @GET
+ @Path("/customers/{id}/")
+ Customer getCustomer(@PathParam("id") String id);
+
+ @PUT
+ @Path("/customers/")
+ Response updateCustomer(Customer customer);
+
+ @Path("/{id}")
+ @PUT()
+ @Consumes({ "application/xml", "text/plain",
+ "application/json" })
+ @Produces({ "application/xml", "text/plain",
+ "application/json" })
+ Object invoke(@PathParam("id") String id,
+ String payload);
+}
+// END SNIPPET: example
diff --git a/tests/itests-cxfrs/src/test/java/org/apache/camel/kafkaconnector/cxfrs/source/CamelSourceCXFRSITCase.java b/tests/itests-cxfrs/src/test/java/org/apache/camel/kafkaconnector/cxfrs/source/CamelSourceCXFRSITCase.java
new file mode 100644
index 0000000..789df85
--- /dev/null
+++ b/tests/itests-cxfrs/src/test/java/org/apache/camel/kafkaconnector/cxfrs/source/CamelSourceCXFRSITCase.java
@@ -0,0 +1,228 @@
+/*
+ * 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.kafkaconnector.cxfrs.source;
+
+import java.util.concurrent.ExecutionException;
+
+import javax.servlet.ServletRequest;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Response;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.component.cxf.common.message.CxfConstants;
+import org.apache.camel.kafkaconnector.common.AbstractKafkaTest;
+import org.apache.camel.kafkaconnector.common.ConnectorPropertyFactory;
+import org.apache.camel.kafkaconnector.common.clients.kafka.KafkaClient;
+import org.apache.camel.kafkaconnector.common.test.CamelSourceTestSupport;
+import org.apache.camel.kafkaconnector.common.test.TestMessageConsumer;
+import org.apache.camel.kafkaconnector.common.utils.NetworkUtils;
+import org.apache.camel.kafkaconnector.common.utils.TestUtils;
+import org.apache.camel.kafkaconnector.cxfrs.Customer;
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.ext.logging.LoggingInInterceptor;
+import org.apache.cxf.ext.logging.LoggingOutInterceptor;
+import org.apache.cxf.jaxrs.impl.ResponseImpl;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.util.EntityUtils;
+import org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
+
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+
+/**
+ * A simple test case that checks whether the CXF RS Consumer Endpoint produces the expected number of
+ * messages
+ */
+public class CamelSourceCXFRSITCase extends CamelSourceTestSupport {
+
+ protected static final String LOCALHOST = NetworkUtils.getHostname();
+ protected static final int PORT = NetworkUtils.getFreePort(LOCALHOST);
+ protected static final String CXT = PORT + "/CxfRsConsumerTest";
+ protected static final String CXF_RS_ENDPOINT_ADDRESS = "http://" + LOCALHOST + ":" + CXT + "/rest";
+ protected static final String CXF_RS_ENDPOINT_URI = CXF_RS_ENDPOINT_ADDRESS
+ + "?resourceClasses=org.apache.camel.kafkaconnector.cxfrs.CustomerServiceResource";
+
+
+
+ private static String[] receivedValue = {"[126]", "[123]", "[400]"};
+
+
+ private static final Logger LOG = LoggerFactory.getLogger(CamelSourceCXFRSITCase.class);
+
+ private int received;
+ private final int expect = 3;
+
+
+
+ @Override
+ protected String[] getConnectorsInTest() {
+ return new String[] {"camel-cxfrs-kafka-connector"};
+ }
+
+ @BeforeEach
+ public void setUp() {
+ received = 0;
+
+ }
+
+
+
+ @Override
+ protected void produceTestData() {
+ TestUtils.waitFor(() -> NetworkUtils.portIsOpen(LOCALHOST, PORT));
+
+ try {
+ Bus bus = BusFactory.newInstance().createBus();
+
+ bus.getInInterceptors().add(new LoggingInInterceptor());
+ bus.getOutInterceptors().add(new LoggingOutInterceptor());
+ try {
+ doTestGetCustomer("rest");
+ } catch (Exception e) {
+ LOG.info("Test Invocation Failure", e);
+ }
+
+
+ } catch (Exception e) {
+ LOG.info("Unable to invoke service: {}", e.getMessage(), e);
+ fail("Unable to invoke service");
+ }
+ }
+
+ @Override
+ protected void verifyMessages(TestMessageConsumer<?> consumer) {
+ LOG.info("Consumed messages: {}", consumer.consumedMessages());
+
+ for (ConsumerRecord<String, ?> record : consumer.consumedMessages()) {
+ Object receivedObject = consumer.consumedMessages().get(received).value();
+ if (!(receivedObject instanceof String)) {
+ fail("Unexpected message type");
+ }
+
+ String result = (String) receivedObject;
+ assertEquals(receivedValue[received++], result);
+
+
+ }
+ }
+
+
+
+ @Test
+ @Timeout(20)
+ public void testBasicSendReceive() {
+ try {
+ String topicName = getTopicForTest(this);
+ ConnectorPropertyFactory connectorPropertyFactory = CamelSourceCXFRSPropertyFactory
+ .basic()
+ .withKafkaTopic(topicName)
+ .withAddress(CXF_RS_ENDPOINT_ADDRESS)
+ .withResourceClass("org.apache.camel.kafkaconnector.cxfrs.CustomerServiceResource");
+
+
+
+ runTestBlocking(connectorPropertyFactory, topicName, expect);
+ } catch (Exception e) {
+ LOG.error("CXF test failed: {}", e.getMessage(), e);
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Timeout(20)
+ public void testBasicSendReceiveWithoutProcessor() {
+ try {
+
+ String topicName = getTopicForTest(this);
+ ConnectorPropertyFactory connectorPropertyFactory = CamelSourceCXFRSPropertyFactory
+ .basic()
+ .withKafkaTopic(topicName)
+ .withAddress(CXF_RS_ENDPOINT_ADDRESS)
+ .withResourceClass("org.apache.camel.kafkaconnector.cxfrs.CustomerServiceResource");
+
+
+
+ runTestBlocking(connectorPropertyFactory, topicName, expect);
+ } catch (Exception e) {
+ LOG.error("CXF test failed: {}", e.getMessage(), e);
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ @Timeout(20)
+ public void testBasicSendReceiveUsingUrl() {
+ try {
+ String topicName = getTopicForTest(this);
+ ConnectorPropertyFactory connectorPropertyFactory = CamelSourceCXFRSPropertyFactory
+ .basic()
+ .withKafkaTopic(topicName)
+ .withUrl(CXF_RS_ENDPOINT_URI).buildUrl();
+
+
+
+ runTestBlocking(connectorPropertyFactory, topicName, expect);
+ } catch (Exception e) {
+ LOG.error("CXF test failed: {}", e.getMessage(), e);
+ fail(e.getMessage());
+ }
+ }
+
+
+
+ private void invokeGetCustomer(String uri, String expect) throws Exception {
+ HttpGet get = new HttpGet(uri);
+ get.addHeader("Accept", "application/json");
+ CloseableHttpClient httpclient = HttpClientBuilder.create().build();
+
+ try {
+ HttpResponse response = httpclient.execute(get);
+
+ } finally {
+ httpclient.close();
+ }
+ }
+
+ private void doTestGetCustomer(String contextUri) throws Exception {
+ invokeGetCustomer("http://" + LOCALHOST + ":" + CXT + "/" + contextUri + "/customerservice/customers/126",
+ "{\"Customer\":{\"id\":126,\"name\":\"CKC\"}}");
+ invokeGetCustomer("http://" + LOCALHOST + ":" + CXT + "/" + contextUri + "/customerservice/customers/123",
+ "customer response back!");
+ invokeGetCustomer("http://" + LOCALHOST + ":" + CXT + "/" + contextUri + "/customerservice/customers/400",
+ "The remoteAddress is 127.0.0.1");
+
+ }
+
+}
diff --git a/tests/itests-cxfrs/src/test/java/org/apache/camel/kafkaconnector/cxfrs/source/CamelSourceCXFRSPropertyFactory.java b/tests/itests-cxfrs/src/test/java/org/apache/camel/kafkaconnector/cxfrs/source/CamelSourceCXFRSPropertyFactory.java
new file mode 100644
index 0000000..463fa17
--- /dev/null
+++ b/tests/itests-cxfrs/src/test/java/org/apache/camel/kafkaconnector/cxfrs/source/CamelSourceCXFRSPropertyFactory.java
@@ -0,0 +1,63 @@
+/*
+ * 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.kafkaconnector.cxfrs.source;
+
+
+import org.apache.camel.kafkaconnector.CamelConnectorConfig;
+import org.apache.camel.kafkaconnector.common.EndpointUrlBuilder;
+import org.apache.camel.kafkaconnector.common.SourceConnectorPropertyFactory;
+
+
+/**
+ * Creates the set of properties used by a Camel CXF Source Connector
+ */
+final class CamelSourceCXFRSPropertyFactory extends SourceConnectorPropertyFactory<CamelSourceCXFRSPropertyFactory> {
+ private CamelSourceCXFRSPropertyFactory() {
+
+ }
+
+ public CamelSourceCXFRSPropertyFactory withAddress(String address) {
+ return setProperty("camel.source.path.address", address);
+ }
+
+ public CamelSourceCXFRSPropertyFactory withResourceClass(String resourceClasses) {
+ return setProperty("camel.source.endpoint.resourceClasses", resourceClasses);
+ }
+
+ public CamelSourceCXFRSPropertyFactory withPublishedEndpointUrl(String publishedEndpointUrl) {
+ return setProperty("camel.source.endpoint.publishedEndpointUrl", publishedEndpointUrl);
+ }
+
+
+
+ public static CamelSourceCXFRSPropertyFactory basic() {
+ return new CamelSourceCXFRSPropertyFactory()
+ .withName("CamelCXFRSSourceConnector")
+ .withTasksMax(1)
+ .withConnectorClass("org.apache.camel.kafkaconnector.cxfrs.CamelCxfrsSourceConnector")
+ .withKeyConverterClass("org.apache.kafka.connect.storage.StringConverter")
+ .withValueConverterClass("org.apache.kafka.connect.storage.StringConverter");
+ }
+
+ public EndpointUrlBuilder<CamelSourceCXFRSPropertyFactory> withUrl(String cxfUrl) {
+ String url = String.format("cxfrs://%s", cxfUrl);
+ return new EndpointUrlBuilder<>(this::withSourceUrl, url);
+ }
+
+
+}
diff --git a/tests/itests-cxfrs/src/test/java/org/apache/camel/kafkaconnector/cxfrs/source/HelloService.java b/tests/itests-cxfrs/src/test/java/org/apache/camel/kafkaconnector/cxfrs/source/HelloService.java
new file mode 100644
index 0000000..72cbd7d
--- /dev/null
+++ b/tests/itests-cxfrs/src/test/java/org/apache/camel/kafkaconnector/cxfrs/source/HelloService.java
@@ -0,0 +1,35 @@
+/*
+ * 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.kafkaconnector.cxfrs.source;
+
+import java.util.List;
+
+public interface HelloService {
+ String sayHello();
+
+ void ping();
+
+ int getInvocationCount();
+
+ String echo(String text) throws Exception;
+
+ Boolean echoBoolean(Boolean bool);
+
+ String complexParameters(List<String> par1, List<String> par2);
+
+}
diff --git a/tests/pom.xml b/tests/pom.xml
index 4009424..612f57b 100644
--- a/tests/pom.xml
+++ b/tests/pom.xml
@@ -62,6 +62,7 @@
<module>itests-ssh</module>
<module>itests-sql</module>
<module>itests-cxf</module>
+ <module>itests-cxfrs</module>
<module>itests-netty</module>
<module>itests-google-pubsub</module>
</modules>