You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by da...@apache.org on 2003/10/25 00:37:00 UTC
cvs commit: incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/service GeronimoMBeanInfoXMLLoader.java
dain 2003/10/24 15:37:00
Modified: modules/kernel/src/java/org/apache/geronimo/kernel/service
GeronimoMBeanInfoXMLLoader.java
Log:
Converted digester code to standard xml loading code. Removes dependency
on digester.
Revision Changes Path
1.2 +216 -46 incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/service/GeronimoMBeanInfoXMLLoader.java
Index: GeronimoMBeanInfoXMLLoader.java
===================================================================
RCS file: /home/cvs/incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/service/GeronimoMBeanInfoXMLLoader.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- GeronimoMBeanInfoXMLLoader.java 8 Sep 2003 04:38:35 -0000 1.1
+++ GeronimoMBeanInfoXMLLoader.java 24 Oct 2003 22:37:00 -0000 1.2
@@ -55,15 +55,21 @@
*/
package org.apache.geronimo.kernel.service;
+import java.io.IOException;
import java.io.InputStream;
+import java.net.MalformedURLException;
import java.net.URI;
+import java.net.URL;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
-import org.apache.commons.digester.Digester;
import org.apache.geronimo.kernel.deployment.DeploymentException;
-import org.apache.geronimo.kernel.service.GeronimoAttributeInfo;
-import org.apache.geronimo.kernel.service.GeronimoMBeanInfo;
-import org.apache.xerces.parsers.SAXParser;
+import org.apache.geronimo.kernel.deployment.service.XMLUtil;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
/**
* Loads the GeronimoMBeanInfo from xml.
@@ -71,60 +77,224 @@
* @version $Revision$ $Date$
*/
public class GeronimoMBeanInfoXMLLoader {
- private Digester digester;
+ private static final DocumentBuilder parser;
- public GeronimoMBeanInfoXMLLoader() throws DeploymentException {
- SAXParser parser = new SAXParser();
+ static {
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
- parser.setFeature("http://xml.org/sax/features/validation", true);
- parser.setFeature("http://apache.org/xml/features/validation/schema", true);
- parser.setFeature("http://apache.org/xml/features/validation/dynamic", true);
- } catch (Exception e) {
- throw new DeploymentException(e);
+ parser = factory.newDocumentBuilder();
+ } catch (ParserConfigurationException e) {
+ throw new AssertionError("No XML parser available");
}
+ }
- digester = new Digester(parser);
-
- // MBean
- digester.addObjectCreate("mbean", GeronimoMBeanInfo.class);
- digester.addCallMethod("mbean/target", "setTargetClass", 2);
- digester.addCallParam("mbean/target", 0, "name");
- digester.addCallParam("mbean/target", 1, "class");
-
- // Attribute
- digester.addObjectCreate("mbean/attribute", GeronimoAttributeInfo.class);
- digester.addSetProperties("mbean/attribute", "cache", "cachePolicy");
- digester.addSetNext("mbean/attribute", "addAttributeInfo");
-
- // Operation
- digester.addObjectCreate("mbean/operation", GeronimoOperationInfo.class);
- digester.addSetProperties("mbean/operation", "cache", "cachePolicy");
- digester.addObjectCreate("mbean/operation/parameter", GeronimoParameterInfo.class);
- digester.addSetProperties("mbean/operation/parameter");
- digester.addSetNext("mbean/operation/parameter", "addParameterInfo");
- digester.addSetNext("mbean/operation", "addOperationInfo");
-
- // Notification
- digester.addObjectCreate("mbean/notification", GeronimoNotificationInfo.class);
- digester.addSetProperties("mbean/notification", "class", "name");
- digester.addCallMethod("mbean/notification/type", "addNotificationType", 1);
- digester.addCallParam("mbean/notification/type", 0);
- digester.addSetNext("mbean/notification", "addNotificationInfo");
+ private GeronimoMBeanInfoXMLLoader() {
}
- public GeronimoMBeanInfo loadXML(InputStream in) throws DeploymentException {
+ public static GeronimoMBeanInfo loadMBean(URI uri) throws DeploymentException {
try {
- return (GeronimoMBeanInfo) digester.parse(in);
- } catch (Exception e) {
+ return loadMBean(uri.toURL());
+ } catch (MalformedURLException e) {
throw new DeploymentException(e);
}
}
- public GeronimoMBeanInfo loadXML(URI uri) throws DeploymentException {
+ public static GeronimoMBeanInfo loadMBean(URL url) throws DeploymentException {
+ InputStream is;
try {
- return (GeronimoMBeanInfo) digester.parse(uri.toURL().openStream());
+ is = url.openConnection().getInputStream();
+ } catch (IOException e) {
+ throw new DeploymentException("Failed to open stream for URL: " + url, e);
+ }
+
+ Document doc;
+ try {
+ doc = parser.parse(is);
} catch (Exception e) {
- throw new DeploymentException(e);
+ throw new DeploymentException("Failed to parse document", e);
+ }
+
+ return loadMBean(doc.getDocumentElement());
+ }
+
+ public static GeronimoMBeanInfo loadMBean(Element mbeanElement) {
+ GeronimoMBeanInfo mbeanInfo = new GeronimoMBeanInfo();
+ mbeanInfo.setName(mbeanElement.getAttribute("name"));
+ mbeanInfo.setDescription(mbeanElement.getAttribute("description"));
+
+ loadTargets(mbeanElement, mbeanInfo);
+ loadAttributes(mbeanElement, mbeanInfo);
+ loadOperations(mbeanElement, mbeanInfo);
+ loadNotifications(mbeanElement, mbeanInfo);
+
+ return mbeanInfo;
+ }
+
+ public static void loadTargets(Element mbeanElement, GeronimoMBeanInfo mbeanInfo) {
+ NodeList nl = mbeanElement.getElementsByTagName("target");
+ for (int i = 0; i < nl.getLength(); i++) {
+ Element targetElement = (Element) nl.item(i);
+ String targetName = targetElement.getAttribute("name");
+ if (targetName == null || targetName.length() == 0) {
+ targetName = "default";
+ }
+ String targetClass = targetElement.getAttribute("class");
+ mbeanInfo.setTargetClass(targetName, targetClass);
+ }
+ }
+
+ public static void loadAttributes(Element mbeanElement, GeronimoMBeanInfo mbeanInfo) {
+ NodeList nl;
+ nl = mbeanElement.getElementsByTagName("attribute");
+ for (int i = 0; i < nl.getLength(); i++) {
+ Element attributeElement = (Element) nl.item(i);
+ mbeanInfo.addAttributeInfo(loadAttribute(attributeElement));
+ }
+ }
+
+ public static GeronimoAttributeInfo loadAttribute(Element attributeElement) {
+ GeronimoAttributeInfo attributeInfo = new GeronimoAttributeInfo();
+
+ attributeInfo.setName(attributeElement.getAttribute("name"));
+ attributeInfo.setDescription(attributeElement.getAttribute("description"));
+
+ String targetName = attributeElement.getAttribute("targetName");
+ if (targetName == null || targetName.length() == 0) {
+ targetName = "default";
+ }
+ attributeInfo.setTargetName(targetName);
+
+ String readableString = attributeElement.getAttribute("readable");
+ if (readableString == null || readableString.length() == 0) {
+ attributeInfo.setReadable(true);
+ } else {
+ if (readableString.equalsIgnoreCase("true") || readableString.equals("1")) {
+ attributeInfo.setReadable(true);
+ } else {
+ attributeInfo.setReadable(false);
+ }
+ }
+
+ String writableString = attributeElement.getAttribute("writable");
+ if (writableString == null || writableString.length() == 0) {
+ attributeInfo.setWritable(true);
+ } else {
+ if (writableString.equalsIgnoreCase("true") || writableString.equals("1")) {
+ attributeInfo.setWritable(true);
+ } else {
+ attributeInfo.setWritable(false);
+ }
+ }
+
+ String getterName = attributeElement.getAttribute("getterName");
+ if (getterName != null && getterName.length() > 0) {
+ attributeInfo.setGetterName(getterName);
+ }
+
+ String setterName = attributeElement.getAttribute("setterName");
+ if (setterName != null && setterName.length() > 0) {
+ attributeInfo.setSetterName(setterName);
+ }
+
+ String cacheString = attributeElement.getAttribute("cache");
+ if (cacheString == null || cacheString.length() == 0) {
+ attributeInfo.setCacheTimeLimit(-1);
+ } else {
+ attributeInfo.setCachePolicy(cacheString);
+ }
+ return attributeInfo;
+ }
+
+ public static void loadOperations(Element mbeanElement, GeronimoMBeanInfo mbeanInfo) {
+ NodeList nl;
+ nl = mbeanElement.getElementsByTagName("operation");
+ for (int i = 0; i < nl.getLength(); i++) {
+ Element operationElement = (Element) nl.item(i);
+ mbeanInfo.addOperationInfo(loadOperation(operationElement));
+ }
+ }
+
+ public static GeronimoOperationInfo loadOperation(Element operationElement) {
+ GeronimoOperationInfo operationInfo = new GeronimoOperationInfo();
+
+ operationInfo.setName(operationElement.getAttribute("name"));
+ operationInfo.setDescription(operationElement.getAttribute("description"));
+
+ String targetName = operationElement.getAttribute("targetName");
+ if (targetName == null || targetName.length() == 0) {
+ targetName = "default";
}
+ operationInfo.setTargetName(targetName);
+
+ String methodName = operationElement.getAttribute("methodName");
+ if (methodName != null && methodName.length() > 0) {
+ operationInfo.setMethodName(methodName);
+ }
+
+ String impactString = operationElement.getAttribute("impact");
+ if (impactString == null || impactString.length() == 0) {
+ operationInfo.setImpact(GeronimoOperationInfo.UNKNOWN);
+ } else if (impactString.equals("ACTION")) {
+ operationInfo.setImpact(GeronimoOperationInfo.ACTION);
+ } else if (impactString.equals("INFO")) {
+ operationInfo.setImpact(GeronimoOperationInfo.INFO);
+ } else if (impactString.equals("ACTION_INFO")) {
+ operationInfo.setImpact(GeronimoOperationInfo.ACTION_INFO);
+ } else {
+ operationInfo.setImpact(GeronimoOperationInfo.UNKNOWN);
+ }
+
+ String cacheString = operationElement.getAttribute("cache");
+ if (cacheString == null || cacheString.length() == 0) {
+ operationInfo.setCacheTimeLimit(-1);
+ } else {
+ operationInfo.setCachePolicy(cacheString);
+ }
+
+ loadParameters(operationElement, operationInfo);
+
+ return operationInfo;
+ }
+
+ public static void loadParameters(Element operationElement, GeronimoOperationInfo operationInfo) {
+ NodeList nl;
+ nl = operationElement.getElementsByTagName("parameter");
+ for (int i = 0; i < nl.getLength(); i++) {
+ Element parameterElement = (Element) nl.item(i);
+ operationInfo.addParameterInfo(loadParameter(parameterElement));
+ }
+ }
+
+ public static GeronimoParameterInfo loadParameter(Element parameterElement) {
+ GeronimoParameterInfo parameterInfo = new GeronimoParameterInfo();
+
+ parameterInfo.setName(parameterElement.getAttribute("name"));
+ parameterInfo.setDescription(parameterElement.getAttribute("description"));
+ parameterInfo.setType(parameterElement.getAttribute("type"));
+
+ return parameterInfo;
+ }
+
+ public static void loadNotifications(Element mbeanElement, GeronimoMBeanInfo mbeanInfo) {
+ NodeList nl = mbeanElement.getElementsByTagName("notification");
+ for (int i = 0; i < nl.getLength(); i++) {
+ Element notificationElement = (Element) nl.item(i);
+ mbeanInfo.addNotificationInfo(loadNotification(notificationElement));
+ }
+ }
+
+ public static GeronimoNotificationInfo loadNotification(Element notificationElement) {
+ GeronimoNotificationInfo notificationInfo = new GeronimoNotificationInfo();
+
+ notificationInfo.setName(notificationElement.getAttribute("class"));
+ notificationInfo.setDescription(notificationElement.getAttribute("description"));
+
+ NodeList nl = notificationElement.getElementsByTagName("type");
+ for (int i = 0; i < nl.getLength(); i++) {
+ String typeString = (String) XMLUtil.getContent((Element) nl.item(i));
+ notificationInfo.addNotificationType(typeString);
+ }
+
+ return notificationInfo;
}
}