CLOUDSTACK-1535: kvm agent will silently ignore many exceptions

Current kvm agent will silently ignore many exception, and there's no
way to see what really happened. This patch will log in trace level log
that was silently ignored. And also, it will fix huge bare Exception
catch, which is very harmful because it also catches RuntimeException.
This commit is contained in:
Hiroaki Kawai 2013-03-06 10:22:44 -08:00 committed by Edison Su
parent a4521551a3
commit 19c6d8054b
4 changed files with 97 additions and 109 deletions

View File

@ -859,8 +859,7 @@ public class VirtualRoutingResource implements Manager {
} }
public void assignVpcIpToRouter(final String routerIP, final boolean add, final String pubIP, public void assignVpcIpToRouter(final String routerIP, final boolean add, final String pubIP,
final String nicname, final String gateway, final String netmask, final String subnet) throws Exception { final String nicname, final String gateway, final String netmask, final String subnet) throws InternalErrorException {
try {
String args = ""; String args = "";
if (add) { if (add) {
@ -884,11 +883,6 @@ public class VirtualRoutingResource implements Manager {
if (result != null) { if (result != null) {
throw new InternalErrorException("KVM plugin \"vpc_ipassoc\" failed:"+result); throw new InternalErrorException("KVM plugin \"vpc_ipassoc\" failed:"+result);
} }
} catch (Exception e) {
String msg = "Unable to assign public IP address due to " + e.toString();
s_logger.warn(msg, e);
throw new Exception(msg);
}
} }
private SetStaticRouteAnswer execute(SetStaticRouteCommand cmd) { private SetStaticRouteAnswer execute(SetStaticRouteCommand cmd) {

View File

@ -23,6 +23,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import org.apache.log4j.Logger;
import org.libvirt.LibvirtException; import org.libvirt.LibvirtException;
import org.libvirt.StoragePool; import org.libvirt.StoragePool;
import org.libvirt.StoragePoolInfo; import org.libvirt.StoragePoolInfo;
@ -33,6 +34,7 @@ import com.cloud.utils.script.OutputInterpreter.AllLinesParser;
import com.cloud.utils.script.Script; import com.cloud.utils.script.Script;
public class KVMHABase { public class KVMHABase {
private static final Logger s_logger = Logger.getLogger(KVMHABase.class);
private long _timeout = 60000; /* 1 minutes */ private long _timeout = 60000; /* 1 minutes */
protected static String _heartBeatPath; protected static String _heartBeatPath;
protected long _heartBeatUpdateTimeout = 60000; protected long _heartBeatUpdateTimeout = 60000;
@ -124,14 +126,14 @@ public class KVMHABase {
} }
poolName = pool.getName(); poolName = pool.getName();
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.debug("Ignoring libvirt error.", e);
} finally { } finally {
try { try {
if (pool != null) { if (pool != null) {
pool.free(); pool.free();
} }
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.debug("Ignoring libvirt error.", e);
} }
} }

View File

@ -692,7 +692,7 @@ ServerResource {
_hvVersion = conn.getVersion(); _hvVersion = conn.getVersion();
_hvVersion = (_hvVersion % 1000000) / 1000; _hvVersion = (_hvVersion % 1000000) / 1000;
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
} }
String[] info = NetUtils.getNetworkParams(_privateNic); String[] info = NetUtils.getNetworkParams(_privateNic);
@ -764,8 +764,8 @@ ServerResource {
if (tokens.length == 2) { if (tokens.length == 2) {
try { try {
_migrateSpeed = Integer.parseInt(tokens[0]); _migrateSpeed = Integer.parseInt(tokens[0]);
} catch (Exception e) { } catch (NumberFormatException e) {
s_logger.trace("Ignoring migrateSpeed extraction error.", e);
} }
s_logger.debug("device " + _pifs.get("public") + " has speed: " + String.valueOf(_migrateSpeed)); s_logger.debug("device " + _pifs.get("public") + " has speed: " + String.valueOf(_migrateSpeed));
} }
@ -846,8 +846,8 @@ ServerResource {
throw new ConfigurationException("Unable to find class for libvirt.vif.driver " + e); throw new ConfigurationException("Unable to find class for libvirt.vif.driver " + e);
} catch (InstantiationException e) { } catch (InstantiationException e) {
throw new ConfigurationException("Unable to instantiate class for libvirt.vif.driver " + e); throw new ConfigurationException("Unable to instantiate class for libvirt.vif.driver " + e);
} catch (Exception e) { } catch (IllegalAccessException e) {
throw new ConfigurationException("Failed to initialize libvirt.vif.driver " + e); throw new ConfigurationException("Unable to instantiate class for libvirt.vif.driver " + e);
} }
return vifDriver; return vifDriver;
} }
@ -1043,7 +1043,6 @@ ServerResource {
protected String startVM(Connect conn, String vmName, String domainXML) protected String startVM(Connect conn, String vmName, String domainXML)
throws LibvirtException, InternalErrorException { throws LibvirtException, InternalErrorException {
Domain dm = null;
try { try {
/* /*
We create a transient domain here. When this method gets We create a transient domain here. When this method gets
@ -1053,12 +1052,11 @@ ServerResource {
This also makes sure we never have any old "garbage" defined This also makes sure we never have any old "garbage" defined
in libvirt which might haunt us. in libvirt which might haunt us.
*/ */
dm = conn.domainCreateXML(domainXML, 0); conn.domainCreateXML(domainXML, 0);
} catch (final LibvirtException e) { } catch (final LibvirtException e) {
s_logger.warn("Failed to start domain " + vmName + ": " s_logger.warn("Failed to start domain " + vmName + ": "
+ e.getMessage()); + e.getMessage(), e);
} }
return null; return null;
} }
@ -1068,6 +1066,7 @@ ServerResource {
Connect conn = LibvirtConnection.getConnection(); Connect conn = LibvirtConnection.getConnection();
conn.close(); conn.close();
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
} }
return true; return true;
@ -1516,11 +1515,10 @@ ServerResource {
} }
private PlugNicAnswer execute(PlugNicCommand cmd) { private PlugNicAnswer execute(PlugNicCommand cmd) {
Connect conn;
NicTO nic = cmd.getNic(); NicTO nic = cmd.getNic();
String vmName = cmd.getVmName(); String vmName = cmd.getVmName();
try { try {
conn = LibvirtConnection.getConnection(); Connect conn = LibvirtConnection.getConnection();
Domain vm = getDomain(conn, vmName); Domain vm = getDomain(conn, vmName);
List<InterfaceDef> pluggedNics = getInterfaces(conn, vmName); List<InterfaceDef> pluggedNics = getInterfaces(conn, vmName);
Integer nicnum = 0; Integer nicnum = 0;
@ -1533,7 +1531,11 @@ ServerResource {
} }
vm.attachDevice(getVifDriver(nic.getType()).plug(nic, "Other PV (32-bit)").toString()); vm.attachDevice(getVifDriver(nic.getType()).plug(nic, "Other PV (32-bit)").toString());
return new PlugNicAnswer(cmd, true, "success"); return new PlugNicAnswer(cmd, true, "success");
} catch (Exception e) { } catch (LibvirtException e) {
String msg = " Plug Nic failed due to " + e.toString();
s_logger.warn(msg, e);
return new PlugNicAnswer(cmd, false, msg);
} catch (InternalErrorException e) {
String msg = " Plug Nic failed due to " + e.toString(); String msg = " Plug Nic failed due to " + e.toString();
s_logger.warn(msg, e); s_logger.warn(msg, e);
return new PlugNicAnswer(cmd, false, msg); return new PlugNicAnswer(cmd, false, msg);
@ -1555,7 +1557,7 @@ ServerResource {
} }
} }
return new UnPlugNicAnswer(cmd, true, "success"); return new UnPlugNicAnswer(cmd, true, "success");
} catch (Exception e) { } catch (LibvirtException e) {
String msg = " Unplug Nic failed due to " + e.toString(); String msg = " Unplug Nic failed due to " + e.toString();
s_logger.warn(msg, e); s_logger.warn(msg, e);
return new UnPlugNicAnswer(cmd, false, msg); return new UnPlugNicAnswer(cmd, false, msg);
@ -1609,7 +1611,7 @@ ServerResource {
return new SetupGuestNetworkAnswer(cmd, false, "Creating guest network failed due to " + result); return new SetupGuestNetworkAnswer(cmd, false, "Creating guest network failed due to " + result);
} }
return new SetupGuestNetworkAnswer(cmd, true, "success"); return new SetupGuestNetworkAnswer(cmd, true, "success");
} catch (Exception e) { } catch (LibvirtException e) {
String msg = "Creating guest network failed due to " + e.toString(); String msg = "Creating guest network failed due to " + e.toString();
s_logger.warn(msg, e); s_logger.warn(msg, e);
return new SetupGuestNetworkAnswer(cmd, false, msg); return new SetupGuestNetworkAnswer(cmd, false, msg);
@ -1649,7 +1651,7 @@ ServerResource {
} }
return new SetNetworkACLAnswer(cmd, true, results); return new SetNetworkACLAnswer(cmd, true, results);
} catch (Exception e) { } catch (LibvirtException e) {
String msg = "SetNetworkACL failed due to " + e.toString(); String msg = "SetNetworkACL failed due to " + e.toString();
s_logger.error(msg, e); s_logger.error(msg, e);
return new SetNetworkACLAnswer(cmd, false, results); return new SetNetworkACLAnswer(cmd, false, results);
@ -1694,7 +1696,7 @@ ServerResource {
return new SetSourceNatAnswer(cmd, false, "KVM plugin \"vpc_snat\" failed:"+result); return new SetSourceNatAnswer(cmd, false, "KVM plugin \"vpc_snat\" failed:"+result);
} }
return new SetSourceNatAnswer(cmd, true, "success"); return new SetSourceNatAnswer(cmd, true, "success");
} catch (Exception e) { } catch (LibvirtException e) {
String msg = "Ip SNAT failure due to " + e.toString(); String msg = "Ip SNAT failure due to " + e.toString();
s_logger.error(msg, e); s_logger.error(msg, e);
return new SetSourceNatAnswer(cmd, false, msg); return new SetSourceNatAnswer(cmd, false, msg);
@ -1739,7 +1741,10 @@ ServerResource {
results[i++] = ip.getPublicIp() + " - success"; results[i++] = ip.getPublicIp() + " - success";
} }
} catch (Exception e) { } catch (LibvirtException e) {
s_logger.error("Ip Assoc failure on applying one ip due to exception: ", e);
results[i++] = IpAssocAnswer.errorResult;
} catch (InternalErrorException e) {
s_logger.error("Ip Assoc failure on applying one ip due to exception: ", e); s_logger.error("Ip Assoc failure on applying one ip due to exception: ", e);
results[i++] = IpAssocAnswer.errorResult; results[i++] = IpAssocAnswer.errorResult;
} }
@ -1819,7 +1824,7 @@ ServerResource {
vm = getDomain(conn, cmd.getVmName()); vm = getDomain(conn, cmd.getVmName());
state = vm.getInfo().state; state = vm.getInfo().state;
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
} }
} }
@ -1938,7 +1943,7 @@ ServerResource {
vm = getDomain(conn, cmd.getVmName()); vm = getDomain(conn, cmd.getVmName());
state = vm.getInfo().state; state = vm.getInfo().state;
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
} }
} }
@ -2380,7 +2385,7 @@ ServerResource {
Connect conn = LibvirtConnection.getConnection(); Connect conn = LibvirtConnection.getConnection();
Integer vncPort = getVncPort(conn, cmd.getName()); Integer vncPort = getVncPort(conn, cmd.getName());
return new GetVncPortAnswer(cmd, _privateIp, 5900 + vncPort); return new GetVncPortAnswer(cmd, _privateIp, 5900 + vncPort);
} catch (Exception e) { } catch (LibvirtException e) {
return new GetVncPortAnswer(cmd, e.toString()); return new GetVncPortAnswer(cmd, e.toString());
} }
} }
@ -2501,16 +2506,13 @@ ServerResource {
} catch (final LibvirtException e) { } catch (final LibvirtException e) {
s_logger.warn("Can't get vm state " + vmName + e.getMessage() s_logger.warn("Can't get vm state " + vmName + e.getMessage()
+ "retry:" + retry); + "retry:" + retry);
} catch (Exception e) {
s_logger.warn("Can't get vm state " + vmName + e.getMessage()
+ "retry:" + retry);
} finally { } finally {
try { try {
if (vms != null) { if (vms != null) {
vms.free(); vms.free();
} }
} catch (final LibvirtException e) { } catch (final LibvirtException l) {
s_logger.trace("Ignoring libvirt error.", l);
} }
} }
} }
@ -2603,9 +2605,6 @@ ServerResource {
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.debug("Can't migrate domain: " + e.getMessage()); s_logger.debug("Can't migrate domain: " + e.getMessage());
result = e.getMessage(); result = e.getMessage();
} catch (Exception e) {
s_logger.debug("Can't migrate domain: " + e.getMessage());
result = e.getMessage();
} finally { } finally {
try { try {
if (dm != null) { if (dm != null) {
@ -2618,7 +2617,7 @@ ServerResource {
destDomain.free(); destDomain.free();
} }
} catch (final LibvirtException e) { } catch (final LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
} }
} }
@ -2795,8 +2794,8 @@ ServerResource {
Integer vncPort = null; Integer vncPort = null;
try { try {
vncPort = getVncPort(conn, cmd.getVmName()); vncPort = getVncPort(conn, cmd.getVmName());
} catch (Exception e) { } catch (LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
} }
get_rule_logs_for_vms(); get_rule_logs_for_vms();
return new RebootAnswer(cmd, null, vncPort); return new RebootAnswer(cmd, null, vncPort);
@ -3124,8 +3123,20 @@ ServerResource {
state = State.Running; state = State.Running;
return new StartAnswer(cmd); return new StartAnswer(cmd);
} catch (Exception e) { } catch (LibvirtException e) {
s_logger.warn("Exception ", e); s_logger.warn("LibvirtException ", e);
if (conn != null) {
handleVmStartFailure(conn, vmName, vm);
}
return new StartAnswer(cmd, e.getMessage());
} catch (InternalErrorException e) {
s_logger.warn("InternalErrorException ", e);
if (conn != null) {
handleVmStartFailure(conn, vmName, vm);
}
return new StartAnswer(cmd, e.getMessage());
} catch (URISyntaxException e) {
s_logger.warn("URISyntaxException ", e);
if (conn != null) { if (conn != null) {
handleVmStartFailure(conn, vmName, vm); handleVmStartFailure(conn, vmName, vm);
} }
@ -3325,15 +3336,11 @@ ServerResource {
s_logger.debug("Ping command port, " + privateIp + ":" + cmdPort); s_logger.debug("Ping command port, " + privateIp + ":" + cmdPort);
} }
try {
String result = _virtRouterResource.connect(privateIp, cmdPort); String result = _virtRouterResource.connect(privateIp, cmdPort);
if (result != null) { if (result != null) {
return new CheckSshAnswer(cmd, "Can not ping System vm " return new CheckSshAnswer(cmd, "Can not ping System vm "
+ vmName + "due to:" + result); + vmName + "due to:" + result);
} }
} catch (Exception e) {
return new CheckSshAnswer(cmd, e);
}
if (s_logger.isDebugEnabled()) { if (s_logger.isDebugEnabled()) {
s_logger.debug("Ping command port succeeded for vm " + vmName); s_logger.debug("Ping command port succeeded for vm " + vmName);
@ -3479,14 +3486,12 @@ ServerResource {
+ e.getMessage()); + e.getMessage());
} }
throw e; throw e;
} catch (Exception e) {
throw new InternalErrorException(e.toString());
} finally { } finally {
if (dm != null) { if (dm != null) {
try { try {
dm.free(); dm.free();
} catch (LibvirtException l) { } catch (LibvirtException l) {
s_logger.trace("Ignoring libvirt error.", l);
} }
} }
} }
@ -3704,22 +3709,21 @@ ServerResource {
return convertToState(vps); return convertToState(vps);
} }
} catch (final LibvirtException e) { } catch (final LibvirtException e) {
s_logger.trace(e.getMessage()); s_logger.trace("Ignoring libvirt error.", e);
} catch (Exception e) {
s_logger.trace(e.getMessage());
} finally { } finally {
try { try {
if (dm != null) { if (dm != null) {
dm.free(); dm.free();
} }
} catch (final LibvirtException e) { } catch (final LibvirtException l) {
s_logger.trace("Ignoring libvirt error.", l);
} }
} }
try { try {
Thread.sleep(1000); Thread.sleep(1000);
} catch (InterruptedException e) { } catch (InterruptedException e) {
s_logger.trace("Ignoring InterruptedException.", e);
} }
} }
return State.Stopped; return State.Stopped;
@ -3757,7 +3761,7 @@ ServerResource {
dm.free(); dm.free();
} }
} catch (final LibvirtException e) { } catch (final LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
} }
} }
} }
@ -3812,7 +3816,7 @@ ServerResource {
dm.free(); dm.free();
} }
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
} }
} }
} }
@ -3832,15 +3836,13 @@ ServerResource {
vmStates.put(vmName, state); vmStates.put(vmName, state);
} catch (final LibvirtException e) { } catch (final LibvirtException e) {
s_logger.warn("Unable to get vms", e); s_logger.warn("Unable to get vms", e);
} catch (Exception e) {
s_logger.warn("Unable to get vms", e);
} finally { } finally {
try { try {
if (dm != null) { if (dm != null) {
dm.free(); dm.free();
} }
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
} }
} }
} }
@ -3891,7 +3893,7 @@ ServerResource {
} }
} }
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
} }
if (isSnapshotSupported()) { if (isSnapshotSupported()) {
@ -3938,7 +3940,7 @@ ServerResource {
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.warn("Failed to create vm", e); s_logger.warn("Failed to create vm", e);
msg = e.getMessage(); msg = e.getMessage();
} catch (Exception e) { } catch (InternalErrorException e) {
s_logger.warn("Failed to create vm", e); s_logger.warn("Failed to create vm", e);
msg = e.getMessage(); msg = e.getMessage();
} finally { } finally {
@ -3947,7 +3949,7 @@ ServerResource {
dm.free(); dm.free();
} }
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
} }
} }
@ -3977,15 +3979,13 @@ ServerResource {
break; break;
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.debug("Failed to get vm status:" + e.getMessage()); s_logger.debug("Failed to get vm status:" + e.getMessage());
} catch (Exception e) {
s_logger.debug("Failed to get vm status:" + e.getMessage());
} finally { } finally {
try { try {
if (dm != null) { if (dm != null) {
dm.free(); dm.free();
} }
} catch (LibvirtException l) { } catch (LibvirtException l) {
s_logger.trace("Ignoring libvirt error.", l);
} }
} }
} }
@ -4040,15 +4040,13 @@ ServerResource {
} catch (InterruptedException ie) { } catch (InterruptedException ie) {
s_logger.debug("Interrupted sleep"); s_logger.debug("Interrupted sleep");
return ie.getMessage(); return ie.getMessage();
} catch (Exception e) {
s_logger.debug("Failed to stop VM :" + vmName + " :", e);
return e.getMessage();
} finally { } finally {
try { try {
if (dm != null) { if (dm != null) {
dm.free(); dm.free();
} }
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
} }
} }
@ -4094,7 +4092,7 @@ ServerResource {
dm.free(); dm.free();
} }
} catch (LibvirtException l) { } catch (LibvirtException l) {
s_logger.trace("Ignoring libvirt error.", l);
} }
} }
} }
@ -4110,7 +4108,7 @@ ServerResource {
} }
} }
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
} }
return false; return false;
} }
@ -4135,8 +4133,7 @@ ServerResource {
parser.parseDomainXML(xmlDesc); parser.parseDomainXML(xmlDesc);
return parser.getDescription(); return parser.getDescription();
} catch (LibvirtException e) { } catch (LibvirtException e) {
return null; s_logger.trace("Ignoring libvirt error.", e);
} catch (Exception e) {
return null; return null;
} finally { } finally {
try { try {
@ -4144,7 +4141,7 @@ ServerResource {
dm.free(); dm.free();
} }
} catch (LibvirtException l) { } catch (LibvirtException l) {
s_logger.trace("Ignoring libvirt error.", l);
} }
} }
} }
@ -4242,16 +4239,13 @@ ServerResource {
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.debug("Failed to get dom xml: " + e.toString()); s_logger.debug("Failed to get dom xml: " + e.toString());
return new ArrayList<InterfaceDef>(); return new ArrayList<InterfaceDef>();
} catch (Exception e) {
s_logger.debug("Failed to get dom xml: " + e.toString());
return new ArrayList<InterfaceDef>();
} finally { } finally {
try { try {
if (dm != null) { if (dm != null) {
dm.free(); dm.free();
} }
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
} }
} }
} }
@ -4268,16 +4262,13 @@ ServerResource {
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.debug("Failed to get dom xml: " + e.toString()); s_logger.debug("Failed to get dom xml: " + e.toString());
return new ArrayList<DiskDef>(); return new ArrayList<DiskDef>();
} catch (Exception e) {
s_logger.debug("Failed to get dom xml: " + e.toString());
return new ArrayList<DiskDef>();
} finally { } finally {
try { try {
if (dm != null) { if (dm != null) {
dm.free(); dm.free();
} }
} catch (LibvirtException e) { } catch (LibvirtException e) {
s_logger.trace("Ignoring libvirt error.", e);
} }
} }
} }
@ -4625,8 +4616,7 @@ ServerResource {
conn = LibvirtConnection.getConnection(); conn = LibvirtConnection.getConnection();
success = default_network_rules_for_systemvm(conn, cmd.getVmName()); success = default_network_rules_for_systemvm(conn, cmd.getVmName());
} catch (LibvirtException e) { } catch (LibvirtException e) {
// TODO Auto-generated catch block s_logger.trace("Ignoring libvirt error.", e);
e.printStackTrace();
} }
return new Answer(cmd, success, ""); return new Answer(cmd, success, "");

View File

@ -19,6 +19,7 @@ package com.cloud.hypervisor.kvm.resource;
import java.io.IOException; import java.io.IOException;
import java.io.StringReader; import java.io.StringReader;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.SAXParserFactory;
@ -40,13 +41,14 @@ public class LibvirtXMLParser extends DefaultHandler {
protected boolean _initialized = false; protected boolean _initialized = false;
public LibvirtXMLParser() { public LibvirtXMLParser() {
try { try {
_sp = s_spf.newSAXParser(); _sp = s_spf.newSAXParser();
_initialized = true; _initialized = true;
} catch (Exception ex) { } catch (ParserConfigurationException e) {
s_logger.trace("Ignoring xml parser error.", e);
} catch (SAXException e) {
s_logger.trace("Ignoring xml parser error.", e);
} }
} }
public boolean parseDomainXML(String domXML) { public boolean parseDomainXML(String domXML) {