如何使用 XmlConfiguration 为码头启用 https?
How to enable https for jetty using XmlConfiguration?
我们有一个基于 OSGi 的服务器,我们从那里使用嵌入式码头来处理网络流量。
我正在使用 XmlConfiguration
创建码头服务器实例,请参阅下面的代码。
configStream
来自 jetty-http.xml
,默认从我们的插件或自定义位置读取。
现在我正在尝试为服务器启用 https。我想加载 jetty-ssl.xml
和 jetty-https.xml
与 jetty-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.xml
和 jetty-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);
我们有一个基于 OSGi 的服务器,我们从那里使用嵌入式码头来处理网络流量。
我正在使用 XmlConfiguration
创建码头服务器实例,请参阅下面的代码。
configStream
来自 jetty-http.xml
,默认从我们的插件或自定义位置读取。
现在我正在尝试为服务器启用 https。我想加载 jetty-ssl.xml
和 jetty-https.xml
与 jetty-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.xml
和 jetty-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);