CliConfigImpl config = new CliConfigImpl();
BufferedInputStream input = null;
try {
final XMLMapper mapper = XMLMapper.Factory.create();
mapper.registerRootElement(new QName(NS, JBOSS_CLI), new XMLElementReader<CliConfigImpl>(){
@Override
public void readElement(XMLExtendedStreamReader reader, CliConfigImpl config) throws XMLStreamException {
boolean jbossCliEnded = false;
while (reader.hasNext() && jbossCliEnded == false) {
int tag = reader.nextTag();
if(tag == XMLStreamConstants.START_ELEMENT) {
final String localName = reader.getLocalName();
if(localName.equals(DEFAULT_CONTROLLER)) {
readDefaultController(reader, config);
} else if(localName.equals(HISTORY)) {
readHistory(reader, config);
} else if (localName.equals("ssl")) {
SslConfig sslConfig = new SslConfig();
readSSLElement(reader, sslConfig);
config.sslConfig = sslConfig;
} else {
throw new XMLStreamException("Unexpected element: " + localName);
}
} else if(tag == XMLStreamConstants.END_ELEMENT) {
final String localName = reader.getLocalName();
if (localName.equals(JBOSS_CLI)) {
jbossCliEnded = true;
}
}
}
}
private void readDefaultController(XMLExtendedStreamReader reader, CliConfigImpl config) throws XMLStreamException {
while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
final String localName = reader.getLocalName();
final String resolved = resolveString(reader.getElementText());
if (HOST.equals(localName)) {
config.defaultControllerHost = resolved;
} else if (PORT.equals(localName)) {
try {
config.defaultControllerPort = Integer.parseInt(resolved);
} catch(NumberFormatException e) {
throw new XMLStreamException("Failed to parse " + DEFAULT_CONTROLLER + " " + PORT + " value '" + resolved + "'", e);
}
} else {
throw new XMLStreamException("Unexpected child of " + DEFAULT_CONTROLLER + ": " + localName);
}
}
}
private void readHistory(XMLExtendedStreamReader reader, CliConfigImpl config) throws XMLStreamException {
while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
final String localName = reader.getLocalName();
final String resolved = resolveString(reader.getElementText());
if (ENABLED.equals(localName)) {
config.historyEnabled = Boolean.parseBoolean(resolved);
} else if (FILE_NAME.equals(localName)) {
config.historyFileName = resolved;
} else if (FILE_DIR.equals(localName)) {
config.historyFileDir = resolved;
} else if (MAX_SIZE.equals(localName)) {
try {
config.historyMaxSize = Integer.parseInt(resolved);
} catch(NumberFormatException e) {
throw new XMLStreamException("Failed to parse " + HISTORY + " " + MAX_SIZE + " value '" + resolved + "'", e);
}
} else {
throw new XMLStreamException("Unexpected child of " + DEFAULT_CONTROLLER + ": " + localName);
}
}
}
public void readSSLElement(XMLExtendedStreamReader reader, SslConfig config) throws XMLStreamException {
while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
final String localName = reader.getLocalName();
if ("keyStore".equals(localName)) {
config.setKeyStore(reader.getElementText());
} else if ("keyStorePassword".equals(localName)) {
config.setKeyStorePassword(reader.getElementText());
} else if ("trustStore".equals(localName)) {
config.setTrustStore(reader.getElementText());
} else if ("trustStorePassword".equals(localName)) {
config.setTrustStorePassword(reader.getElementText());
} else if ("modifyTrustStore".equals(localName)) {
config.setModifyTrustStore(Boolean.getBoolean(reader.getElementText()));
}
}
}
});
FileInputStream is = new FileInputStream(f);
input = new BufferedInputStream(is);
XMLStreamReader streamReader = XMLInputFactory.newInstance().createXMLStreamReader(input);
mapper.parseDocument(config, streamReader);
streamReader.close();
} catch(Throwable t) {
throw new CliInitializationException("Failed to parse " + f.getAbsolutePath(), t);
} finally {
StreamUtils.safeClose(input);