| 1 22 23 package org.jboss.spring.factory; 24 25 import java.util.regex.Matcher ; 26 import java.util.regex.Pattern ; 27 28 import org.jboss.util.naming.Util; 29 import org.springframework.beans.factory.BeanDefinitionStoreException; 30 import org.springframework.beans.factory.BeanFactory; 31 import org.springframework.beans.factory.config.ConfigurableBeanFactory; 32 import org.springframework.beans.factory.xml.BeanDefinitionParserDelegate; 33 import org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader; 34 import org.w3c.dom.Element ; 35 import org.w3c.dom.Node ; 36 import org.w3c.dom.NodeList ; 37 38 41 public class NamedXmlBeanDefinitionParser extends DefaultBeanDefinitionDocumentReader 42 implements Nameable, Instantiable 43 { 44 45 public static final String BEAN_FACTORY_ELEMENT = "BeanFactory=\\(([^)]+)\\)"; 46 public static final String PARENT_BEAN_FACTORY_ELEMENT = "ParentBeanFactory=\\(([^)]+)\\)"; 47 public static final String INSTANTIATION_ELEMENT = "Instantiate=\\(([^)]+)\\)"; 48 49 private ConfigurableBeanFactory beanFactory; 50 private String beanFactoryName; 51 private boolean instantiate; 52 53 public NamedXmlBeanDefinitionParser(ConfigurableBeanFactory beanFactory) 54 { 55 this.beanFactory = beanFactory; 56 } 57 58 protected void preProcessXml(Element root) throws BeanDefinitionStoreException 59 { 60 NodeList nl = root.getChildNodes(); 61 for (int i = 0; i < nl.getLength(); i++) 62 { 63 Node node = nl.item(i); 64 if (node instanceof Element ) 65 { 66 Element ele = (Element ) node; 67 if (BeanDefinitionParserDelegate.DESCRIPTION_ELEMENT.equals(node.getNodeName())) 68 { 69 String nodeValue = ele.getFirstChild().getNodeValue(); 70 logger.info("Bean names [description tag]: " + nodeValue); 71 Matcher bfm = parse(nodeValue, BEAN_FACTORY_ELEMENT); 72 if (bfm.find()) 73 { 74 beanFactoryName = bfm.group(1); 75 } 76 Matcher pbfm = parse(nodeValue, PARENT_BEAN_FACTORY_ELEMENT); 77 if (pbfm.find()) 78 { 79 String parentBeanFactoryName = pbfm.group(1); 80 try 81 { 82 beanFactory.setParentBeanFactory((BeanFactory) Util.lookup(parentBeanFactoryName, BeanFactory.class)); 83 } 84 catch (Exception e) 85 { 86 throw new BeanDefinitionStoreException("Failure during parent bean factory JNDI lookup: " + parentBeanFactoryName, e); 87 } 88 } 89 Matcher inst = parse(nodeValue, INSTANTIATION_ELEMENT); 90 if (inst.find()) 91 { 92 instantiate = Boolean.parseBoolean(inst.group(1)); 93 } 94 } 95 } 96 } 97 } 98 99 public String getName() 100 { 101 return beanFactoryName; 102 } 103 104 public boolean doInstantiate() 105 { 106 return instantiate; 107 } 108 109 private static Matcher parse(String value, String regexp) 110 { 111 Pattern pattern = Pattern.compile(regexp); 112 return pattern.matcher(value); 113 } 114 115 } 116 | Popular Tags |