com.sun.xml.bind.v2.runtime.reflect
Class TransducedAccessor<BeanT>

java.lang.Object
  extended by com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor<BeanT>
Direct Known Subclasses:
DefaultTransducedAccessor, TransducedAccessor.CompositeTransducedAccessorImpl

public abstract class TransducedAccessor<BeanT>
extends Object

Accessor and Transducer combined into one object.

This allows efficient conversions between primitive values and String without using boxing.

This abstraction only works for a single-value property.

An instance of TransducedAccessor implicitly holds a field of the BeanT that the accessors access.


Nested Class Summary
(package private) static class TransducedAccessor.CompositeContextDependentTransducedAccessorImpl<BeanT,ValueT>
           
(package private) static class TransducedAccessor.CompositeTransducedAccessorImpl<BeanT,ValueT>
          Implementation of TransducedAccessor that simply combines a Transducer and Accessor.
 
Constructor Summary
TransducedAccessor()
           
 
Method Summary
 void declareNamespace(BeanT o, XMLSerializer w)
          Obtain the value of the field and declares the namespace URIs used in the value.
static
<T> TransducedAccessor<T>
get(JAXBContextImpl context, RuntimeNonElementRef ref)
          Gets the TransducedAccessor appropriately configured for the given property.
abstract  boolean hasValue(BeanT o)
          Checks if the field has a value.
abstract  void parse(BeanT o, CharSequence lexical)
          Parses the text value into the responsible field of the given bean.
abstract  CharSequence print(BeanT o)
          Prints the responsible field of the given bean to the writer.
 boolean useNamespace()
           
abstract  void writeLeafElement(XMLSerializer w, Name tagName, BeanT o, String fieldName)
          Convenience method to write the value as a text inside an element without any attributes.
abstract  void writeText(XMLSerializer w, BeanT o, String fieldName)
          Invokes one of the XMLSerializer.text(String, String) method with the representation of data bested suited for this transduced accessor.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TransducedAccessor

public TransducedAccessor()
Method Detail

useNamespace

public boolean useNamespace()
See Also:
Transducer.useNamespace()

declareNamespace

public void declareNamespace(BeanT o,
                             XMLSerializer w)
                      throws AccessorException,
                             SAXException
Obtain the value of the field and declares the namespace URIs used in the value.

Throws:
AccessorException
SAXException
See Also:
Transducer.declareNamespace(Object, XMLSerializer)

print

@Nullable
public abstract CharSequence print(@NotNull
                                            BeanT o)
                            throws AccessorException,
                                   SAXException
Prints the responsible field of the given bean to the writer.

Use XMLSerializer.getInstance() to access to the namespace bindings

Returns:
if the accessor didn't yield a value, return null.
Throws:
AccessorException
SAXException

parse

public abstract void parse(BeanT o,
                           CharSequence lexical)
                    throws AccessorException,
                           SAXException
Parses the text value into the responsible field of the given bean.

Use UnmarshallingContext.getInstance() to access to the namespace bindings

Throws:
AccessorException - if the transducer is used to parse an user bean that uses XmlValue, then this exception may occur when it tries to set the leaf value to the bean.
RuntimeException - if the lexical form is incorrect. The method may throw a RuntimeException, but it shouldn't cause the entire unmarshalling to fail.
SAXException - if the parse method found an error, the error is reported, and then the processing is aborted.

hasValue

public abstract boolean hasValue(BeanT o)
                          throws AccessorException
Checks if the field has a value.

Throws:
AccessorException

get

public static <T> TransducedAccessor<T> get(JAXBContextImpl context,
                                            RuntimeNonElementRef ref)
Gets the TransducedAccessor appropriately configured for the given property.

This allows the implementation to use an optimized code.


writeLeafElement

public abstract void writeLeafElement(XMLSerializer w,
                                      Name tagName,
                                      BeanT o,
                                      String fieldName)
                               throws SAXException,
                                      AccessorException,
                                      IOException,
                                      javax.xml.stream.XMLStreamException
Convenience method to write the value as a text inside an element without any attributes. Can be overridden for improved performance.

The callee assumes that there's an associated value in the field. No @xsi:type handling is expected.

Throws:
SAXException
AccessorException
IOException
javax.xml.stream.XMLStreamException

writeText

public abstract void writeText(XMLSerializer w,
                               BeanT o,
                               String fieldName)
                        throws AccessorException,
                               SAXException,
                               IOException,
                               javax.xml.stream.XMLStreamException
Invokes one of the XMLSerializer.text(String, String) method with the representation of data bested suited for this transduced accessor.

Throws:
AccessorException
SAXException
IOException
javax.xml.stream.XMLStreamException