public static spindle.core.dom.Rule getRule(String xmlString, AppLogger logger) throws ParserException {
		try {
			if (null == INSTANCE) INSTANCE = new XmlTheoryParser2();
			if (null != logger) INSTANCE.setAppLogger(logger);
			String ruleStr = RULE_PREFIX + xmlString + RULE_POSTFIX;

			InputStream ins = new ByteArrayInputStream(ruleStr.replaceAll("[\t\r\n]", "").getBytes());

			if (null == ruleUnmarshaller) ruleUnmarshaller = XjcUtilities.getRuleUnmarshaller();
			Rules cRule = (Rules) ruleUnmarshaller.unmarshal(ins);

			spindle.core.dom.Rule rule = INSTANCE.generateRule(cRule.getRule());
			if (rule.getLabel().startsWith(TEMP_RULE_LABEL)) rule.setLabel(spindle.core.dom.Theory.DEFAULT_RULE_LABEL_PREFIX + "0001");

			return rule;
		} catch (Exception e) {
			throw new ParserException(e);
		} finally {
			INSTANCE.resetAppLogger();
		}
	}