001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019 020 021 package org.apache.geronimo.system.configuration; 022 023 import java.io.IOException; 024 import java.io.Reader; 025 import java.io.StringWriter; 026 import java.io.Writer; 027 028 import javax.xml.bind.JAXBContext; 029 import javax.xml.bind.JAXBElement; 030 import javax.xml.bind.JAXBException; 031 import javax.xml.bind.Marshaller; 032 import javax.xml.bind.Unmarshaller; 033 import javax.xml.parsers.ParserConfigurationException; 034 import javax.xml.stream.XMLInputFactory; 035 import javax.xml.stream.XMLStreamException; 036 import javax.xml.stream.XMLStreamReader; 037 038 import org.apache.geronimo.system.plugin.model.AttributeType; 039 import org.apache.geronimo.system.plugin.model.AttributesType; 040 import org.apache.geronimo.system.plugin.model.GbeanType; 041 import org.apache.geronimo.system.plugin.model.ModuleType; 042 import org.apache.geronimo.system.plugin.model.ObjectFactory; 043 import org.xml.sax.SAXException; 044 045 /** 046 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $ 047 */ 048 public class AttributesXmlUtil { 049 public static final XMLInputFactory XMLINPUT_FACTORY = XMLInputFactory.newInstance(); 050 public static final JAXBContext ATTRIBUTES_CONTEXT; 051 public static final JAXBContext ATTRIBUTE_CONTEXT; 052 public static final JAXBContext MODULE_CONTEXT; 053 public static final JAXBContext GBEAN_CONTEXT; 054 055 static { 056 try { 057 ATTRIBUTES_CONTEXT = JAXBContext.newInstance(AttributesType.class); 058 MODULE_CONTEXT = JAXBContext.newInstance(ModuleType.class); 059 GBEAN_CONTEXT = JAXBContext.newInstance(GbeanType.class); 060 ATTRIBUTE_CONTEXT = JAXBContext.newInstance(AttributeType.class); 061 } catch (JAXBException e) { 062 throw new RuntimeException("Could not create jaxb contexts for plugin types"); 063 } 064 } 065 066 067 public static void writeAttribute(AttributeType metadata, Writer out) throws XMLStreamException, JAXBException { 068 Marshaller marshaller = ATTRIBUTE_CONTEXT.createMarshaller(); 069 marshaller.setProperty("jaxb.formatted.output", true); 070 JAXBElement<AttributeType> element = new ObjectFactory().createAttribute(metadata); 071 marshaller.marshal(element, out); 072 } 073 public static String extractAttributeValue(AttributeType attr) throws JAXBException, XMLStreamException { 074 StringWriter sw = new StringWriter(); 075 writeAttribute(attr, sw); 076 String s = sw.toString(); 077 int start = s.indexOf('>'); 078 start = s.indexOf('>', start + 1); 079 int end = s.lastIndexOf('<'); 080 if (end < start) { 081 return null; 082 } 083 return s.substring(start + 1, end).trim(); 084 } 085 086 public static void writeAttributes(AttributesType metadata, Writer out) throws XMLStreamException, JAXBException { 087 Marshaller marshaller = ATTRIBUTES_CONTEXT.createMarshaller(); 088 marshaller.setProperty("jaxb.formatted.output", true); 089 JAXBElement<AttributesType> element = new ObjectFactory().createAttributes(metadata); 090 marshaller.marshal(element, out); 091 } 092 093 094 public static AttributesType loadAttributes(Reader in) throws ParserConfigurationException, IOException, SAXException, JAXBException, XMLStreamException { 095 Unmarshaller unmarshaller = ATTRIBUTES_CONTEXT.createUnmarshaller(); 096 XMLStreamReader xmlStream = XMLINPUT_FACTORY.createXMLStreamReader(in); 097 JAXBElement<AttributesType> element = unmarshaller.unmarshal(xmlStream, AttributesType.class); 098 AttributesType pluginList = element.getValue(); 099 return pluginList; 100 } 101 public static ModuleType loadModule(Reader in) throws ParserConfigurationException, IOException, SAXException, JAXBException, XMLStreamException { 102 Unmarshaller unmarshaller = MODULE_CONTEXT.createUnmarshaller(); 103 XMLStreamReader xmlStream = XMLINPUT_FACTORY.createXMLStreamReader(in); 104 JAXBElement<ModuleType> element = unmarshaller.unmarshal(xmlStream, ModuleType.class); 105 ModuleType pluginList = element.getValue(); 106 return pluginList; 107 } 108 public static GbeanType loadGbean(Reader in) throws ParserConfigurationException, IOException, SAXException, JAXBException, XMLStreamException { 109 Unmarshaller unmarshaller = GBEAN_CONTEXT.createUnmarshaller(); 110 XMLStreamReader xmlStream = XMLINPUT_FACTORY.createXMLStreamReader(in); 111 JAXBElement<GbeanType> element = unmarshaller.unmarshal(xmlStream, GbeanType.class); 112 GbeanType pluginList = element.getValue(); 113 return pluginList; 114 } 115 public static AttributeType loadAttribute(Reader in) throws ParserConfigurationException, IOException, SAXException, JAXBException, XMLStreamException { 116 Unmarshaller unmarshaller = ATTRIBUTE_CONTEXT.createUnmarshaller(); 117 XMLStreamReader xmlStream = XMLINPUT_FACTORY.createXMLStreamReader(in); 118 JAXBElement<AttributeType> element = unmarshaller.unmarshal(xmlStream, AttributeType.class); 119 AttributeType attributeType = element.getValue(); 120 return attributeType; 121 } 122 123 /* 124 public static class NamespaceFilter extends XMLFilterImpl { 125 private static String PLUGIN_NS = "http://geronimo.apache.org/xml/ns/plugins-1.3"; 126 private static String GBEAN_NS = "http://geronimo.apache.org/xml/ns/attributes-1.2"; 127 private static String ENVIRONMENT_NS = "http://geronimo.apache.org/xml/ns/deployment-1.2"; 128 129 private String namespace; 130 131 public NamespaceFilter(XMLReader xmlReader) { 132 super(xmlReader); 133 } 134 135 @Override 136 public void startElement(String uri, String localName, String qname, Attributes atts) throws SAXException { 137 if ("plugin-artifact".equals(localName)) { 138 namespace = PLUGIN_NS; 139 } else if ("gbean".equals(localName)) { 140 namespace = GBEAN_NS; 141 } else if ("environment".equals(localName)) { 142 namespace = ENVIRONMENT_NS; 143 } 144 super.startElement(namespace, localName, qname, atts); 145 } 146 147 @Override 148 public void endElement(String uri, String localName, String qName) throws SAXException { 149 super.endElement(namespace, localName, qName); 150 if ("plugin-artifact".equals(localName)) { 151 namespace = null; 152 } else if ("gbean".equals(localName)) { 153 namespace = PLUGIN_NS; 154 } else if ("environment".equals(localName)) { 155 namespace = GBEAN_NS; 156 } 157 } 158 } 159 */ 160 }