Following sutuation, if i add my default handler it gets picked up until the alias of an other context takes over. Then the default handler of Jetty takes over again e.g.
https://somehost/nonexistingcontext returns my default handler and
https://somehost/api/rest/existingcontext/nonexistingcontext returns the Jetty default handler (
https://somehost/api/rest/existingcontext hits my app). Where does this default handler come from? My bundle fragment Jetty XML:
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<!-- ========================================================== -->
<!-- Set connectors -->
<!-- ========================================================== -->
<!-- One of each type! -->
<!-- ========================================================== -->
<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Set name="secureScheme">https</Set>
<Set name="securePort">
<Property name="jetty.secure.port" default="8443"/>
</Set>
<Set name="securePort">
<Property name="jetty.secure.port" default="8444"/>
</Set>
<Set name="outputBufferSize">32768</Set>
<Set name="requestHeaderSize">8192</Set>
<Set name="responseHeaderSize">8192</Set>
<Set name="sendServerVersion">true</Set>
<Set name="sendDateHeader">false</Set>
<Set name="headerCacheSize">512</Set>
</New>
<!-- ========================================================== -->
<!-- Configure Authentication Realms -->
<!-- Realms may be configured for the entire server here, or -->
<!-- they can be configured for a specific web app in a context -->
<!-- configuration (see $(jetty.home)/contexts/test.xml for an -->
<!-- example). -->
<!-- ========================================================== -->
<Call name="addBean">
<Arg>
<New class="org.eclipse.jetty.jaas.JAASLoginService">
<Set name="name">karaf</Set>
<Set name="loginModuleName">karaf</Set>
<Set name="roleClassNames">
<Array type="java.lang.String">
<Item>org.apache.karaf.jaas.boot.principal.RolePrincipal
</Item>
</Array>
</Set>
</New>
</Arg>
</Call>
<Call name="addBean">
<Arg>
<New class="org.eclipse.jetty.jaas.JAASLoginService">
<Set name="name">default</Set>
<Set name="loginModuleName">karaf</Set>
<Set name="roleClassNames">
<Array type="java.lang.String">
<Item>org.apache.karaf.jaas.boot.principal.RolePrincipal
</Item>
</Array>
</Set>
</New>
</Arg>
</Call>
<!--<Call name="addBean">-->
<!--<Arg>-->
<!--<New class="eu.abeel.platform.http.paxweb.ErrorHandler"/>-->
<!--</Arg>-->
<!--</Call>-->
<Get name="handler">
<Call name="addHandler">
<Arg>
<New class="eu.abeel.platform.http.paxweb.DefaultHandler">
<Arg>
<Ref refid="Server"/>
</Arg>
</New>
</Arg>
</Call>
</Get>
<New id="lansslHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Arg>
<Ref refid="httpConfig"/>
</Arg>
<Call name="addCustomizer">
<Arg>
<New class="org.eclipse.jetty.server.SecureRequestCustomizer"/>
</Arg>
</Call>
</New>
<New id="wansslHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Arg>
<Ref refid="httpConfig"/>
</Arg>
<Call name="addCustomizer">
<Arg>
<New class="org.eclipse.jetty.server.SecureRequestCustomizer"/>
</Arg>
</Call>
</New>
<New id="lansslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
<Set name="KeyStorePath">
<SystemProperty name="karaf.home"/>/etc/somekeystore.jks
</Set>
<Set name="KeyStorePassword">xxx</Set>
<Set name="KeyManagerPassword">xxx</Set>
<Set name="EndpointIdentificationAlgorithm"></Set>
<Set name="NeedClientAuth">
<Property name="jetty.ssl.needClientAuth" default="false"/>
</Set>
<Set name="WantClientAuth">
<Property name="jetty.ssl.wantClientAuth" default="false"/>
</Set>
<!-- Disable SSLv3 to protect against POODLE bug -->
<Set name="ExcludeProtocols">
<Array type="java.lang.String">
<Item>SSLv3</Item>
</Array>
</Set>
</New>
<New id="wansslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
<Set name="KeyStorePath">
<SystemProperty name="karaf.home"/>/etc/secondkeystore.jks
</Set>
<Set name="KeyStorePassword">xxx</Set>
<Set name="KeyManagerPassword">xxx</Set>
<Set name="EndpointIdentificationAlgorithm"></Set>
<Set name="NeedClientAuth">
<Property name="jetty.ssl.needClientAuth" default="false"/>
</Set>
<Set name="WantClientAuth">
<Property name="jetty.ssl.wantClientAuth" default="false"/>
</Set>
<!-- Disable SSLv3 to protect against POODLE bug -->
<Set name="ExcludeProtocols">
<Array type="java.lang.String">
<Item>SSLv3</Item>
</Array>
</Set>
<Set name="ExcludeCipherSuites">
<Array type="String">
<Item>SSL_RSA_WITH_DES_CBC_SHA</Item>
<Item>SSL_DHE_RSA_WITH_DES_CBC_SHA</Item>
<Item>SSL_DHE_DSS_WITH_DES_CBC_SHA</Item>
<Item>SSL_RSA_EXPORT_WITH_RC4_40_MD5</Item>
<Item>SSL_RSA_EXPORT_WITH_DES40_CBC_SHA</Item>
<Item>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</Item>
<Item>SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</Item>
</Array>
</Set>
</New>
<Call id="lanhttpsConnector" name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.ServerConnector">
<Arg name="server">
<Ref refid="Server"/>
</Arg>
<Arg name="acceptors" type="int">
<Property name="ssl.acceptors" default="-1"/>
</Arg>
<Arg name="selectors" type="int">
<Property name="ssl.selectors" default="-1"/>
</Arg>
<Arg name="factories">
<Array type="org.eclipse.jetty.server.ConnectionFactory">
<Item>
<New class="org.eclipse.jetty.server.SslConnectionFactory">
<Arg name="next">http/1.1</Arg>
<Arg name="sslContextFactory">
<Ref refid="lansslContextFactory"/>
</Arg>
</New>
</Item>
<Item>
<New class="org.eclipse.jetty.server.HttpConnectionFactory">
<Arg name="config">
<Ref refid="lansslHttpConfig"/>
</Arg>
</New>
</Item>
</Array>
</Arg>
<Set name="name">127.0.0.1:8443</Set>
<Set name="host">
<Property name="jetty.host" default="127.0.0.1"/>
</Set>
<Set name="port">
<Property name="https.port" default="8443"/>
</Set>
<Set name="idleTimeout">
<Property name="https.timeout" default="30000"/>
</Set>
<Set name="soLingerTime">
<Property name="https.soLingerTime" default="-1"/>
</Set>
<Set name="acceptorPriorityDelta">
<Property name="ssl.acceptorPriorityDelta" default="0"/>
</Set>
<Set name="selectorPriorityDelta">
<Property name="ssl.selectorPriorityDelta" default="0"/>
</Set>
<Set name="acceptQueueSize">
<Property name="https.acceptQueueSize" default="0"/>
</Set>
</New>
</Arg>
</Call>
<Call id="wanhttpsConnector" name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.ServerConnector">
<Arg name="server">
<Ref refid="Server"/>
</Arg>
<Arg name="acceptors" type="int">
<Property name="ssl.acceptors" default="-1"/>
</Arg>
<Arg name="selectors" type="int">
<Property name="ssl.selectors" default="-1"/>
</Arg>
<Arg name="factories">
<Array type="org.eclipse.jetty.server.ConnectionFactory">
<Item>
<New class="org.eclipse.jetty.server.SslConnectionFactory">
<Arg name="next">http/1.1</Arg>
<Arg name="sslContextFactory">
<Ref refid="wansslContextFactory"/>
</Arg>
</New>
</Item>
<Item>
<New class="org.eclipse.jetty.server.HttpConnectionFactory">
<Arg name="config">
<Ref refid="wansslHttpConfig"/>
</Arg>
</New>
</Item>
</Array>
</Arg>
<Set name="name">127.0.0.1:8444</Set>
<Set name="host">
<Property name="jetty.host" default="127.0.0.1"/>
</Set>
<Set name="port">
<Property name="https.port" default="8444"/>
</Set>
<Set name="idleTimeout">
<Property name="https.timeout" default="30000"/>
</Set>
<Set name="soLingerTime">
<Property name="https.soLingerTime" default="-1"/>
</Set>
<Set name="acceptorPriorityDelta">
<Property name="ssl.acceptorPriorityDelta" default="0"/>
</Set>
<Set name="selectorPriorityDelta">
<Property name="ssl.selectorPriorityDelta" default="0"/>
</Set>
<Set name="acceptQueueSize">
<Property name="https.acceptQueueSize" default="0"/>
</Set>
</New>
</Arg>
</Call>
</Configure>
If i replace the handler collection i break pax web and cannot register further handlers:
<Set name="handler">
<New class="org.eclipse.jetty.server.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.eclipse.jetty.server.Handler">
<Item>
<New class="eu.abeel.platform.http.paxweb.DefaultHandler" />
</Item>
</Array>
</Set>
</New>
</Set>