Javolution 6.0.0 java
XMLBinding.java
Go to the documentation of this file.
1 /*
2  * Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3  * Copyright (C) 2012 - Javolution (http://javolution.org/)
4  * All rights reserved.
5  *
6  * Permission to use, copy, modify, and distribute this software is
7  * freely granted, provided that this notice is preserved.
8  */
9 package javolution.xml;
10 
11 import javolution.util.FastMap;
15 
100 public class XMLBinding implements XMLSerializable {
101 
105  static final XMLBinding DEFAULT = new XMLBinding();
106 
110  private QName _classAttribute = QName.valueOf("class");
111 
116 
121 
125  public XMLBinding() {}
126 
133  public void setAlias(Class<?> cls, QName qName) {
134  _classToAlias.put(cls, qName);
135  _aliasToClass.put(qName, cls);
136  }
137 
145  public final void setAlias(Class<?> cls, String alias) {
146  setAlias(cls, QName.valueOf(alias));
147  }
148 
157  public void setClassAttribute(QName classAttribute) {
158  _classAttribute = classAttribute;
159  }
160 
167  public final void setClassAttribute(String name) {
168  setClassAttribute(name == null ? null : QName.valueOf(name));
169  }
170 
179  protected XMLFormat<?> getFormat(Class<?> forClass)
180  throws XMLStreamException {
181  return XMLContext.getFormat(forClass);
182  }
183 
203  protected Class<?> readClass(XMLStreamReader reader, boolean useAttributes)
204  throws XMLStreamException {
205  try {
206  QName classQName;
207  if (useAttributes) {
208  if (_classAttribute == null)
209  throw new XMLStreamException(
210  "Binding has no class attribute defined, cannot retrieve class");
211  classQName = QName.valueOf(reader.getAttributeValue(
214  if (classQName == null)
215  throw new XMLStreamException(
216  "Cannot retrieve class (class attribute not found)");
217  } else {
218  classQName = QName.valueOf(reader.getNamespaceURI(),
219  reader.getLocalName());
220  }
221 
222  // Searches aliases with namespace URI.
223  Class<?> cls = _aliasToClass.get(classQName);
224  if (cls != null)
225  return cls;
226 
227  // Searches aliases without namespace URI.
228  cls = _aliasToClass.get(QName.valueOf(classQName.getLocalName()));
229  if (cls != null)
230  return cls;
231 
232  // Finally convert the qualified name to a class (ignoring namespace URI).
233  cls = Class.forName(classQName.getLocalName().toString());
234  if (cls == null)
235  throw new XMLStreamException(
236  "Class "
237  + classQName.getLocalName()
238  + " not found (see javolution.lang.Reflection to support additional class loader)");
239  _aliasToClass.put(classQName, cls);
240  return cls;
241  } catch (ClassNotFoundException ex) {
242  throw new RuntimeException(ex);
243  }
244  }
245 
264  protected void writeClass(Class<?> cls, XMLStreamWriter writer,
265  boolean useAttributes) throws XMLStreamException {
266  QName qName = (QName) _classToAlias.get(cls);
267  String name = qName != null ? qName.toString() : cls.getName();
268  if (useAttributes) {
269  if (_classAttribute == null)
270  return;
271  if (_classAttribute.getNamespaceURI() == null) {
272  writer.writeAttribute(_classAttribute.getLocalName(), name);
273  } else {
274  writer.writeAttribute(_classAttribute.getNamespaceURI(),
275  _classAttribute.getLocalName(), name);
276  }
277  } else {
278  if (qName != null) {
279  if (qName.getNamespaceURI() == null) {
280  writer.writeStartElement(qName.getLocalName());
281  } else {
282  writer.writeStartElement(qName.getNamespaceURI(),
283  qName.getLocalName());
284  }
285  } else {
286  writer.writeStartElement(name);
287  }
288  }
289  }
290 
291  public void reset() {
292  _classAttribute = QName.valueOf("class");
293  _aliasToClass.clear();
294  _classToAlias.clear();
295  }
296 
297  private static final long serialVersionUID = 6611041662550083919L;
298 }
javolution.xml.XMLBinding.reset
void reset()
Definition: XMLBinding.java:291
javolution
javolution.util.FastMap
Definition: FastMap.java:98
javolution.xml.XMLSerializable
Definition: XMLSerializable.java:43
javolution.xml.QName.getLocalName
CharSequence getLocalName()
Definition: QName.java:140
javolution.xml.XMLBinding._classToAlias
final FastMap< Class<?>, QName > _classToAlias
Definition: XMLBinding.java:115
javolution.xml.QName.valueOf
static QName valueOf(CharSequence name)
Definition: QName.java:82
javolution.xml.XMLBinding.readClass
Class<?> readClass(XMLStreamReader reader, boolean useAttributes)
Definition: XMLBinding.java:203
javolution.xml.XMLContext
Definition: XMLContext.java:31
javolution.xml.XMLBinding._aliasToClass
final FastMap< QName, Class<?> > _aliasToClass
Definition: XMLBinding.java:120
javolution.xml.stream.XMLStreamException
Definition: XMLStreamException.java:17
javolution.xml.XMLBinding
Definition: XMLBinding.java:100
javolution.xml.stream.XMLStreamWriter
Definition: XMLStreamWriter.java:47
javolution.xml.XMLFormat
Definition: XMLFormat.java:116
javolution.xml.XMLBinding.getFormat
XMLFormat<?> getFormat(Class<?> forClass)
Definition: XMLBinding.java:179
javolution.xml.XMLBinding.serialVersionUID
static final long serialVersionUID
Definition: XMLBinding.java:297
javolution.xml.stream.XMLStreamReader
Definition: XMLStreamReader.java:50
javolution.xml.XMLBinding.DEFAULT
static final XMLBinding DEFAULT
Definition: XMLBinding.java:105
javolution.xml.QName
Definition: QName.java:37
javolution.xml.XMLBinding.XMLBinding
XMLBinding()
Definition: XMLBinding.java:125
javolution.xml.XMLBinding.setAlias
final void setAlias(Class<?> cls, String alias)
Definition: XMLBinding.java:145
javolution.xml.XMLContext.getFormat
static< T > XMLFormat< T > getFormat(Class<? extends T > type)
Definition: XMLContext.java:49
javolution.xml.QName.getNamespaceURI
CharSequence getNamespaceURI()
Definition: QName.java:150
javolution.xml.XMLBinding.setClassAttribute
void setClassAttribute(QName classAttribute)
Definition: XMLBinding.java:157
javolution.xml
Definition: DefaultXMLFormat.java:9
javolution.xml.stream
Definition: Location.java:9
javolution.xml.XMLBinding.setAlias
void setAlias(Class<?> cls, QName qName)
Definition: XMLBinding.java:133
javolution.xml.XMLBinding._classAttribute
QName _classAttribute
Definition: XMLBinding.java:110
javolution.util
Definition: FastBitSet.java:9
javolution.xml.XMLBinding.writeClass
void writeClass(Class<?> cls, XMLStreamWriter writer, boolean useAttributes)
Definition: XMLBinding.java:264
javolution.xml.XMLBinding.setClassAttribute
final void setClassAttribute(String name)
Definition: XMLBinding.java:167
javolution.xml.QName.toString
String toString()
Definition: QName.java:169