Parse the server.xml configuration file. @param start true if parsing for start, false if parsing for stop
(boolean start)
| 646 | * @param start <code>true</code> if parsing for start, <code>false</code> if parsing for stop |
| 647 | */ |
| 648 | protected void parseServerXml(boolean start) { |
| 649 | // Set configuration source |
| 650 | ConfigFileLoader |
| 651 | .setSource(new CatalinaBaseConfigurationSource(Bootstrap.getCatalinaBaseFile(), getConfigFile())); |
| 652 | File file = configFile(); |
| 653 | |
| 654 | if (useGeneratedCode && !Digester.isGeneratedCodeLoaderSet()) { |
| 655 | // Load loader |
| 656 | String loaderClassName = generatedCodePackage + ".DigesterGeneratedCodeLoader"; |
| 657 | try { |
| 658 | Digester.GeneratedCodeLoader loader = (Digester.GeneratedCodeLoader) Catalina.class.getClassLoader() |
| 659 | .loadClass(loaderClassName).getDeclaredConstructor().newInstance(); |
| 660 | Digester.setGeneratedCodeLoader(loader); |
| 661 | } catch (Exception e) { |
| 662 | if (log.isDebugEnabled()) { |
| 663 | log.debug(sm.getString("catalina.noLoader", loaderClassName), e); |
| 664 | } else { |
| 665 | log.info(sm.getString("catalina.noLoader", loaderClassName)); |
| 666 | } |
| 667 | // No loader so don't use generated code |
| 668 | useGeneratedCode = false; |
| 669 | } |
| 670 | } |
| 671 | |
| 672 | // Init source location |
| 673 | File serverXmlLocation = null; |
| 674 | String xmlClassName = null; |
| 675 | if (generateCode || useGeneratedCode) { |
| 676 | xmlClassName = start ? generatedCodePackage + ".ServerXml" : generatedCodePackage + ".ServerXmlStop"; |
| 677 | } |
| 678 | if (generateCode) { |
| 679 | if (generatedCodeLocationParameter != null) { |
| 680 | generatedCodeLocation = new File(generatedCodeLocationParameter); |
| 681 | if (!generatedCodeLocation.isAbsolute()) { |
| 682 | generatedCodeLocation = new File(Bootstrap.getCatalinaHomeFile(), generatedCodeLocationParameter); |
| 683 | } |
| 684 | } else if (generatedCodeLocation == null) { |
| 685 | generatedCodeLocation = new File(Bootstrap.getCatalinaHomeFile(), "work"); |
| 686 | } |
| 687 | serverXmlLocation = new File(generatedCodeLocation, generatedCodePackage); |
| 688 | if (!serverXmlLocation.isDirectory() && !serverXmlLocation.mkdirs()) { |
| 689 | log.warn(sm.getString("catalina.generatedCodeLocationError", generatedCodeLocation.getAbsolutePath())); |
| 690 | // Disable code generation |
| 691 | generateCode = false; |
| 692 | } |
| 693 | } |
| 694 | |
| 695 | ServerXml serverXml = null; |
| 696 | if (useGeneratedCode) { |
| 697 | serverXml = (ServerXml) Digester.loadGeneratedClass(xmlClassName); |
| 698 | } |
| 699 | |
| 700 | if (serverXml != null) { |
| 701 | try { |
| 702 | serverXml.load(this); |
| 703 | } catch (Exception e) { |
| 704 | log.warn(sm.getString("catalina.configFail", "GeneratedCode"), e); |
| 705 | } |
no test coverage detected