1 22 package org.jboss.services.binding; 23 24 import java.io.File ; 25 import java.io.FileOutputStream ; 26 import java.io.StringReader ; 27 28 import javax.management.Attribute ; 29 import javax.management.MBeanServer ; 30 import javax.management.ObjectName ; 31 import javax.xml.transform.Result ; 32 import javax.xml.transform.Source ; 33 import javax.xml.transform.Transformer ; 34 import javax.xml.transform.TransformerFactory ; 35 import javax.xml.transform.stream.StreamResult ; 36 import javax.xml.transform.stream.StreamSource ; 37 38 import org.jboss.logging.Logger; 39 import org.jboss.system.server.ServerConfig; 40 import org.jboss.metadata.MetaData; 41 import org.jboss.util.StringPropertyReplacer; 42 import org.w3c.dom.Element ; 43 import org.w3c.dom.NodeList ; 44 45 68 public class XSLTFileDelegate implements ServicesConfigDelegate 69 { 70 private static Logger log = Logger.getLogger(XSLTFileDelegate.class); 71 72 78 public void applyConfig(ServiceConfig config, MBeanServer server) 79 throws Exception 80 { 81 Element delegateConfig = 82 (Element ) config.getServiceConfigDelegateConfig(); 83 if (delegateConfig == null) 84 { 85 throw new IllegalArgumentException ("ServiceConfig.ServiceConfigDelegateConfig is null"); 86 } 87 88 Element xslConfigElement = 89 (Element ) delegateConfig.getElementsByTagName("xslt-config").item(0); 90 if (xslConfigElement == null) 91 { 92 throw new IllegalArgumentException ("No valid xslt config found"); 93 } 94 95 String configName = xslConfigElement.getAttribute("configName"); 96 log.debug("configName = " + configName); 97 98 if (configName.length() == 0) 99 { 100 throw new IllegalArgumentException ("No valid configName attribute found"); 101 } 102 103 ObjectName serviceName = new ObjectName (config.getServiceName()); 104 log.debug("serviceName = " + serviceName); 105 106 String oldValue = (String ) server.getAttribute(serviceName, configName); 107 log.debug("oldValue = " + oldValue); 108 109 String tmpName = System.getProperty(ServerConfig.SERVER_TEMP_DIR); 110 File tempDirectory = new File (tmpName); 111 File targetFile = File.createTempFile("server", ".xml", tempDirectory); 112 targetFile.deleteOnExit(); 113 log.debug("targetFile: " + targetFile.getCanonicalPath()); 114 115 ServiceBinding[] bindings = config.getBindings(); 116 if (bindings == null || bindings.length == 0) 117 { 118 throw new IllegalArgumentException ("No port binding specified"); 119 } 120 121 int port = bindings[0].getPort(); 122 String host = bindings[0].getHostName(); 123 124 try 125 { 126 String xslText = xslConfigElement.getFirstChild().getNodeValue(); 127 log.trace("XSL text:" + xslText); 128 Source xslSource = new StreamSource (new StringReader (xslText)); 129 130 Source xmlSource = 131 new StreamSource (getClass().getClassLoader().getResourceAsStream(oldValue)); 132 133 Result xmlResult = 134 new StreamResult (new FileOutputStream (targetFile)); 135 136 TransformerFactory factory = TransformerFactory.newInstance(); 137 Transformer transformer = factory.newTransformer(xslSource); 138 139 transformer.setParameter("port", new Integer (port)); 140 log.debug("set port parameter to:"+port); 141 if (host != null) 142 { 143 transformer.setParameter("host", host); 144 log.debug("set host parameter to:"+host); 145 } 146 147 NodeList attributes = delegateConfig.getElementsByTagName("xslt-param"); 149 for(int a = 0; a < attributes.getLength(); a ++) 151 { 152 Element attr = (Element ) attributes.item(a); 153 String name = attr.getAttribute("name"); 154 if( name.length() == 0 ) 155 throw new IllegalArgumentException ("attribute element #" 156 +a+" has no name attribute"); 157 String attrExp = MetaData.getElementContent(attr); 158 String attrValue = StringPropertyReplacer.replaceProperties(attrExp); 159 transformer.setParameter(name, attrValue); 160 161 log.debug("set "+name+" parameter to:"+attrValue); 162 } 163 164 transformer.transform(xmlSource, xmlResult); 165 166 Attribute mbeanConfigAttr = 167 new Attribute (configName, targetFile.getCanonicalPath()); 168 169 server.setAttribute(serviceName, mbeanConfigAttr); 170 } 171 catch (Exception ex) 172 { 173 log.error("Error while transforming xml", ex); 174 } 175 176 } 177 178 } 179 | Popular Tags |