- Timestamp:
- 07/12/13 23:41:06 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
java/main/src/main/java/com/framsticks/parsers/XmlLoader.java
r99 r100 1 1 package com.framsticks.parsers; 2 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 3 6 import java.io.InputStream; 4 7 import java.util.LinkedList; … … 8 11 import javax.xml.parsers.DocumentBuilderFactory; 9 12 10 import org.apache.log4j.Logger; 13 import org.apache.logging.log4j.Logger; 14 import org.apache.logging.log4j.LogManager; 11 15 import org.w3c.dom.Document; 12 16 import org.w3c.dom.Element; … … 15 19 import org.w3c.dom.NodeList; 16 20 17 import com.framsticks.params.Access Interface;21 import com.framsticks.params.Access; 18 22 import com.framsticks.params.Registry; 19 23 import com.framsticks.util.AutoBuilder; … … 22 26 23 27 public class XmlLoader { 24 private static final Logger log = Log ger.getLogger(XmlLoader.class);28 private static final Logger log = LogManager.getLogger(XmlLoader.class); 25 29 26 30 protected Registry registry = new Registry(); … … 30 34 */ 31 35 public XmlLoader() { 36 registry.registerAndBuild(AutoInjector.class); 32 37 } 33 38 … … 56 61 } 57 62 58 public Object processElement(Element element ) {63 public Object processElement(Element element, Class<?> enclosingClass) { 59 64 final String name = mangleName(element.getNodeName()); 60 65 if (name.equals("import")) { … … 67 72 } 68 73 } 74 if (name.equals("include")) { 75 String fileName = element.getAttribute("file"); 76 if (Strings.notEmpty(fileName)) { 77 try { 78 return load(new FileInputStream(new File(fileName)), enclosingClass); 79 } catch (FileNotFoundException e) { 80 throw new FramsticksException().msg("failed to include file").arg("file", fileName).cause(e); 81 } 82 } 83 String resourceName = element.getAttribute("resource"); 84 if (Strings.notEmpty(resourceName)) { 85 Class<?> javaClass = enclosingClass; 86 String className = element.getAttribute("class"); 87 if (Strings.notEmpty(className)) { 88 try { 89 javaClass = Class.forName(className); 90 } catch (ClassNotFoundException e) { 91 throw new FramsticksException().msg("failed to find class for resource loading").arg("class name", className).cause(e); 92 } 93 } 69 94 70 AccessInterface access = registry.createAccess(name); 95 return load(javaClass.getResourceAsStream(resourceName), enclosingClass); 96 } 97 throw new FramsticksException().msg("invalid <include/> node"); 98 } 99 100 Access access = registry.createAccess(name); 71 101 72 102 Object object = access.createAccessee(); … … 81 111 82 112 NodeList children = element.getChildNodes(); 83 log.debug("found " + children.getLength() + " children in " +object);113 log.debug("found {} children in {}", children.getLength(), object); 84 114 for (int i = 0; i < children.getLength(); ++i) { 85 115 Node childNode = children.item(i); … … 87 117 continue; 88 118 } 89 Object childObject = processElement((Element) childNode );119 Object childObject = processElement((Element) childNode, object.getClass()); 90 120 if (childObject == null) { 91 121 continue; … … 104 134 } 105 135 } 106 log.debug("loaded " +object);136 log.debug("loaded {}", object); 107 137 108 138 return object; 109 139 } 110 140 111 p ublic Object load(InputStream stream) {141 protected Object load(InputStream stream, Class<?> enclosingClass) { 112 142 try { 113 143 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); … … 119 149 assert element != null; 120 150 121 return processElement(element );151 return processElement(element, enclosingClass); 122 152 123 153 } catch (Exception e) { … … 129 159 registry.registerAndBuild(type); 130 160 131 Object object = load(stream );161 Object object = load(stream, type); 132 162 if (type.isAssignableFrom(object.getClass())) { 133 163 return type.cast(object);
Note: See TracChangeset
for help on using the changeset viewer.