2626import org .apache .logging .log4j .Logger ;
2727import org .eclipse .jetty .server .*;
2828import org .eclipse .jetty .server .handler .ContextHandler ;
29- import org .eclipse .jetty .server .handler .HandlerWrapper ;
30- import org .eclipse .jetty .servlet .ServletContextHandler ;
31- import org .eclipse .jetty .servlet .ServletHolder ;
29+ import org .eclipse .jetty .ee10 .servlet .ServletContextHandler ;
30+ import org .eclipse .jetty .ee10 .servlet .ServletHolder ;
3231import org .eclipse .jetty .util .Jetty ;
33- import org .eclipse .jetty .util .MultiException ;
3432import org .eclipse .jetty .util .component .LifeCycle ;
35- import org .eclipse .jetty .util .resource .PathResource ;
3633import org .eclipse .jetty .util .resource .Resource ;
34+ import org .eclipse .jetty .util .resource .ResourceFactory ;
3735import org .eclipse .jetty .xml .XmlConfiguration ;
3836import org .exist .SystemProperties ;
3937import org .exist .http .servlets .ExistExtensionServlet ;
6866/**
6967 * This class provides a main method to start Jetty with eXist. It registers shutdown
7068 * handlers to cleanly shut down the database and the webserver.
71- *
69+ *
7270 * @author wolf
7371 */
7472public class JettyStart extends Observable implements LifeCycle .Listener {
@@ -149,8 +147,6 @@ public synchronized void run(final boolean standalone) {
149147 return jettyPath ;
150148 });
151149
152- System .setProperty ("org.eclipse.jetty.util.log.class" , "org.eclipse.jetty.util.log.Slf4jLog" );
153-
154150 final Path jettyConfig ;
155151 if (standalone ) {
156152 jettyConfig = Paths .get (jettyProperty ).normalize ().resolve ("etc" ).resolve (Main .STANDALONE_ENABLED_JETTY_CONFIGS );
@@ -159,7 +155,7 @@ public synchronized void run(final boolean standalone) {
159155 }
160156 run (new String [] { jettyConfig .toAbsolutePath ().toString () }, null );
161157 }
162-
158+
163159 public synchronized void run (final String [] args , final Observer observer ) {
164160 if (args .length == 0 ) {
165161 logger .error ("No configuration file specified!" );
@@ -261,7 +257,7 @@ public synchronized void run(final String[] args, final Observer observer) {
261257 XmlConfiguration last = null ;
262258 for (final Path confFile : configFiles ) {
263259 logger .info ("[loading jetty configuration : {}]" , confFile .toString ());
264- final Resource resource = new PathResource (confFile );
260+ final Resource resource = ResourceFactory . root (). newResource (confFile );
265261 final XmlConfiguration configuration = new XmlConfiguration (resource );
266262 if (last != null ) {
267263 configuration .getIdMap ().putAll (last .getIdMap ());
@@ -303,7 +299,7 @@ public synchronized void run(final String[] args, final Observer observer) {
303299 allPorts .append (networkConnector .getLocalPort ());
304300 }
305301 }
306-
302+
307303 //*************************************************************
308304 final List <URI > serverUris = getSeverURIs (server );
309305 if (!serverUris .isEmpty ()) {
@@ -317,9 +313,9 @@ public synchronized void run(final String[] args, final Observer observer) {
317313 }
318314
319315 logger .info ("Configured contexts:" );
320- final LinkedHashSet <Handler > handlers = getAllHandlers (server .getHandler ());
316+ final List <Handler > handlers = getAllHandlers (server .getHandler ());
321317 for (final Handler handler : handlers ) {
322-
318+
323319 if (handler instanceof ContextHandler contextHandler ) {
324320 logger .info ("{} ({})" , contextHandler .getContextPath (), contextHandler .getDisplayName ());
325321 }
@@ -348,74 +344,53 @@ public synchronized void run(final String[] args, final Observer observer) {
348344
349345 setChanged ();
350346 notifyObservers (SIGNAL_STARTED );
351-
352- } catch (final MultiException e ) {
353-
354- // Mute the BindExceptions
355-
356- boolean hasBindException = false ;
357- for (final Throwable t : e .getThrowables ()) {
358- if (t instanceof java .net .BindException ) {
359- hasBindException = true ;
360- logger .error ("----------------------------------------------------------" );
361- logger .error ("ERROR: Could not bind to port because {}" , t .getMessage ());
362- logger .error (t .toString ());
363- logger .error ("----------------------------------------------------------" );
364- }
365- }
366347
367- // If it is another error, print stacktrace
368- if (!hasBindException ) {
369- e .printStackTrace ();
370- }
371- setChanged ();
372- notifyObservers (SIGNAL_ERROR );
373-
374348 } catch (final SocketException e ) {
375349 logger .error ("----------------------------------------------------------" );
376350 logger .error ("ERROR: Could not bind to port because {}" , e .getMessage ());
377351 logger .error (e .toString ());
378352 logger .error ("----------------------------------------------------------" );
379353 setChanged ();
380354 notifyObservers (SIGNAL_ERROR );
381-
355+
382356 } catch (final Exception e ) {
383- e .printStackTrace ();
357+ if (e instanceof java .net .BindException ) {
358+ logger .error ("----------------------------------------------------------" );
359+ logger .error ("ERROR: Could not bind to port because {}" , e .getMessage ());
360+ logger .error (e .toString ());
361+ logger .error ("----------------------------------------------------------" );
362+ } else {
363+ e .printStackTrace ();
364+ }
384365 setChanged ();
385366 notifyObservers (SIGNAL_ERROR );
386367 }
387368 }
388369
389- private LinkedHashSet <Handler > getAllHandlers (final Handler handler ) {
390- if (handler instanceof HandlerWrapper handlerWrapper ) {
391- final LinkedHashSet <Handler > handlers = new LinkedHashSet <>();
392- handlers .add (handlerWrapper );
393- if (handlerWrapper .getHandler () != null ) {
394- handlers .addAll (getAllHandlers (handlerWrapper .getHandler ()));
395- }
396- return handlers ;
370+ private List <Handler > getAllHandlers (final Handler handler ) {
371+ final List <Handler > handlers = new ArrayList <>();
372+ handlers .add (handler );
397373
398- } else if (handler instanceof HandlerContainer handlerContainer ) {
399- final LinkedHashSet <Handler > handlers = new LinkedHashSet <>();
400- handlers .add (handler );
401- for (final Handler childHandler : handlerContainer .getChildHandlers ()) {
374+ if (handler instanceof Handler .Wrapper wrapper ) {
375+ if (wrapper .getHandler () != null ) {
376+ handlers .addAll (getAllHandlers (wrapper .getHandler ()));
377+ }
378+ } else if (handler instanceof Handler .Container container ) {
379+ for (final Handler childHandler : container .getHandlers ()) {
402380 handlers .addAll (getAllHandlers (childHandler ));
403381 }
404- return handlers ;
405-
406- } else {
407- //assuming just Handler
408- final LinkedHashSet <Handler > handlers = new LinkedHashSet <>();
409- handlers .add (handler );
410- return handlers ;
411382 }
383+
384+ return handlers ;
412385 }
413386
414387 /**
415388 * See {@link Server#getURI()}
416389 */
417390 private List <URI > getSeverURIs (final Server server ) {
418- final ContextHandler context = server .getChildHandlerByClass (ContextHandler .class );
391+ final ContextHandler context = server .getHandler () instanceof Handler .Container container
392+ ? container .getDescendant (ContextHandler .class )
393+ : null ;
419394 return Arrays .stream (server .getConnectors ())
420395 .filter (connector -> connector instanceof NetworkConnector )
421396 .map (connector -> (NetworkConnector )connector )
@@ -438,9 +413,13 @@ private URI getURI(final NetworkConnector networkConnector, final ContextHandler
438413 }
439414
440415 String host = null ;
441- if (context != null && context .getVirtualHosts () != null && context .getVirtualHosts ().length > 0 ) {
442- host = context .getVirtualHosts ()[0 ];
443- } else {
416+ if (context != null ) {
417+ final List <String > virtualHosts = context .getVirtualHosts ();
418+ if (virtualHosts != null && !virtualHosts .isEmpty ()) {
419+ host = virtualHosts .getFirst ();
420+ }
421+ }
422+ if (host == null ) {
444423 host = networkConnector .getHost ();
445424 }
446425
@@ -562,9 +541,9 @@ public synchronized void shutdown() {
562541 logger .warn ("Unable to remove BrokerPoolsAndJetty.ShutdownHook hook: {}" , e .getMessage ());
563542 }
564543 });
565-
544+
566545 BrokerPool .stopAll (false );
567-
546+
568547 while (status != STATUS_STOPPED ) {
569548 try {
570549 wait ();
0 commit comments