You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2017/08/04 16:09:53 UTC
[02/19] camel git commit: CAMEL-11550: Component extensions
http://git-wip-us.apache.org/repos/asf/camel/blob/42529399/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/TwitterComponentVerifierTest.java
----------------------------------------------------------------------
diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/TwitterComponentVerifierTest.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/TwitterComponentVerifierTest.java
new file mode 100644
index 0000000..5d24a04
--- /dev/null
+++ b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/TwitterComponentVerifierTest.java
@@ -0,0 +1,24 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.twitter;
+
+public class TwitterComponentVerifierTest extends AbstractComponentVerifierTest {
+ @Override
+ protected String getComponentScheme() {
+ return "twitter";
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/42529399/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/directmessage/TwitterDirectmessageComponentVerifierExtensionTest.java
----------------------------------------------------------------------
diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/directmessage/TwitterDirectmessageComponentVerifierExtensionTest.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/directmessage/TwitterDirectmessageComponentVerifierExtensionTest.java
new file mode 100644
index 0000000..a5de409
--- /dev/null
+++ b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/directmessage/TwitterDirectmessageComponentVerifierExtensionTest.java
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.twitter.directmessage;
+
+import org.apache.camel.component.twitter.AbstractComponentVerifierExtensionTest;
+
+public class TwitterDirectmessageComponentVerifierExtensionTest extends AbstractComponentVerifierExtensionTest {
+ @Override
+ protected String getComponentScheme() {
+ return "twitter-directmessage";
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/42529399/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/directmessage/TwitterDirectmessageComponentVerifierTest.java
----------------------------------------------------------------------
diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/directmessage/TwitterDirectmessageComponentVerifierTest.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/directmessage/TwitterDirectmessageComponentVerifierTest.java
new file mode 100644
index 0000000..8292712
--- /dev/null
+++ b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/directmessage/TwitterDirectmessageComponentVerifierTest.java
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.twitter.directmessage;
+
+import org.apache.camel.component.twitter.AbstractComponentVerifierTest;
+
+public class TwitterDirectmessageComponentVerifierTest extends AbstractComponentVerifierTest {
+ @Override
+ protected String getComponentScheme() {
+ return "twitter-directmessage";
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/42529399/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/search/TwitterSearchComponentVerifierExtensionTest.java
----------------------------------------------------------------------
diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/search/TwitterSearchComponentVerifierExtensionTest.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/search/TwitterSearchComponentVerifierExtensionTest.java
new file mode 100644
index 0000000..ae8428f
--- /dev/null
+++ b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/search/TwitterSearchComponentVerifierExtensionTest.java
@@ -0,0 +1,72 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.twitter.search;
+
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.camel.Component;
+import org.apache.camel.component.extension.ComponentVerifierExtension;
+import org.apache.camel.component.twitter.AbstractComponentVerifierExtensionTest;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TwitterSearchComponentVerifierExtensionTest extends AbstractComponentVerifierExtensionTest {
+ @Override
+ protected String getComponentScheme() {
+ return "twitter-search";
+ }
+
+ @Test
+ public void testEmptyConfiguration() {
+ Component component = context().getComponent(getComponentScheme());
+ ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+ {
+ // Parameters validation
+ ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.PARAMETERS, Collections.emptyMap());
+
+ Assert.assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus());
+ Assert.assertEquals(5, result.getErrors().size());
+
+ List<String> expected = new LinkedList<>();
+ expected.add("keywords");
+ expected.add("consumerKey");
+ expected.add("consumerSecret");
+ expected.add("accessToken");
+ expected.add("accessTokenSecret");
+
+ for (ComponentVerifierExtension.VerificationError error : result.getErrors()) {
+ expected.removeAll(error.getParameterKeys());
+ }
+
+ Assert.assertTrue("Missing expected params: " + expected.toString(), expected.isEmpty());
+ }
+
+ {
+ // Connectivity validation
+ ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, Collections.emptyMap());
+
+ Assert.assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus());
+ Assert.assertEquals(1, result.getErrors().size());
+ Assert.assertEquals(ComponentVerifierExtension.VerificationError.StandardCode.EXCEPTION, result.getErrors().get(0).getCode());
+ Assert.assertNotNull(result.getErrors().get(0).getDetails().get(ComponentVerifierExtension.VerificationError.ExceptionAttribute.EXCEPTION_INSTANCE));
+ Assert.assertTrue(result.getErrors().get(0).getDetails().get(ComponentVerifierExtension.VerificationError.ExceptionAttribute.EXCEPTION_INSTANCE) instanceof IllegalArgumentException);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/42529399/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/search/TwitterSearchComponentVerifierTest.java
----------------------------------------------------------------------
diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/search/TwitterSearchComponentVerifierTest.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/search/TwitterSearchComponentVerifierTest.java
new file mode 100644
index 0000000..6bf6275
--- /dev/null
+++ b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/search/TwitterSearchComponentVerifierTest.java
@@ -0,0 +1,72 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.twitter.search;
+
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.camel.ComponentVerifier;
+import org.apache.camel.component.twitter.AbstractComponentVerifierTest;
+import org.apache.camel.component.twitter.AbstractTwitterComponent;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TwitterSearchComponentVerifierTest extends AbstractComponentVerifierTest {
+ @Override
+ protected String getComponentScheme() {
+ return "twitter-search";
+ }
+
+ @Test
+ public void testEmptyConfiguration() {
+ AbstractTwitterComponent component = context().getComponent(getComponentScheme(), AbstractTwitterComponent.class);
+ ComponentVerifier verifier = component.getVerifier();
+
+ {
+ // Parameters validation
+ ComponentVerifier.Result result = verifier.verify(ComponentVerifier.Scope.PARAMETERS, Collections.emptyMap());
+
+ Assert.assertEquals(ComponentVerifier.Result.Status.ERROR, result.getStatus());
+ Assert.assertEquals(5, result.getErrors().size());
+
+ List<String> expected = new LinkedList<>();
+ expected.add("keywords");
+ expected.add("consumerKey");
+ expected.add("consumerSecret");
+ expected.add("accessToken");
+ expected.add("accessTokenSecret");
+
+ for (ComponentVerifier.VerificationError error : result.getErrors()) {
+ expected.removeAll(error.getParameterKeys());
+ }
+
+ Assert.assertTrue("Missing expected params: " + expected.toString(), expected.isEmpty());
+ }
+
+ {
+ // Connectivity validation
+ ComponentVerifier.Result result = verifier.verify(ComponentVerifier.Scope.CONNECTIVITY, Collections.emptyMap());
+
+ Assert.assertEquals(ComponentVerifier.Result.Status.ERROR, result.getStatus());
+ Assert.assertEquals(1, result.getErrors().size());
+ Assert.assertEquals(ComponentVerifier.VerificationError.StandardCode.EXCEPTION, result.getErrors().get(0).getCode());
+ Assert.assertNotNull(result.getErrors().get(0).getDetails().get(ComponentVerifier.VerificationError.ExceptionAttribute.EXCEPTION_INSTANCE));
+ Assert.assertTrue(result.getErrors().get(0).getDetails().get(ComponentVerifier.VerificationError.ExceptionAttribute.EXCEPTION_INSTANCE) instanceof IllegalArgumentException);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/42529399/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/streaming/TwitterStreamingComponentVerifierExtensionTest.java
----------------------------------------------------------------------
diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/streaming/TwitterStreamingComponentVerifierExtensionTest.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/streaming/TwitterStreamingComponentVerifierExtensionTest.java
new file mode 100644
index 0000000..9dcdb78
--- /dev/null
+++ b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/streaming/TwitterStreamingComponentVerifierExtensionTest.java
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.twitter.streaming;
+
+import org.apache.camel.component.twitter.AbstractComponentVerifierExtensionTest;
+
+public class TwitterStreamingComponentVerifierExtensionTest extends AbstractComponentVerifierExtensionTest {
+ @Override
+ protected String getComponentScheme() {
+ return "twitter-streaming";
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/42529399/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/streaming/TwitterStreamingComponentVerifierTest.java
----------------------------------------------------------------------
diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/streaming/TwitterStreamingComponentVerifierTest.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/streaming/TwitterStreamingComponentVerifierTest.java
new file mode 100644
index 0000000..8d6da45
--- /dev/null
+++ b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/streaming/TwitterStreamingComponentVerifierTest.java
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.twitter.streaming;
+
+import org.apache.camel.component.twitter.AbstractComponentVerifierTest;
+
+public class TwitterStreamingComponentVerifierTest extends AbstractComponentVerifierTest {
+ @Override
+ protected String getComponentScheme() {
+ return "twitter-streaming";
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/42529399/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/timeline/TwitterTimelineComponentVerifierExtensionTest.java
----------------------------------------------------------------------
diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/timeline/TwitterTimelineComponentVerifierExtensionTest.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/timeline/TwitterTimelineComponentVerifierExtensionTest.java
new file mode 100644
index 0000000..1ea478c
--- /dev/null
+++ b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/timeline/TwitterTimelineComponentVerifierExtensionTest.java
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.twitter.timeline;
+
+import org.apache.camel.component.twitter.AbstractComponentVerifierExtensionTest;
+
+public class TwitterTimelineComponentVerifierExtensionTest extends AbstractComponentVerifierExtensionTest {
+ @Override
+ protected String getComponentScheme() {
+ return "twitter-timeline";
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/42529399/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/timeline/TwitterTimelineComponentVerifierTest.java
----------------------------------------------------------------------
diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/timeline/TwitterTimelineComponentVerifierTest.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/timeline/TwitterTimelineComponentVerifierTest.java
new file mode 100644
index 0000000..2081db5
--- /dev/null
+++ b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/timeline/TwitterTimelineComponentVerifierTest.java
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.twitter.timeline;
+
+import org.apache.camel.component.twitter.AbstractComponentVerifierTest;
+
+public class TwitterTimelineComponentVerifierTest extends AbstractComponentVerifierTest {
+ @Override
+ protected String getComponentScheme() {
+ return "twitter-timeline";
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/42529399/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java
index ff522f7..b3623d4 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java
@@ -31,6 +31,7 @@ import org.apache.camel.Processor;
import org.apache.camel.Producer;
import org.apache.camel.SSLContextParametersAware;
import org.apache.camel.VerifiableComponent;
+import org.apache.camel.component.extension.ComponentVerifierExtension;
import org.apache.camel.impl.DefaultComponent;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.RestApiConsumerFactory;
@@ -67,10 +68,13 @@ public class UndertowComponent extends DefaultComponent implements RestConsumerF
private UndertowHostOptions hostOptions;
public UndertowComponent() {
+ this(null);
}
public UndertowComponent(CamelContext context) {
super(context);
+
+ registerExtension(UndertowComponentVerifierExtension::new);
}
@Override
@@ -361,11 +365,9 @@ public class UndertowComponent extends DefaultComponent implements RestConsumerF
this.hostOptions = hostOptions;
}
- /**
- *
- */
+ @Override
public ComponentVerifier getVerifier() {
- return new UndertowComponentVerifier(this);
+ return (scope, parameters) -> getExtension(ComponentVerifierExtension.class).orElseThrow(UnsupportedOperationException::new).verify(scope, parameters);
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/42529399/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponentVerifier.java
----------------------------------------------------------------------
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponentVerifier.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponentVerifier.java
deleted file mode 100644
index 03a73f5..0000000
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponentVerifier.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.undertow;
-
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-
-import io.undertow.client.ClientCallback;
-import io.undertow.client.ClientConnection;
-import io.undertow.client.ClientExchange;
-import io.undertow.client.ClientRequest;
-import io.undertow.client.ClientResponse;
-import io.undertow.client.UndertowClient;
-import io.undertow.connector.ByteBufferPool;
-import io.undertow.server.DefaultByteBufferPool;
-import io.undertow.util.Headers;
-import io.undertow.util.HttpString;
-import io.undertow.util.Methods;
-import org.apache.camel.impl.verifier.DefaultComponentVerifier;
-import org.apache.camel.impl.verifier.ResultBuilder;
-import org.apache.camel.impl.verifier.ResultErrorBuilder;
-import org.apache.camel.util.FileUtil;
-import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.util.URISupport;
-import org.apache.camel.util.UnsafeUriCharactersEncoder;
-import org.xnio.AbstractIoFuture;
-import org.xnio.IoFuture;
-import org.xnio.OptionMap;
-import org.xnio.Xnio;
-import org.xnio.XnioWorker;
-
-public final class UndertowComponentVerifier extends DefaultComponentVerifier {
- private final UndertowComponent component;
-
- public UndertowComponentVerifier(UndertowComponent component) {
- super("undertow", component.getCamelContext());
-
- this.component = component;
- }
-
- // *********************************
- // Parameters validation
- // *********************************
-
- @Override
- protected Result verifyParameters(Map<String, Object> parameters) {
- // Default is success
- final ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.PARAMETERS);
- // Make a copy to avoid clashing with parent validation
- final HashMap<String, Object> verifyParams = new HashMap<>(parameters);
- // Check if validation is rest-related
- final boolean isRest = verifyParams.entrySet().stream().anyMatch(e -> e.getKey().startsWith("rest."));
-
- if (isRest) {
- String httpUri = getOption(verifyParams, "rest.host", String.class).orElse(null);
- String path = getOption(verifyParams, "rest.path", String.class).map(FileUtil::stripLeadingSeparator).orElse(null);
-
- if (ObjectHelper.isNotEmpty(httpUri) && ObjectHelper.isNotEmpty(path)) {
- httpUri = httpUri + "/" + path;
- }
-
- verifyParams.put("httpURI", httpUri);
-
- // Cleanup parameters map from rest related stuffs
- verifyParams.entrySet().removeIf(e -> e.getKey().startsWith("rest."));
- }
-
- // Validate using the catalog
- super.verifyParametersAgainstCatalog(builder, verifyParams);
-
- return builder.build();
- }
-
- // *********************************
- // Connectivity validation
- // *********************************
-
- @Override
- protected Result verifyConnectivity(Map<String, Object> parameters) {
- // Default is success
- final ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.CONNECTIVITY);
- // Make a copy to avoid clashing with parent validation
- final HashMap<String, Object> verifyParams = new HashMap<>(parameters);
- // Check if validation is rest-related
- final boolean isRest = verifyParams.entrySet().stream().anyMatch(e -> e.getKey().startsWith("rest."));
-
- String httpUri;
- Optional<String> httpMethod;
-
- if (isRest) {
- // We are doing rest endpoint validation but as today the endpoint
- // can't do any param substitution so the validation is performed
- // against the http uri
- httpUri = getOption(verifyParams, "rest.host", String.class).orElse(null);
- httpMethod = getOption(verifyParams, "rest.method", String.class);
-
- String path = getOption(verifyParams, "rest.path", String.class).map(FileUtil::stripLeadingSeparator).orElse(null);
- if (ObjectHelper.isNotEmpty(httpUri) && ObjectHelper.isNotEmpty(path)) {
- httpUri = httpUri + "/" + path;
- }
-
- verifyParams.put("httpURI", httpUri);
-
- // Cleanup parameters from rest related stuffs
- verifyParams.entrySet().removeIf(e -> e.getKey().startsWith("rest."));
- }
-
- httpUri = getOption(verifyParams, "httpURI", String.class).orElse(null);
- httpMethod = Optional.empty();
-
- // Check whether the http uri is null or empty
- if (ObjectHelper.isEmpty(httpUri)) {
- builder.error(
- ResultErrorBuilder.withMissingOption("httpURI")
- .detail("rest", isRest)
- .build()
- );
-
- // lack of httpURI is a blocking issue so no need to go further
- // with the validation
- return builder.build();
- }
-
- try {
- final UndertowClientWrapper wrapper = new UndertowClientWrapper();
- final ClientResponse response = wrapper.send(httpUri, httpMethod);
-
- if (response != null) {
- int code = response.getResponseCode();
- if (code == 401) {
- // Unauthorized, add authUsername and authPassword to the list
- // of parameters in error
- builder.error(
- ResultErrorBuilder.withHttpCode(code)
- .description(response.getStatus())
- .build()
- );
- } else if (code >= 300 && code < 400) {
- // redirect
- builder.error(
- ResultErrorBuilder.withHttpCode(code)
- .description(response.getStatus())
- .parameterKey("httpURI")
- .detail(
- VerificationError.HttpAttribute.HTTP_REDIRECT,
- () -> Optional.ofNullable(response.getResponseHeaders().get(Headers.LOCATION).getFirst()))
- .build()
- );
- } else if (code >= 400) {
- // generic http error
- builder.error(
- ResultErrorBuilder.withHttpCode(code)
- .description(response.getStatus())
- .build()
- );
- }
- }
-
- } catch (Exception e) {
- builder.error(
- ResultErrorBuilder.withException(e).build()
- );
- }
-
- return builder.build();
- }
-
- // *********************************
- // Helpers
- // *********************************
-
- private final class UndertowClientWrapper {
- private final XnioWorker worker;
- private final ByteBufferPool pool;
- private UndertowClient client;
-
- private UndertowClientWrapper() throws IOException, URISyntaxException {
- this.worker = Xnio.getInstance().createWorker(OptionMap.EMPTY);
- this.pool = new DefaultByteBufferPool(true, 17 * 1024);
- this.client = UndertowClient.getInstance();
- }
-
- public ClientResponse send(String httpUri, Optional<String> httpMethod) throws Exception {
- URI uri = new URI(UnsafeUriCharactersEncoder.encodeHttpURI(httpUri));
- HttpString method = httpMethod.map(Methods::fromString).orElse(Methods.GET);
-
- ClientRequest request = new ClientRequest();
- request.setMethod(method);
- request.setPath(URISupport.pathAndQueryOf(uri));
-
- IoFuture<ClientConnection> connectFuture = client.connect(uri, worker, pool, OptionMap.EMPTY);
- UndertowClientResponseFuture responseFuture = new UndertowClientResponseFuture();
-
- connectFuture.get().sendRequest(request, responseFuture);
-
- // We should set a timeout
- return responseFuture.get().getResponse();
- }
- }
-
- private static final class UndertowClientResponseFuture extends AbstractIoFuture<ClientExchange> implements ClientCallback<ClientExchange> {
- @Override
- public void completed(ClientExchange result) {
- result.setResponseListener(new ClientCallback<ClientExchange>() {
- @Override
- public void completed(ClientExchange result) {
- setResult(result);
- }
- @Override
- public void failed(IOException e) {
- setException(e);
- }
- });
- }
-
- @Override
- public void failed(IOException e) {
- setException(e);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/42529399/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponentVerifierExtension.java
----------------------------------------------------------------------
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponentVerifierExtension.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponentVerifierExtension.java
new file mode 100644
index 0000000..7be54be
--- /dev/null
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponentVerifierExtension.java
@@ -0,0 +1,236 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.undertow;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
+import io.undertow.client.ClientCallback;
+import io.undertow.client.ClientConnection;
+import io.undertow.client.ClientExchange;
+import io.undertow.client.ClientRequest;
+import io.undertow.client.ClientResponse;
+import io.undertow.client.UndertowClient;
+import io.undertow.connector.ByteBufferPool;
+import io.undertow.server.DefaultByteBufferPool;
+import io.undertow.util.Headers;
+import io.undertow.util.HttpString;
+import io.undertow.util.Methods;
+import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
+import org.apache.camel.component.extension.verifier.ResultBuilder;
+import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
+import org.apache.camel.util.FileUtil;
+import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.URISupport;
+import org.apache.camel.util.UnsafeUriCharactersEncoder;
+import org.xnio.AbstractIoFuture;
+import org.xnio.IoFuture;
+import org.xnio.OptionMap;
+import org.xnio.Xnio;
+import org.xnio.XnioWorker;
+
+public final class UndertowComponentVerifierExtension extends DefaultComponentVerifierExtension {
+
+ UndertowComponentVerifierExtension() {
+ super("undertow");
+ }
+
+ // *********************************
+ // Parameters validation
+ // *********************************
+
+ @Override
+ protected Result verifyParameters(Map<String, Object> parameters) {
+ // Default is success
+ final ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.PARAMETERS);
+ // Make a copy to avoid clashing with parent validation
+ final HashMap<String, Object> verifyParams = new HashMap<>(parameters);
+ // Check if validation is rest-related
+ final boolean isRest = verifyParams.entrySet().stream().anyMatch(e -> e.getKey().startsWith("rest."));
+
+ if (isRest) {
+ String httpUri = getOption(verifyParams, "rest.host", String.class).orElse(null);
+ String path = getOption(verifyParams, "rest.path", String.class).map(FileUtil::stripLeadingSeparator).orElse(null);
+
+ if (ObjectHelper.isNotEmpty(httpUri) && ObjectHelper.isNotEmpty(path)) {
+ httpUri = httpUri + "/" + path;
+ }
+
+ verifyParams.put("httpURI", httpUri);
+
+ // Cleanup parameters map from rest related stuffs
+ verifyParams.entrySet().removeIf(e -> e.getKey().startsWith("rest."));
+ }
+
+ // Validate using the catalog
+ super.verifyParametersAgainstCatalog(builder, verifyParams);
+
+ return builder.build();
+ }
+
+ // *********************************
+ // Connectivity validation
+ // *********************************
+
+ @Override
+ protected Result verifyConnectivity(Map<String, Object> parameters) {
+ // Default is success
+ final ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.CONNECTIVITY);
+ // Make a copy to avoid clashing with parent validation
+ final HashMap<String, Object> verifyParams = new HashMap<>(parameters);
+ // Check if validation is rest-related
+ final boolean isRest = verifyParams.entrySet().stream().anyMatch(e -> e.getKey().startsWith("rest."));
+
+ String httpUri;
+ Optional<String> httpMethod;
+
+ if (isRest) {
+ // We are doing rest endpoint validation but as today the endpoint
+ // can't do any param substitution so the validation is performed
+ // against the http uri
+ httpUri = getOption(verifyParams, "rest.host", String.class).orElse(null);
+ httpMethod = getOption(verifyParams, "rest.method", String.class);
+
+ String path = getOption(verifyParams, "rest.path", String.class).map(FileUtil::stripLeadingSeparator).orElse(null);
+ if (ObjectHelper.isNotEmpty(httpUri) && ObjectHelper.isNotEmpty(path)) {
+ httpUri = httpUri + "/" + path;
+ }
+
+ verifyParams.put("httpURI", httpUri);
+
+ // Cleanup parameters from rest related stuffs
+ verifyParams.entrySet().removeIf(e -> e.getKey().startsWith("rest."));
+ }
+
+ httpUri = getOption(verifyParams, "httpURI", String.class).orElse(null);
+ httpMethod = Optional.empty();
+
+ // Check whether the http uri is null or empty
+ if (ObjectHelper.isEmpty(httpUri)) {
+ builder.error(
+ ResultErrorBuilder.withMissingOption("httpURI")
+ .detail("rest", isRest)
+ .build()
+ );
+
+ // lack of httpURI is a blocking issue so no need to go further
+ // with the validation
+ return builder.build();
+ }
+
+ try {
+ final UndertowClientWrapper wrapper = new UndertowClientWrapper();
+ final ClientResponse response = wrapper.send(httpUri, httpMethod);
+
+ if (response != null) {
+ int code = response.getResponseCode();
+ if (code == 401) {
+ // Unauthorized, add authUsername and authPassword to the list
+ // of parameters in error
+ builder.error(
+ ResultErrorBuilder.withHttpCode(code)
+ .description(response.getStatus())
+ .build()
+ );
+ } else if (code >= 300 && code < 400) {
+ // redirect
+ builder.error(
+ ResultErrorBuilder.withHttpCode(code)
+ .description(response.getStatus())
+ .parameterKey("httpURI")
+ .detail(
+ VerificationError.HttpAttribute.HTTP_REDIRECT,
+ () -> Optional.ofNullable(response.getResponseHeaders().get(Headers.LOCATION).getFirst()))
+ .build()
+ );
+ } else if (code >= 400) {
+ // generic http error
+ builder.error(
+ ResultErrorBuilder.withHttpCode(code)
+ .description(response.getStatus())
+ .build()
+ );
+ }
+ }
+
+ } catch (Exception e) {
+ builder.error(
+ ResultErrorBuilder.withException(e).build()
+ );
+ }
+
+ return builder.build();
+ }
+
+ // *********************************
+ // Helpers
+ // *********************************
+
+ private final class UndertowClientWrapper {
+ private final XnioWorker worker;
+ private final ByteBufferPool pool;
+ private UndertowClient client;
+
+ private UndertowClientWrapper() throws IOException, URISyntaxException {
+ this.worker = Xnio.getInstance().createWorker(OptionMap.EMPTY);
+ this.pool = new DefaultByteBufferPool(true, 17 * 1024);
+ this.client = UndertowClient.getInstance();
+ }
+
+ public ClientResponse send(String httpUri, Optional<String> httpMethod) throws Exception {
+ URI uri = new URI(UnsafeUriCharactersEncoder.encodeHttpURI(httpUri));
+ HttpString method = httpMethod.map(Methods::fromString).orElse(Methods.GET);
+
+ ClientRequest request = new ClientRequest();
+ request.setMethod(method);
+ request.setPath(URISupport.pathAndQueryOf(uri));
+
+ IoFuture<ClientConnection> connectFuture = client.connect(uri, worker, pool, OptionMap.EMPTY);
+ UndertowClientResponseFuture responseFuture = new UndertowClientResponseFuture();
+
+ connectFuture.get().sendRequest(request, responseFuture);
+
+ // We should set a timeout
+ return responseFuture.get().getResponse();
+ }
+ }
+
+ private static final class UndertowClientResponseFuture extends AbstractIoFuture<ClientExchange> implements ClientCallback<ClientExchange> {
+ @Override
+ public void completed(ClientExchange result) {
+ result.setResponseListener(new ClientCallback<ClientExchange>() {
+ @Override
+ public void completed(ClientExchange result) {
+ setResult(result);
+ }
+ @Override
+ public void failed(IOException e) {
+ setException(e);
+ }
+ });
+ }
+
+ @Override
+ public void failed(IOException e) {
+ setException(e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/42529399/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowComponentVerifierExtensionTest.java
----------------------------------------------------------------------
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowComponentVerifierExtensionTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowComponentVerifierExtensionTest.java
new file mode 100644
index 0000000..dc6cd6e
--- /dev/null
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowComponentVerifierExtensionTest.java
@@ -0,0 +1,104 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.undertow;
+
+import java.nio.channels.UnresolvedAddressException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.Component;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.extension.ComponentVerifierExtension;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class UndertowComponentVerifierExtensionTest extends BaseUndertowTest {
+ @Test
+ public void testParameters() throws Exception {
+ Component component = context().getComponent("undertow");
+ ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+ Map<String, Object> parameters = new HashMap<>();
+ parameters.put("httpURI", "http://localhost:" + getPort());
+ parameters.put("tcpNoDelay", "true");
+
+ ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.PARAMETERS, parameters);
+
+ Assert.assertEquals(ComponentVerifierExtension.Result.Status.OK, result.getStatus());
+ }
+
+ @Test
+ public void testMissingParameters() throws Exception {
+ Component component = context().getComponent("undertow");
+ ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+ Map<String, Object> parameters = new HashMap<>();
+ parameters.put("tcpNoDelay", "true");
+
+ ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.PARAMETERS, parameters);
+
+ Assert.assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus());
+ Assert.assertEquals(1, result.getErrors().size());
+ Assert.assertEquals(ComponentVerifierExtension.VerificationError.StandardCode.MISSING_PARAMETER, result.getErrors().get(0).getCode());
+ Assert.assertEquals(1, result.getErrors().get(0).getParameterKeys().size());
+ Assert.assertTrue(result.getErrors().get(0).getParameterKeys().contains("httpURI"));
+ }
+
+ @Test
+ public void testConnectivity() throws Exception {
+ Component component = context().getComponent("undertow");
+ ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+ Map<String, Object> parameters = new HashMap<>();
+ parameters.put("httpURI", "http://localhost:" + getPort());
+ parameters.put("tcpNoDelay", "true");
+
+ ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, parameters);
+
+ Assert.assertEquals(ComponentVerifierExtension.Result.Status.OK, result.getStatus());
+ }
+
+ @Test
+ public void testConnectivityError() throws Exception {
+ Component component = context().getComponent("undertow");
+ ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+ Map<String, Object> parameters = new HashMap<>();
+ parameters.put("httpURI", "http://no-host:" + getPort());
+
+ ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, parameters);
+
+ Assert.assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus());
+ Assert.assertEquals(1, result.getErrors().size());
+
+ ComponentVerifierExtension.VerificationError error = result.getErrors().get(0);
+
+ Assert.assertEquals(ComponentVerifierExtension.VerificationError.StandardCode.EXCEPTION, error.getCode());
+ Assert.assertTrue(error.getDetail(ComponentVerifierExtension.VerificationError.ExceptionAttribute.EXCEPTION_INSTANCE) instanceof UnresolvedAddressException);
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("undertow:http://localhost:{{port}}")
+ .process(e -> e.getOut().setBody("ok"));
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/42529399/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/SpringBootAutoConfigurationMojo.java
----------------------------------------------------------------------
diff --git a/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/SpringBootAutoConfigurationMojo.java b/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/SpringBootAutoConfigurationMojo.java
index c8ca459..23a2396 100644
--- a/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/SpringBootAutoConfigurationMojo.java
+++ b/connectors/camel-connector-maven-plugin/src/main/java/org/apache/camel/maven/connector/SpringBootAutoConfigurationMojo.java
@@ -211,7 +211,7 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo {
prefix += connectorScheme.toLowerCase(Locale.US);
for (OptionModel option : model.getComponentOptions()) {
- boolean isComponentOption= componentOptions != null && componentOptions.stream().anyMatch(o -> o.equals(option.getName()));
+ boolean isComponentOption = componentOptions != null && componentOptions.stream().anyMatch(o -> o.equals(option.getName()));
boolean isEndpointOption = endpointOptions != null && endpointOptions.stream().anyMatch(o -> o.equals(option.getName()));
// only include the options that has been explicit configured in the
http://git-wip-us.apache.org/repos/asf/camel/blob/42529399/connectors/camel-connector/src/main/java/org/apache/camel/component/connector/DefaultConnectorComponent.java
----------------------------------------------------------------------
diff --git a/connectors/camel-connector/src/main/java/org/apache/camel/component/connector/DefaultConnectorComponent.java b/connectors/camel-connector/src/main/java/org/apache/camel/component/connector/DefaultConnectorComponent.java
index 50d1407..d9f24eb 100644
--- a/connectors/camel-connector/src/main/java/org/apache/camel/component/connector/DefaultConnectorComponent.java
+++ b/connectors/camel-connector/src/main/java/org/apache/camel/component/connector/DefaultConnectorComponent.java
@@ -26,6 +26,7 @@ import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import org.apache.camel.CamelContext;
import org.apache.camel.Component;
@@ -36,9 +37,10 @@ import org.apache.camel.Processor;
import org.apache.camel.VerifiableComponent;
import org.apache.camel.catalog.CamelCatalog;
import org.apache.camel.catalog.DefaultCamelCatalog;
+import org.apache.camel.component.extension.ComponentVerifierExtension;
+import org.apache.camel.component.extension.verifier.ResultBuilder;
+import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
import org.apache.camel.impl.DefaultComponent;
-import org.apache.camel.impl.verifier.ResultBuilder;
-import org.apache.camel.impl.verifier.ResultErrorBuilder;
import org.apache.camel.util.IntrospectionSupport;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.URISupport;
@@ -83,6 +85,8 @@ public abstract class DefaultConnectorComponent extends DefaultComponent impleme
if (!catalog.findComponentNames().contains(componentScheme)) {
this.catalog.addComponent(componentScheme, this.model.getBaseJavaType(), catalog.componentJSonSchema(baseScheme));
}
+
+ registerExtension(this::getComponentVerifierExtension);
}
@Override
@@ -172,16 +176,20 @@ public abstract class DefaultConnectorComponent extends DefaultComponent impleme
this.options = Collections.unmodifiableMap(new HashMap<>(baseComponentOptions));
}
- @SuppressWarnings("unchecked")
@Override
public ComponentVerifier getVerifier() {
+ return (scope, parameters) -> getExtension(ComponentVerifierExtension.class).orElseThrow(UnsupportedOperationException::new).verify(scope, parameters);
+ }
+
+ private ComponentVerifierExtension getComponentVerifierExtension() {
try {
// Create the component but no need to add it to the camel context
// nor to start it.
final Component component = createNewBaseComponent();
+ final Optional<ComponentVerifierExtension> extension = component.getExtension(ComponentVerifierExtension.class);
- if (component instanceof VerifiableComponent) {
- return (scope, map) -> {
+ if (extension.isPresent()) {
+ return (ComponentVerifierExtension.Scope scope, Map<String, Object> map) -> {
Map<String, Object> options;
try {
@@ -192,18 +200,18 @@ public abstract class DefaultConnectorComponent extends DefaultComponent impleme
} catch (URISyntaxException | NoTypeConversionAvailableException e) {
// If a failure is detected while reading the catalog, wrap it
// and stop the validation step.
- return ResultBuilder.withStatusAndScope(ComponentVerifier.Result.Status.OK, scope)
+ return ResultBuilder.withStatusAndScope(ComponentVerifierExtension.Result.Status.OK, scope)
.error(ResultErrorBuilder.withException(e).build())
.build();
}
- return ((VerifiableComponent) component).getVerifier().verify(scope, options);
+ return extension.get().verify(scope, options);
};
} else {
return (scope, map) -> {
- return ResultBuilder.withStatusAndScope(ComponentVerifier.Result.Status.UNSUPPORTED, scope)
+ return ResultBuilder.withStatusAndScope(ComponentVerifierExtension.Result.Status.UNSUPPORTED, scope)
.error(
- ResultErrorBuilder.withCode(ComponentVerifier.VerificationError.StandardCode.UNSUPPORTED)
+ ResultErrorBuilder.withCode(ComponentVerifierExtension.VerificationError.StandardCode.UNSUPPORTED)
.detail("camel_connector_name", getConnectorName())
.detail("camel_component_name", getComponentName())
.build())
@@ -212,7 +220,7 @@ public abstract class DefaultConnectorComponent extends DefaultComponent impleme
}
} catch (Exception e) {
return (scope, map) -> {
- return ResultBuilder.withStatusAndScope(ComponentVerifier.Result.Status.OK, scope)
+ return ResultBuilder.withStatusAndScope(ComponentVerifierExtension.Result.Status.OK, scope)
.error(ResultErrorBuilder.withException(e).build())
.build();
};