[
https://issues.apache.org/jira/browse/CAMEL-12970?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
David Sharpe updated CAMEL-12970:
---------------------------------
Description:
In one of my RouteBuilders I instantiate and include some routes with
{{RouteBuilder::includeRoutes}}. When I run {{mvn camel:validate}}, these
routes generate the "Sending to non existing direct queue name" error. The
routes work though.
Here is the Route. I can make a smaller example, but I won't if I don't need to.
{code:java|title=HealthRoute.java}
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import javax.sql.DataSource;
import org.apache.camel.BeanInject;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.json.simple.JsonObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* An HTTP service that validates some application configuration properties. The
* validation status is returned as simply "true" or "false" with error messages
* printed to the log.
*/
public class HealthRoute extends RouteBuilder {
private static final String ROUTE_CHECK_SUBMIT_ASSESSMENTS_ENDPOINT =
"checkSubmitAssessmentsEndpoint";
private static final String ROUTE_CHECK_QUERY_ENDPOINT =
"checkQueryEndpoint";
private static final String DATABASE_REACHABLE = "isDatabaseReachable";
@BeanInject(value = "dataSource")
private DataSource dataSource;
private static final Logger LOGGER =
LoggerFactory.getLogger(HealthRoute1.class);
@Override
public void configure() throws Exception {
from("servlet:smoketest?servletName=HealthServlet")
.to("direct:" + ROUTE_CHECK_QUERY_ENDPOINT)
.to("direct:" + ROUTE_CHECK_SUBMIT_ASSESSMENTS_ENDPOINT)
.process(new CheckDatabaseConnection())
.process(exchange -> {
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("isQueryEndpointReachable",
exchange.getProperty(ROUTE_CHECK_QUERY_ENDPOINT));
hashMap.put("isSubmitAssessmentsEndpointReachable",
exchange.getProperty(ROUTE_CHECK_SUBMIT_ASSESSMENTS_ENDPOINT));
hashMap.put(DATABASE_REACHABLE,
exchange.getProperty(DATABASE_REACHABLE));
exchange.getIn().setBody(new JsonObject(hashMap).toJson());
})
.setHeader("Content-Type", constant("application/json"));
String queryHumanSubjectsUri =
getContext().resolvePropertyPlaceholders("{{queryHumanSubjectsUri}}").replaceAll("https?://",
"");
String submitExternalAssessmentsUri =
getContext().resolvePropertyPlaceholders("{{submitExternalAssessmentsUri}}").replaceAll("https?://",
"");
includeRoutes(new CheckEndpointRoute(ROUTE_CHECK_QUERY_ENDPOINT,
queryHumanSubjectsUri));
includeRoutes(new
CheckEndpointRoute(ROUTE_CHECK_SUBMIT_ASSESSMENTS_ENDPOINT,
submitExternalAssessmentsUri));
}
/**
* Smoke tests the availability of a given HTTP resource by issuing a GET
* request. If the request throws an exception an error flag is set on the
* Exchange.
*/
private static class CheckEndpointRoute extends RouteBuilder {
private final String routeId;
private final String uri;
public CheckEndpointRoute(String routeId, String uri) {
this.routeId = routeId;
this.uri = uri;
}
@Override
public void configure() throws Exception {
from("direct:" + routeId)
.doTry()
.to("https4:"
+ uri
+ "?sslContextParameters=#sslParameters"
+ "&bridgeEndpoint=true"
+ "&x509HostnameVerifier=#hostnameVerifier")
.setProperty(routeId, constant(true))
.doCatch(Exception.class)
.to("log:com.cgi.best.HealthRoute?level=ERROR&showCaughtException=true")
.setProperty(routeId, constant(false))
.end();
}
}
/**
* Smoke tests the availability of the database by executing a standard
* database health query.
*/
private class CheckDatabaseConnection implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
try (Connection connection = dataSource.getConnection()) {
connection.createStatement().execute("select * from dual");
exchange.setProperty(DATABASE_REACHABLE, true);
} catch (SQLException ex) {
LOGGER.error("Database test query failed.", ex);
exchange.setProperty(DATABASE_REACHABLE, false);
}
}
}
}
{code}
{code}
$ mvn camel:validate
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building BestAdapter 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- camel-maven-plugin:2.23.0:validate (default-cli) @ BestAdapter ---
[INFO] Detected Camel version used in project: 2.23.0
[INFO] Validating using Camel version: 2.23.0
[INFO] Endpoint validation success: (16 = passed, 0 = invalid, 2 = incapable, 0
= unknown components, 0 = deprecated options)
[INFO] Simple validation success: (3 = passed, 0 = invalid)
[WARNING] Endpoint pair (seda/direct) validation error at:
com.cgi.best.HealthRoute.configure(HealthRoute.java:45)
direct:checkQueryEndpoint
checkQueryEndpoint Sending to non existing
direct queue name
[WARNING] Endpoint pair (seda/direct) validation error at:
com.cgi.best.HealthRoute.configure(HealthRoute.java:45)
direct:checkSubmitAssessmentsEndpoint
checkSubmitAssessmentsEndpoint Sending to non
existing direct queue name
[WARNING] Endpoint pair (seda/direct) validation error at:
com.cgi.best.HealthRoute1.configure(HealthRoute1.java:45)
direct:checkQueryEndpoint
checkQueryEndpoint Sending to non existing
direct queue name
[WARNING] Endpoint pair (seda/direct) validation error at:
com.cgi.best.HealthRoute1.configure(HealthRoute1.java:45)
direct:checkSubmitAssessmentsEndpoint
checkSubmitAssessmentsEndpoint Sending to non
existing direct queue name
[WARNING] Endpoint pair (seda/direct) validation error: (2 = pairs, 4 =
non-pairs)
[INFO] Duplicate route id validation success (3 = ids)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.030 s
[INFO] Finished at: 2018-11-30T08:55:31-08:00
[INFO] Final Memory: 21M/398M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal
org.apache.camel:camel-maven-plugin:2.23.0:validate (default-cli) on project
BestAdapter: Endpoint validation success: (16 = passed, 0 = invalid, 2 =
incapable, 0 = unknown components, 0 = deprecated options)
[ERROR] Simple validation success: (3 = passed, 0 = invalid)
[ERROR] Duplicate route id validation success (3 = ids)
[ERROR] Endpoint pair (seda/direct) validation error: (2 = pairs, 4 = non-pairs)
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e
switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please
read the following articles:
[ERROR] [Help 1]
http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
{code}
was:
In one of my RouteBuilders I instantiate and include some routes with
`RouteBuilder::includeRoutes`. When I run `mvn camel:validate`, these routes
generate the "Sending to non existing direct queue name" error. The routes work
though.
Here is the Route. I can make a smaller example, but I won't if I don't need to.
{code:java|title=HealthRoute.java}
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import javax.sql.DataSource;
import org.apache.camel.BeanInject;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.json.simple.JsonObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* An HTTP service that validates some application configuration properties. The
* validation status is returned as simply "true" or "false" with error messages
* printed to the log.
*/
public class HealthRoute extends RouteBuilder {
private static final String ROUTE_CHECK_SUBMIT_ASSESSMENTS_ENDPOINT =
"checkSubmitAssessmentsEndpoint";
private static final String ROUTE_CHECK_QUERY_ENDPOINT =
"checkQueryEndpoint";
private static final String DATABASE_REACHABLE = "isDatabaseReachable";
@BeanInject(value = "dataSource")
private DataSource dataSource;
private static final Logger LOGGER =
LoggerFactory.getLogger(HealthRoute1.class);
@Override
public void configure() throws Exception {
from("servlet:smoketest?servletName=HealthServlet")
.to("direct:" + ROUTE_CHECK_QUERY_ENDPOINT)
.to("direct:" + ROUTE_CHECK_SUBMIT_ASSESSMENTS_ENDPOINT)
.process(new CheckDatabaseConnection())
.process(exchange -> {
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("isQueryEndpointReachable",
exchange.getProperty(ROUTE_CHECK_QUERY_ENDPOINT));
hashMap.put("isSubmitAssessmentsEndpointReachable",
exchange.getProperty(ROUTE_CHECK_SUBMIT_ASSESSMENTS_ENDPOINT));
hashMap.put(DATABASE_REACHABLE,
exchange.getProperty(DATABASE_REACHABLE));
exchange.getIn().setBody(new JsonObject(hashMap).toJson());
})
.setHeader("Content-Type", constant("application/json"));
String queryHumanSubjectsUri =
getContext().resolvePropertyPlaceholders("{{queryHumanSubjectsUri}}").replaceAll("https?://",
"");
String submitExternalAssessmentsUri =
getContext().resolvePropertyPlaceholders("{{submitExternalAssessmentsUri}}").replaceAll("https?://",
"");
includeRoutes(new CheckEndpointRoute(ROUTE_CHECK_QUERY_ENDPOINT,
queryHumanSubjectsUri));
includeRoutes(new
CheckEndpointRoute(ROUTE_CHECK_SUBMIT_ASSESSMENTS_ENDPOINT,
submitExternalAssessmentsUri));
}
/**
* Smoke tests the availability of a given HTTP resource by issuing a GET
* request. If the request throws an exception an error flag is set on the
* Exchange.
*/
private static class CheckEndpointRoute extends RouteBuilder {
private final String routeId;
private final String uri;
public CheckEndpointRoute(String routeId, String uri) {
this.routeId = routeId;
this.uri = uri;
}
@Override
public void configure() throws Exception {
from("direct:" + routeId)
.doTry()
.to("https4:"
+ uri
+ "?sslContextParameters=#sslParameters"
+ "&bridgeEndpoint=true"
+ "&x509HostnameVerifier=#hostnameVerifier")
.setProperty(routeId, constant(true))
.doCatch(Exception.class)
.to("log:com.cgi.best.HealthRoute?level=ERROR&showCaughtException=true")
.setProperty(routeId, constant(false))
.end();
}
}
/**
* Smoke tests the availability of the database by executing a standard
* database health query.
*/
private class CheckDatabaseConnection implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
try (Connection connection = dataSource.getConnection()) {
connection.createStatement().execute("select * from dual");
exchange.setProperty(DATABASE_REACHABLE, true);
} catch (SQLException ex) {
LOGGER.error("Database test query failed.", ex);
exchange.setProperty(DATABASE_REACHABLE, false);
}
}
}
}
{code}
{code}
$ mvn camel:validate
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building BestAdapter 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- camel-maven-plugin:2.23.0:validate (default-cli) @ BestAdapter ---
[INFO] Detected Camel version used in project: 2.23.0
[INFO] Validating using Camel version: 2.23.0
[INFO] Endpoint validation success: (16 = passed, 0 = invalid, 2 = incapable, 0
= unknown components, 0 = deprecated options)
[INFO] Simple validation success: (3 = passed, 0 = invalid)
[WARNING] Endpoint pair (seda/direct) validation error at:
com.cgi.best.HealthRoute.configure(HealthRoute.java:45)
direct:checkQueryEndpoint
checkQueryEndpoint Sending to non existing
direct queue name
[WARNING] Endpoint pair (seda/direct) validation error at:
com.cgi.best.HealthRoute.configure(HealthRoute.java:45)
direct:checkSubmitAssessmentsEndpoint
checkSubmitAssessmentsEndpoint Sending to non
existing direct queue name
[WARNING] Endpoint pair (seda/direct) validation error at:
com.cgi.best.HealthRoute1.configure(HealthRoute1.java:45)
direct:checkQueryEndpoint
checkQueryEndpoint Sending to non existing
direct queue name
[WARNING] Endpoint pair (seda/direct) validation error at:
com.cgi.best.HealthRoute1.configure(HealthRoute1.java:45)
direct:checkSubmitAssessmentsEndpoint
checkSubmitAssessmentsEndpoint Sending to non
existing direct queue name
[WARNING] Endpoint pair (seda/direct) validation error: (2 = pairs, 4 =
non-pairs)
[INFO] Duplicate route id validation success (3 = ids)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.030 s
[INFO] Finished at: 2018-11-30T08:55:31-08:00
[INFO] Final Memory: 21M/398M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal
org.apache.camel:camel-maven-plugin:2.23.0:validate (default-cli) on project
BestAdapter: Endpoint validation success: (16 = passed, 0 = invalid, 2 =
incapable, 0 = unknown components, 0 = deprecated options)
[ERROR] Simple validation success: (3 = passed, 0 = invalid)
[ERROR] Duplicate route id validation success (3 = ids)
[ERROR] Endpoint pair (seda/direct) validation error: (2 = pairs, 4 = non-pairs)
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e
switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please
read the following articles:
[ERROR] [Help 1]
http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
{code}
> Camel Maven Plugin: false postives with directOrSedaPairCheck
> -------------------------------------------------------------
>
> Key: CAMEL-12970
> URL: https://issues.apache.org/jira/browse/CAMEL-12970
> Project: Camel
> Issue Type: Bug
> Affects Versions: 2.23.0
> Reporter: David Sharpe
> Priority: Minor
> Labels: camel-maven-plugin
>
> In one of my RouteBuilders I instantiate and include some routes with
> {{RouteBuilder::includeRoutes}}. When I run {{mvn camel:validate}}, these
> routes generate the "Sending to non existing direct queue name" error. The
> routes work though.
> Here is the Route. I can make a smaller example, but I won't if I don't need
> to.
> {code:java|title=HealthRoute.java}
> import java.sql.Connection;
> import java.sql.SQLException;
> import java.util.HashMap;
> import javax.sql.DataSource;
> import org.apache.camel.BeanInject;
> import org.apache.camel.Exchange;
> import org.apache.camel.Processor;
> import org.apache.camel.builder.RouteBuilder;
> import org.apache.camel.json.simple.JsonObject;
> import org.slf4j.Logger;
> import org.slf4j.LoggerFactory;
> /**
> * An HTTP service that validates some application configuration properties.
> The
> * validation status is returned as simply "true" or "false" with error
> messages
> * printed to the log.
> */
> public class HealthRoute extends RouteBuilder {
> private static final String ROUTE_CHECK_SUBMIT_ASSESSMENTS_ENDPOINT =
> "checkSubmitAssessmentsEndpoint";
> private static final String ROUTE_CHECK_QUERY_ENDPOINT =
> "checkQueryEndpoint";
> private static final String DATABASE_REACHABLE = "isDatabaseReachable";
> @BeanInject(value = "dataSource")
> private DataSource dataSource;
> private static final Logger LOGGER =
> LoggerFactory.getLogger(HealthRoute1.class);
> @Override
> public void configure() throws Exception {
> from("servlet:smoketest?servletName=HealthServlet")
> .to("direct:" + ROUTE_CHECK_QUERY_ENDPOINT)
> .to("direct:" + ROUTE_CHECK_SUBMIT_ASSESSMENTS_ENDPOINT)
> .process(new CheckDatabaseConnection())
> .process(exchange -> {
> HashMap<String, Object> hashMap = new HashMap<>();
> hashMap.put("isQueryEndpointReachable",
> exchange.getProperty(ROUTE_CHECK_QUERY_ENDPOINT));
> hashMap.put("isSubmitAssessmentsEndpointReachable",
> exchange.getProperty(ROUTE_CHECK_SUBMIT_ASSESSMENTS_ENDPOINT));
> hashMap.put(DATABASE_REACHABLE,
> exchange.getProperty(DATABASE_REACHABLE));
> exchange.getIn().setBody(new
> JsonObject(hashMap).toJson());
> })
> .setHeader("Content-Type", constant("application/json"));
> String queryHumanSubjectsUri =
> getContext().resolvePropertyPlaceholders("{{queryHumanSubjectsUri}}").replaceAll("https?://",
> "");
> String submitExternalAssessmentsUri =
> getContext().resolvePropertyPlaceholders("{{submitExternalAssessmentsUri}}").replaceAll("https?://",
> "");
> includeRoutes(new CheckEndpointRoute(ROUTE_CHECK_QUERY_ENDPOINT,
> queryHumanSubjectsUri));
> includeRoutes(new
> CheckEndpointRoute(ROUTE_CHECK_SUBMIT_ASSESSMENTS_ENDPOINT,
> submitExternalAssessmentsUri));
> }
> /**
> * Smoke tests the availability of a given HTTP resource by issuing a GET
> * request. If the request throws an exception an error flag is set on the
> * Exchange.
> */
> private static class CheckEndpointRoute extends RouteBuilder {
> private final String routeId;
> private final String uri;
> public CheckEndpointRoute(String routeId, String uri) {
> this.routeId = routeId;
> this.uri = uri;
> }
> @Override
> public void configure() throws Exception {
> from("direct:" + routeId)
> .doTry()
> .to("https4:"
> + uri
> + "?sslContextParameters=#sslParameters"
> + "&bridgeEndpoint=true"
> + "&x509HostnameVerifier=#hostnameVerifier")
> .setProperty(routeId, constant(true))
> .doCatch(Exception.class)
>
> .to("log:com.cgi.best.HealthRoute?level=ERROR&showCaughtException=true")
> .setProperty(routeId, constant(false))
> .end();
> }
> }
> /**
> * Smoke tests the availability of the database by executing a standard
> * database health query.
> */
> private class CheckDatabaseConnection implements Processor {
> @Override
> public void process(Exchange exchange) throws Exception {
> try (Connection connection = dataSource.getConnection()) {
> connection.createStatement().execute("select * from dual");
> exchange.setProperty(DATABASE_REACHABLE, true);
> } catch (SQLException ex) {
> LOGGER.error("Database test query failed.", ex);
> exchange.setProperty(DATABASE_REACHABLE, false);
> }
> }
> }
> }
> {code}
> {code}
> $ mvn camel:validate
> [INFO] Scanning for projects...
> [INFO]
> [INFO]
> ------------------------------------------------------------------------
> [INFO] Building BestAdapter 1.0-SNAPSHOT
> [INFO]
> ------------------------------------------------------------------------
> [INFO]
> [INFO] --- camel-maven-plugin:2.23.0:validate (default-cli) @ BestAdapter ---
> [INFO] Detected Camel version used in project: 2.23.0
> [INFO] Validating using Camel version: 2.23.0
> [INFO] Endpoint validation success: (16 = passed, 0 = invalid, 2 = incapable,
> 0 = unknown components, 0 = deprecated options)
> [INFO] Simple validation success: (3 = passed, 0 = invalid)
> [WARNING] Endpoint pair (seda/direct) validation error at:
> com.cgi.best.HealthRoute.configure(HealthRoute.java:45)
> direct:checkQueryEndpoint
> checkQueryEndpoint Sending to non
> existing direct queue name
> [WARNING] Endpoint pair (seda/direct) validation error at:
> com.cgi.best.HealthRoute.configure(HealthRoute.java:45)
> direct:checkSubmitAssessmentsEndpoint
> checkSubmitAssessmentsEndpoint Sending to
> non existing direct queue name
> [WARNING] Endpoint pair (seda/direct) validation error at:
> com.cgi.best.HealthRoute1.configure(HealthRoute1.java:45)
> direct:checkQueryEndpoint
> checkQueryEndpoint Sending to non
> existing direct queue name
> [WARNING] Endpoint pair (seda/direct) validation error at:
> com.cgi.best.HealthRoute1.configure(HealthRoute1.java:45)
> direct:checkSubmitAssessmentsEndpoint
> checkSubmitAssessmentsEndpoint Sending to
> non existing direct queue name
> [WARNING] Endpoint pair (seda/direct) validation error: (2 = pairs, 4 =
> non-pairs)
> [INFO] Duplicate route id validation success (3 = ids)
> [INFO]
> ------------------------------------------------------------------------
> [INFO] BUILD FAILURE
> [INFO]
> ------------------------------------------------------------------------
> [INFO] Total time: 3.030 s
> [INFO] Finished at: 2018-11-30T08:55:31-08:00
> [INFO] Final Memory: 21M/398M
> [INFO]
> ------------------------------------------------------------------------
> [ERROR] Failed to execute goal
> org.apache.camel:camel-maven-plugin:2.23.0:validate (default-cli) on project
> BestAdapter: Endpoint validation success: (16 = passed, 0 = invalid, 2 =
> incapable, 0 = unknown components, 0 = deprecated options)
> [ERROR] Simple validation success: (3 = passed, 0 = invalid)
> [ERROR] Duplicate route id validation success (3 = ids)
> [ERROR] Endpoint pair (seda/direct) validation error: (2 = pairs, 4 =
> non-pairs)
> [ERROR] -> [Help 1]
> [ERROR]
> [ERROR] To see the full stack trace of the errors, re-run Maven with the -e
> switch.
> [ERROR] Re-run Maven using the -X switch to enable full debug logging.
> [ERROR]
> [ERROR] For more information about the errors and possible solutions, please
> read the following articles:
> [ERROR] [Help 1]
> http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)