Thank you Claus for your input so far. I’ve updated the branch according to your suggestions (https://github.com/RovoMe/CamelMultipleJettyComponents/tree/rest-dsl) and solved the SSL issue therefore. However, on trying to include basic auth using the custom basic auth security handler I run into a StackOverflowException again (similar to the problem reported on 5. november, „StackOverflowError on configuring JettyHttpComponents with handlers for the same port“).
The configuration of the basic auth handler is not that different from your unit-test (https://svn.apache.org/repos/asf/camel/trunk/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpBasicAuthTest.java). Instead of registering the handler via a JNDI registry, Spring takes care of it. The service is also able to find the handler but fails after the handler finished his work. I had furthermore no success in finding a proper method in JettyHttpComponent to specify the handlers itself to avoid specifications of multiple handlers (although they all should be the same) for endpoints listening on the same port. If I comment out the .endpointProperty("handlers", "jettyAuthHandler“) statement inside the restConfiguration() segment of Route4 and use a further route (route1 in the sample scenario), which defines a jetty server using the following URL: rest.ssl.service1.path=jetty:https://localhost:8383/api/v1/service1?sslContextParameters=#sslContextParameters&handlers=#jettyAuthHandler&matchOnUriPrefix=true both services are able to use SSL and basic authentication. This issue seems to be very similar to the issue reported here (https://github.com/fabric8io/fabric8/issues/2094). I haven’t written proper unit-tests yet, but executing ServicesApp should start up the whole application and pointing your browser to https://localhost:8383/api/v1/service4 and using „admin“ as user as well as „secret“ as password should reproduce the following error: 2014-11-11 17:47:45 - [DEBUG] - received login request for user: 'admin' with credentials: 'secret'! [ ] [a.r.c.t.a.JettyBasicAuthAuthorizationHandler] [qtp139076452-36] 2014-11-11 17:47:45 - [DEBUG] - UserKey secret of User admin was successfully authenticated [ ] [a.r.c.t.a.JettyBasicAuthAuthorizationHandler] [qtp139076452-36] 2014-11-11 17:47:45 - [WARN ] - /api/v1/service4 [ ] [o.e.j.s.AbstractHttpConnection] [qtp139076452-36] java.lang.StackOverflowError: null at java.util.HashMap$KeyIterator.<init>(HashMap.java:954) ~[na:1.7.0_60] at java.util.HashMap.newKeyIterator(HashMap.java:968) ~[na:1.7.0_60] at java.util.HashMap$KeySet.iterator(HashMap.java:1002) ~[na:1.7.0_60] at java.util.HashSet.iterator(HashSet.java:170) ~[na:1.7.0_60] at java.util.Collections$UnmodifiableCollection$1.<init>(Collections.java:1064) ~[na:1.7.0_60] at java.util.Collections$UnmodifiableCollection.iterator(Collections.java:1063) ~[na:1.7.0_60] at org.eclipse.jetty.security.ConstraintSecurityHandler.prepareConstraintInfo(ConstraintSecurityHandler.java:656) ~[jetty-security-8.1.16.v20140903.jar:8.1.16.v20140903] at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:458) ~[jetty-security-8.1.16.v20140903.jar:8.1.16.v20140903] at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:522) ~[jetty-security-8.1.16.v20140903.jar:8.1.16.v20140903] at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:522) ~[jetty-security-8.1.16.v20140903.jar:8.1.16.v20140903] at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:522) ~[jetty-security-8.1.16.v20140903.jar:8.1.16.v20140903] at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:522) ~[jetty-security-8.1.16.v20140903.jar:8.1.16.v20140903] ... Kind regards, Roman Am 05.11.2014 um 11:37 schrieb Claus Ibsen <claus.ib...@gmail.com>: > Hi > > You can configure the jetty component regularly without the rest dsl, > and just refer to jetty as the component. Then the Rest DSL uses the > jetty with the security settings you have configured on it. > > And I think we have fixed the double ? in the uri in the upcoming > 2.14.1 release. > > On Wed, Nov 5, 2014 at 10:53 AM, Roman Vottner <r...@gmx.at> wrote: >> This is a repost of the nabble forum entry as my account was obviously not >> correctly verified at the time when I posted this issue (post has NOT been >> accepted …). >> >> In order to test the new REST feature in 2.14.0 I created a simple route >> class: >> >> public class RestTestRoute extends RouteBuilder { >> >> @Override >> public void configure() throws Exception { >> >> restConfiguration() >> .component("jetty") >> .port(8383) >> .scheme("https") >> .contextPath("/api/v1") >> .endpointProperty("sslKeystore", "/security/serverKey.jks") >> .endpointProperty("sslPassword", "keystorePW") >> .endpointProperty("sslKeyPassword", "jettyPW") >> // .componentProperty("sslContextParameters", >> "#sslContextParameters") >> .componentProperty("handlers", "#jettyAuthHandler"); >> >> rest("/service4") >> .get().route().log("Service4 GET request received").endRest() >> .post().route().log("Service4 POST request received").endRest() >> .delete().route().log("Service4 DELETE request >> received").endRest(); >> } >> } >> >> However, special-characters like "/" or ":" get replaced by "%2F" and "%3A" >> which cause a UnknownFormatConversionException: Conversion = 'F' in the >> primer case and a MissingFormatArgumentException: Format specifier '3A' in >> the latter case. As endpoint- or componentProperty only allows for string >> value declarations, I also tried to set Spring beans as used with a leading >> # before but without any success. >> >> If I leave out the sslKeystore stuff the example fails with a >> FileNotFoundException as it can't locate the keystore in my home-directory - >> which I have none. Though, I'd like to use the JKS located in the >> security-subfolder of my project. The documentation lacks a full example >> which showcases a bit more complex scenario. >> >> From debugging, I also figured out that the contextPath is not added on top >> of the "jetty:..." generated URL - is this only valid in servlet scenarios? >> Moreover, I'm a bit confused about the generated URL in JettyHttpComponent >> as it contains two '?' symbols: >> >> jetty:%s://%s:%s/%s?httpMethodRestrict=%s?sslPassword=keystorePW&sslKeyPassword=jettyPW&sslKeystore=%2Fsecurity%2FserverKey.jks >> >> A simple test-project setup can be gathered in rest-dsl branch on github: >> https://github.com/RovoMe/CamelMultipleJettyComponents/tree/rest-dsl >> >> Kind regards, >> >> Roman > > > > -- > Claus Ibsen > ----------------- > Red Hat, Inc. > Email: cib...@redhat.com > Twitter: davsclaus > Blog: http://davsclaus.com > Author of Camel in Action: http://www.manning.com/ibsen > hawtio: http://hawt.io/ > fabric8: http://fabric8.io/