Polishing

(cherry picked from commit b25876f)
This commit is contained in:
Juergen Hoeller
2013-09-02 22:01:57 +02:00
parent 77298a19c9
commit 2b57020c18
2 changed files with 79 additions and 78 deletions

View File

@@ -170,30 +170,32 @@ public class CastorMarshaller extends AbstractMarshaller implements Initializing
}
/**
* Set the locations of the Castor XML Mapping files.
* Set the locations of the Castor XML mapping files.
*/
public void setMappingLocations(Resource[] mappingLocations) {
this.mappingLocations = mappingLocations;
}
/**
* Set the Castor target class. Alternative means of configuring {@code CastorMarshaller} for unmarshalling
* multiple classes include use of mapping files, and specifying packages with Castor descriptor classes.
* Set the Castor target class.
* @see #setTargetPackage
* @see #setMappingLocation
*/
public void setTargetClass(Class targetClass) {
this.targetClasses = new Class[]{targetClass};
}
/**
* Set the Castor target classes. Alternative means of configuring {@code CastorMarshaller} for unmarshalling
* multiple classes include use of mapping files, and specifying packages with Castor descriptor classes.
* Set the Castor target classes.
* @see #setTargetPackages
* @see #setMappingLocations
*/
public void setTargetClasses(Class[] targetClasses) {
this.targetClasses = targetClasses;
}
/**
* Set the names of package with the Castor descriptor classes.
* Set the name of a package with the Castor descriptor classes.
*/
public void setTargetPackage(String targetPackage) {
this.targetPackages = new String[] {targetPackage};

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -84,6 +84,7 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
private static final String DEFAULT_BINDING_NAME = "binding";
private Class<?> targetClass;
private String targetPackage;
@@ -106,13 +107,12 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
private IBindingFactory bindingFactory;
private TransformerFactory transformerFactory = TransformerFactory.newInstance();
private final TransformerFactory transformerFactory = TransformerFactory.newInstance();
/**
* Set the target class for this instance. Setting either this property or the
* {@link #setTargetPackage(String) targetPackage} property is required.
*
* <p>If this property is set, {@link #setTargetPackage(String) targetPackage} is ignored.
*/
public void setTargetClass(Class<?> targetClass) {
@@ -122,7 +122,6 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
/**
* Set the target package for this instance. Setting either this property or the
* {@link #setTargetClass(Class) targetClass} property is required.
*
* <p>If {@link #setTargetClass(Class) targetClass} is set, this property is ignored.
*/
public void setTargetPackage(String targetPackage) {
@@ -157,10 +156,9 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
}
/**
* Sets the root element name for the DTD declaration written when marshalling. By default, this is
* {@code null} (i.e. no DTD declaration is written). If set to a value, the system ID or public ID also need to
* be set.
*
* Set the root element name for the DTD declaration written when marshalling.
* By default, this is {@code null} (i.e. no DTD declaration is written).
* <p>If set to a value, the system ID or public ID also need to be set.
* @see #setDocTypeSystemId(String)
* @see #setDocTypePublicId(String)
*/
@@ -169,10 +167,9 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
}
/**
* Sets the system Id for the DTD declaration written when marshalling. By default, this is
* {@code null}. Only used when the root element also has been set. Set either this property or
* {@code docTypePublicId}, not both.
*
* Set the system id for the DTD declaration written when marshalling.
* By default, this is {@code null}. Only used when the root element also has been set.
* <p>Set either this property or {@code docTypePublicId}, not both.
* @see #setDocTypeRootElementName(String)
*/
public void setDocTypeSystemId(String docTypeSystemId) {
@@ -180,10 +177,9 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
}
/**
* Sets the public Id for the DTD declaration written when marshalling. By default, this is
* {@code null}. Only used when the root element also has been set. Set either this property or
* {@code docTypeSystemId}, not both.
*
* Set the public id for the DTD declaration written when marshalling.
* By default, this is {@code null}. Only used when the root element also has been set.
* <p>Set either this property or {@code docTypeSystemId}, not both.
* @see #setDocTypeRootElementName(String)
*/
public void setDocTypePublicId(String docTypePublicId) {
@@ -191,15 +187,15 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
}
/**
* Sets the internal subset Id for the DTD declaration written when marshalling. By default, this is
* {@code null}. Only used when the root element also has been set.
*
* Set the internal subset Id for the DTD declaration written when marshalling.
* By default, this is {@code null}. Only used when the root element also has been set.
* @see #setDocTypeRootElementName(String)
*/
public void setDocTypeInternalSubset(String docTypeInternalSubset) {
this.docTypeInternalSubset = docTypeInternalSubset;
}
public void afterPropertiesSet() throws JiBXException {
if (this.targetClass != null) {
if (StringUtils.hasLength(this.bindingName)) {
@@ -214,16 +210,18 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
}
this.bindingFactory = BindingDirectory.getFactory(this.targetClass);
}
} else if (this.targetPackage != null) {
}
else if (this.targetPackage != null) {
if (!StringUtils.hasLength(bindingName)) {
bindingName = DEFAULT_BINDING_NAME;
}
if (logger.isInfoEnabled()) {
logger.info("Configured for target package [" + targetPackage + "] using binding [" + bindingName + "]");
logger.info("Configured for target package [" + this.targetPackage + "] using binding [" + this.bindingName + "]");
}
this.bindingFactory = BindingDirectory.getFactory(bindingName, targetPackage);
} else {
throw new IllegalArgumentException("either 'targetClass' or 'targetPackage' is required");
this.bindingFactory = BindingDirectory.getFactory(this.bindingName, this.targetPackage);
}
else {
throw new IllegalArgumentException("Either 'targetClass' or 'targetPackage' is required");
}
}
@@ -244,7 +242,7 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
}
// Supported Marshalling
// Supported marshalling
@Override
protected void marshalOutputStream(Object graph, OutputStream outputStream)
@@ -271,8 +269,7 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
}
}
private void marshalDocument(IMarshallingContext marshallingContext, Object graph) throws IOException,
JiBXException {
private void marshalDocument(IMarshallingContext marshallingContext, Object graph) throws IOException, JiBXException {
if (StringUtils.hasLength(docTypeRootElementName)) {
IXMLWriter xmlWriter = marshallingContext.getXmlWriter();
xmlWriter.writeDocType(docTypeRootElementName, docTypeSystemId, docTypePublicId, docTypeInternalSubset);
@@ -280,6 +277,27 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
marshallingContext.marshalDocument(graph);
}
// Unsupported marshalling
@Override
protected void marshalDomNode(Object graph, Node node) throws XmlMappingException {
try {
// JiBX does not support DOM natively, so we write to a buffer first, and transform that to the Node
Result result = new DOMResult(node);
transformAndMarshal(graph, result);
}
catch (IOException ex) {
throw new MarshallingFailureException("JiBX marshalling exception", ex);
}
}
@Override
protected void marshalXmlEventWriter(Object graph, XMLEventWriter eventWriter) {
XMLStreamWriter streamWriter = StaxUtils.createEventStreamWriter(eventWriter);
marshalXmlStreamWriter(graph, streamWriter);
}
@Override
protected void marshalXmlStreamWriter(Object graph, XMLStreamWriter streamWriter) throws XmlMappingException {
try {
@@ -293,20 +311,6 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
}
}
// Unsupported Marshalling
@Override
protected void marshalDomNode(Object graph, Node node) throws XmlMappingException {
try {
// JiBX does not support DOM natively, so we write to a buffer first, and transform that to the Node
Result result = new DOMResult(node);
transformAndMarshal(graph, result);
}
catch (IOException ex) {
throw new MarshallingFailureException("JiBX marshalling exception", ex);
}
}
@Override
protected void marshalSaxHandlers(Object graph, ContentHandler contentHandler, LexicalHandler lexicalHandler)
throws XmlMappingException {
@@ -336,15 +340,33 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
}
@Override
protected void marshalXmlEventWriter(Object graph, XMLEventWriter eventWriter) {
XMLStreamWriter streamWriter = StaxUtils.createEventStreamWriter(eventWriter);
marshalXmlStreamWriter(graph, streamWriter);
}
// Unmarshalling
@Override
protected Object unmarshalXmlEventReader(XMLEventReader eventReader) {
try {
XMLStreamReader streamReader = StaxUtils.createEventStreamReader(eventReader);
return unmarshalXmlStreamReader(streamReader);
}
catch (XMLStreamException ex) {
return new UnmarshallingFailureException("JiBX unmarshalling exception", ex);
}
}
@Override
protected Object unmarshalXmlStreamReader(XMLStreamReader streamReader) {
try {
UnmarshallingContext unmarshallingContext = (UnmarshallingContext) createUnmarshallingContext();
IXMLReader xmlReader = new StAXReaderWrapper(streamReader, null, true);
unmarshallingContext.setDocument(xmlReader);
return unmarshallingContext.unmarshalElement();
}
catch (JiBXException ex) {
throw convertJibxException(ex, false);
}
}
@Override
protected Object unmarshalInputStream(InputStream inputStream) throws XmlMappingException, IOException {
try {
@@ -367,30 +389,6 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
}
}
@Override
protected Object unmarshalXmlStreamReader(XMLStreamReader streamReader) {
try {
UnmarshallingContext unmarshallingContext = (UnmarshallingContext) createUnmarshallingContext();
IXMLReader xmlReader = new StAXReaderWrapper(streamReader, null, true);
unmarshallingContext.setDocument(xmlReader);
return unmarshallingContext.unmarshalElement();
}
catch (JiBXException ex) {
throw convertJibxException(ex, false);
}
}
@Override
protected Object unmarshalXmlEventReader(XMLEventReader eventReader) {
try {
XMLStreamReader streamReader = StaxUtils.createEventStreamReader(eventReader);
return unmarshalXmlStreamReader(streamReader);
}
catch (XMLStreamException ex) {
return new UnmarshallingFailureException("JiBX unmarshalling exception", ex);
}
}
// Unsupported Unmarshalling
@@ -407,12 +405,13 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
@Override
protected Object unmarshalSaxReader(XMLReader xmlReader, InputSource inputSource)
throws XmlMappingException, IOException {
return transformAndUnmarshal(new SAXSource(xmlReader, inputSource));
}
private Object transformAndUnmarshal(Source source) throws IOException {
try {
Transformer transformer = transformerFactory.newTransformer();
Transformer transformer = this.transformerFactory.newTransformer();
ByteArrayOutputStream os = new ByteArrayOutputStream();
transformer.transform(source, new StreamResult(os));
ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());