如何使用 XmlConfiguration 为码头启用 https?

How to enable https for jetty using XmlConfiguration?

我们有一个基于 OSGi 的服务器,我们从那里使用嵌入式码头来处理网络流量。
我正在使用 XmlConfiguration 创建码头服务器实例,请参阅下面的代码。
configStream 来自 jetty-http.xml,默认从我们的插件或自定义位置读取。

现在我正在尝试为服务器启用 https。我想加载 jetty-ssl.xmljetty-https.xmljetty-http.xml 相同。

我该怎么做?我无法将另一个流加载到 XmlConfiguration.
有没有另一种方法,也许没有 XmlConfiguration?

XmlConfiguration xmlConfig = new XmlConfiguration(configStream);
Object root = xmlConfig.configure();
if (!(root instanceof Server)) {
    throw new IllegalArgumentException("expected a Server object as a root for server configuration"); //$NON-NLS-1$
}
server = (Server) root;

我找到了解决方案,请参见下面的代码。
XmlConfiguration 可用于所有 xml 个文件,如果其中两个创建一个 Server 实例(例如 jetty.xmljetty-ssl.xml),则只有一个 Server 被创建并且 configurations/beans 被添加到同一个实例。

List<String> configurations = new ArrayList<String>();
configurations.add("jetty.xml"); //$NON-NLS-1$

// use pre-configured jetty xml files to construct a server instance
if (System.getProperty("jetty.sslContext.keyStorePath") != null) { //$NON-NLS-1$
    configurations.add("jetty-ssl.xml"); //$NON-NLS-1$
    configurations.add("jetty-ssl-context.xml"); //$NON-NLS-1$
    configurations.add("jetty-https.xml"); //$NON-NLS-1$
} else {
    configurations.add("jetty-http.xml"); //$NON-NLS-1$
}

XmlConfiguration last = null;
List<Object> objects = new ArrayList<Object>();

for (String configFile : configurations) {
    InputStream configStream = null;

    File xmlConfiguration = new File(webserverHome, CONFIG_LOCATION + configFile);
    if (xmlConfiguration.exists()) {
        configStream = new FileInputStream(xmlConfiguration);
        logger.info("Using custom XML configuration {}", xmlConfiguration); //$NON-NLS-1$
    } else {
        // configStream = ... // read from bundle
        logger.info("Using default XML configuration {}/{}", Activator.PLUGIN_ID, CONFIG_LOCATION + configFile); //$NON-NLS-1$
    }

    XmlConfiguration configuration = new XmlConfiguration(configStream);
    if (last != null) {
        configuration.getIdMap().putAll(last.getIdMap());
    }
    objects.add(configuration.configure());
    last = configuration;
}

// first object is a Server instance because of the jetty.xml
server = (Server) objects.get(0);