2016-05-02 2 views
0

У нас есть сервер на базе OSGi, откуда мы используем встроенный причал для обработки webtraffic.
Я использую XmlConfiguration для создания экземпляра сервера причала, см. Код ниже.
configStream - это номер jetty-http.xml, который по умолчанию считается по умолчанию из нашего плагина или из пользовательского местоположения.Как включить https для причала с помощью XmlConfiguration?

Теперь я пытаюсь включить 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; 

ответ

0

Я нашел решение, см. Код ниже.
XmlConfiguration можно использовать для всех файлов XML, если два из них создают Server экземпляр (например, jetty.xml и jetty-ssl.xml), только один Server создаются и конфигурация/бобы добавлены к одному экземпляру.

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); 
Смежные вопросы