[ 
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)

Reply via email to