diff --git a/org.springframework.core/src/main/java/org/springframework/util/Md5HashUtils.java b/org.springframework.core/src/main/java/org/springframework/util/Md5HashUtils.java
index 25a60954af2..f0c80ac6bfb 100644
--- a/org.springframework.core/src/main/java/org/springframework/util/Md5HashUtils.java
+++ b/org.springframework.core/src/main/java/org/springframework/util/Md5HashUtils.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2008 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -31,8 +31,7 @@ public abstract class Md5HashUtils {
{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
/**
- * Calculates the MD5 hash of the given bytes.
- *
+ * Calculate the MD5 hash of the given bytes.
* @param bytes the bytes to calculate the hash over
* @return the hash
*/
@@ -59,8 +58,7 @@ public abstract class Md5HashUtils {
}
/**
- * Returns a hex string representation of the MD5 hash of the given bytes.
- *
+ * Return a hex string representation of the MD5 hash of the given bytes.
* @param bytes the bytes to calculate the hash over
* @return a hexadecimal hash string
*/
@@ -69,9 +67,8 @@ public abstract class Md5HashUtils {
}
/**
- * Appends a hex string representation of the MD5 hash of the given bytes to the given {@link StringBuilder}.
- *
- * @param bytes the bytes to calculate the hash over
+ * Append a hex string representation of the MD5 hash of the given bytes to the given {@link StringBuilder}.
+ * @param bytes the bytes to calculate the hash over
* @param builder the string builder to append the hash to
* @return the given string builder
*/
diff --git a/org.springframework.core/src/main/java/org/springframework/util/xml/AbstractStaxXMLReader.java b/org.springframework.core/src/main/java/org/springframework/util/xml/AbstractStaxXMLReader.java
index b70127bf073..93289e5eff9 100644
--- a/org.springframework.core/src/main/java/org/springframework/util/xml/AbstractStaxXMLReader.java
+++ b/org.springframework.core/src/main/java/org/springframework/util/xml/AbstractStaxXMLReader.java
@@ -34,11 +34,11 @@ import org.springframework.util.StringUtils;
* Abstract base class for SAX XMLReader implementations that use StAX as a basis.
*
* @author Arjen Poutsma
+ * @since 3.0
* @see #setContentHandler(org.xml.sax.ContentHandler)
* @see #setDTDHandler(org.xml.sax.DTDHandler)
* @see #setEntityResolver(org.xml.sax.EntityResolver)
* @see #setErrorHandler(org.xml.sax.ErrorHandler)
- * @since 3.0
*/
abstract class AbstractStaxXMLReader extends AbstractXMLReader {
@@ -48,23 +48,25 @@ abstract class AbstractStaxXMLReader extends AbstractXMLReader {
private static final String IS_STANDALONE_FEATURE_NAME = "http://xml.org/sax/features/is-standalone";
+
private boolean namespacesFeature = true;
private boolean namespacePrefixesFeature = false;
private Boolean isStandalone;
+
@Override
public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException {
if (NAMESPACES_FEATURE_NAME.equals(name)) {
- return namespacesFeature;
+ return this.namespacesFeature;
}
else if (NAMESPACE_PREFIXES_FEATURE_NAME.equals(name)) {
- return namespacePrefixesFeature;
+ return this.namespacePrefixesFeature;
}
else if (IS_STANDALONE_FEATURE_NAME.equals(name)) {
- if (isStandalone != null) {
- return isStandalone;
+ if (this.isStandalone != null) {
+ return this.isStandalone;
}
else {
throw new SAXNotSupportedException("startDocument() callback not completed yet");
@@ -88,35 +90,66 @@ abstract class AbstractStaxXMLReader extends AbstractXMLReader {
}
}
- /** Indicates whether the SAX feature http://xml.org/sax/features/namespaces is turned on. */
+ protected void setStandalone(boolean standalone) {
+ this.isStandalone = standalone;
+ }
+
+ /**
+ * Indicates whether the SAX feature http://xml.org/sax/features/namespaces is turned on.
+ */
protected boolean hasNamespacesFeature() {
- return namespacesFeature;
+ return this.namespacesFeature;
}
- /** Indicates whether the SAX feature http://xml.org/sax/features/namespaces-prefixes is turned on. */
+ /**
+ * Indicates whether the SAX feature http://xml.org/sax/features/namespaces-prefixes is turned on.
+ */
protected boolean hasNamespacePrefixesFeature() {
- return namespacePrefixesFeature;
+ return this.namespacePrefixesFeature;
}
- protected void setStandalone(boolean standalone) {
- isStandalone = (standalone) ? Boolean.TRUE : Boolean.FALSE;
+ /**
+ * Sett the SAX Locator based on the given StAX Location.
+ * @param location the location
+ * @see ContentHandler#setDocumentLocator(org.xml.sax.Locator)
+ */
+ protected void setLocator(Location location) {
+ if (getContentHandler() != null) {
+ getContentHandler().setDocumentLocator(new StaxLocator(location));
+ }
+ }
+
+ /**
+ * Convert a QName to a qualified name, as used by DOM and SAX.
+ * The returned string has a format of prefix:localName if the
+ * prefix is set, or just localName if not.
+ * @param qName the QName
+ * @return the qualified name
+ */
+ protected String toQualifiedName(QName qName) {
+ String prefix = qName.getPrefix();
+ if (!StringUtils.hasLength(prefix)) {
+ return qName.getLocalPart();
+ }
+ else {
+ return prefix + ":" + qName.getLocalPart();
+ }
}
+
/**
- * Parses the StAX XML reader passed at construction-time.
InputSource is not read, but ignored.
- *
+ * Parse the StAX XML reader passed at construction-time.
+ * NOTE:: The given InputSource is not read, but ignored.
* @param ignored is ignored
- * @throws SAXException A SAX exception, possibly wrapping a XMLStreamException
+ * @throws SAXException a SAX exception, possibly wrapping a XMLStreamException
*/
public final void parse(InputSource ignored) throws SAXException {
parse();
}
/**
- * Parses the StAX XML reader passed at construction-time.
NOTE:: The given system identifier is not read, but ignored.
* @param ignored is ignored
* @throws SAXException A SAX exception, possibly wrapping a XMLStreamException
*/
@@ -144,40 +177,13 @@ abstract class AbstractStaxXMLReader extends AbstractXMLReader {
}
/**
- * Sets the SAX Locator based on the given StAX Location.
- *
- * @param location the location
- * @see ContentHandler#setDocumentLocator(org.xml.sax.Locator)
+ * Template-method that parses the StAX reader passed at construction-time.
*/
- protected void setLocator(Location location) {
- if (getContentHandler() != null) {
- getContentHandler().setDocumentLocator(new StaxLocator(location));
- }
- }
-
- /** Template-method that parses the StAX reader passed at construction-time. */
protected abstract void parseInternal() throws SAXException, XMLStreamException;
- /**
- * Convert a QName to a qualified name, as used by DOM and SAX. The returned string has a format of
- * prefix:localName if the prefix is set, or just localName if not.
- *
- * @param qName the QName
- * @return the qualified name
- */
- protected String toQualifiedName(QName qName) {
- String prefix = qName.getPrefix();
- if (!StringUtils.hasLength(prefix)) {
- return qName.getLocalPart();
- }
- else {
- return prefix + ":" + qName.getLocalPart();
- }
- }
/**
* Implementation of the Locator interface that is based on a StAX Location.
- *
* @see Locator
* @see Location
*/
@@ -205,4 +211,5 @@ abstract class AbstractStaxXMLReader extends AbstractXMLReader {
return location.getColumnNumber();
}
}
+
}
diff --git a/org.springframework.core/src/main/java/org/springframework/util/xml/JaxpVersion.java b/org.springframework.core/src/main/java/org/springframework/util/xml/JaxpVersion.java
deleted file mode 100644
index 0ee4eb17dbc..00000000000
--- a/org.springframework.core/src/main/java/org/springframework/util/xml/JaxpVersion.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2002-2009 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.util.xml;
-
-import org.springframework.util.ClassUtils;
-
-/**
- * Helper class used to find the current version of JAXP. We cannot depend on the Java version, since JAXP can be
- * upgraded independently of the Java version.
(getJaxpVersion() < JAXP_13).
- *
- * @return a code comparable to the JAXP_XX codes in this class
- * @see #JAXP_10
- * @see #JAXP_11
- * @see #JAXP_13
- * @see #JAXP_14
- */
- public static int getJaxpVersion() {
- return jaxpVersion;
- }
-
- /**
- * Convenience method to determine if the current JAXP version is at least 1.3 (packaged with JDK 1.5).
- *
- * @return true if the current JAXP version is at least JAXP 1.3
- * @see #getJaxpVersion()
- * @see #JAXP_13
- */
- public static boolean isAtLeastJaxp13() {
- return getJaxpVersion() >= JAXP_13;
- }
-
- /**
- * Convenience method to determine if the current JAXP version is at least 1.4 (packaged with JDK 1.6).
- *
- * @return true if the current JAXP version is at least JAXP 1.4
- * @see #getJaxpVersion()
- * @see #JAXP_14
- */
- public static boolean isAtLeastJaxp14() {
- return getJaxpVersion() >= JAXP_14;
- }
-
-}
\ No newline at end of file
diff --git a/org.springframework.core/src/main/java/org/springframework/util/xml/StaxUtils.java b/org.springframework.core/src/main/java/org/springframework/util/xml/StaxUtils.java
index 71ce0abbbf1..1734093e8b3 100644
--- a/org.springframework.core/src/main/java/org/springframework/util/xml/StaxUtils.java
+++ b/org.springframework.core/src/main/java/org/springframework/util/xml/StaxUtils.java
@@ -30,27 +30,32 @@ import org.xml.sax.ContentHandler;
import org.xml.sax.XMLReader;
import org.springframework.util.Assert;
+import org.springframework.util.ClassUtils;
/**
* Convenience methods for working with the StAX API.
*
- * In particular, methods for using StAX in combination with the TrAX API (javax.xml.transform), and
- * converting StAX readers/writers into SAX readers/handlers and vice-versa.
+ * In particular, methods for using StAX in combination with the TrAX API
+ * (javax.xml.transform), and converting StAX readers/writers
+ * into SAX readers/handlers and vice-versa.
*
* @author Arjen Poutsma
+ * @author Juergen Hoeller
* @since 3.0
*/
public abstract class StaxUtils {
+ private static boolean jaxp14Available =
+ ClassUtils.isPresent("javax.xml.transform.stax.StAXSource", StaxUtils.class.getClassLoader());
+
+
/**
- * Creates a StAX {@link Source} for the given {@link XMLStreamReader}. Returns a {@link StAXSource} under JAXP 1.4 or
- * higher, or a {@link StaxSource} otherwise.
- *
+ * Create a StAX {@link Source} for the given {@link XMLStreamReader}.
* @param streamReader the StAX stream reader
* @return a source wrapping streamReader
*/
public static Source createStaxSource(XMLStreamReader streamReader) {
- if (JaxpVersion.isAtLeastJaxp14()) {
+ if (jaxp14Available) {
return Jaxp14StaxHandler.createStaxSource(streamReader);
}
else {
@@ -59,15 +64,13 @@ public abstract class StaxUtils {
}
/**
- * Creates a StAX {@link Source} for the given {@link XMLEventReader}. Returns a {@link StAXSource} under JAXP 1.4 or
- * higher, or a {@link StaxSource} otherwise.
- *
+ * Create a StAX {@link Source} for the given {@link XMLEventReader}.
* @param eventReader the StAX event reader
* @return a source wrapping streamReader
* @throws XMLStreamException in case of StAX errors
*/
public static Source createStaxSource(XMLEventReader eventReader) throws XMLStreamException {
- if (JaxpVersion.isAtLeastJaxp14()) {
+ if (jaxp14Available) {
return Jaxp14StaxHandler.createStaxSource(eventReader);
}
else {
@@ -76,14 +79,21 @@ public abstract class StaxUtils {
}
/**
- * Creates a StAX {@link Result} for the given {@link XMLStreamWriter}. Returns a {@link StAXResult} under JAXP 1.4 or
- * higher, or a {@link StaxResult} otherwise.
- *
+ * Indicate whether the given {@link javax.xml.transform.Source} is a StAX Source.
+ * @return true if source is a Spring StaxSource or JAXP
+ * 1.4 {@link javax.xml.transform.stax.StAXSource}; false otherwise.
+ */
+ public static boolean isStaxSource(Source source) {
+ return (source instanceof StaxSource || (jaxp14Available && Jaxp14StaxHandler.isStaxSource(source)));
+ }
+
+ /**
+ * Create a StAX {@link Result} for the given {@link XMLStreamWriter}.
* @param streamWriter the StAX stream writer
* @return a result wrapping streamWriter
*/
public static Result createStaxResult(XMLStreamWriter streamWriter) {
- if (JaxpVersion.isAtLeastJaxp14()) {
+ if (jaxp14Available) {
return Jaxp14StaxHandler.createStaxResult(streamWriter);
}
else {
@@ -92,15 +102,13 @@ public abstract class StaxUtils {
}
/**
- * Creates a StAX {@link Result} for the given {@link XMLEventWriter}. Returns a {@link StAXResult} under JAXP 1.4 or
- * higher, or a {@link StaxResult} otherwise.
- *
+ * Create a StAX {@link Result} for the given {@link XMLEventWriter}.
* @param eventWriter the StAX event writer
* @return a result wrapping streamReader
* @throws XMLStreamException in case of StAX errors
*/
public static Result createStaxResult(XMLEventWriter eventWriter) throws XMLStreamException {
- if (JaxpVersion.isAtLeastJaxp14()) {
+ if (jaxp14Available) {
return Jaxp14StaxHandler.createStaxResult(eventWriter);
}
else {
@@ -109,54 +117,26 @@ public abstract class StaxUtils {
}
/**
- * Indicates whether the given {@link javax.xml.transform.Source} is a StAX Source.
- *
- * @return true if source is a Spring {@link org.springframework.util.xml.StaxSource} or JAXP
- * 1.4 {@link javax.xml.transform.stax.StAXSource}; false otherwise.
- */
- public static boolean isStaxSource(Source source) {
- if (source instanceof StaxSource) {
- return true;
- }
- else if (JaxpVersion.isAtLeastJaxp14()) {
- return Jaxp14StaxHandler.isStaxSource(source);
- }
- else {
- return false;
- }
- }
-
- /**
- * Indicates whether the given {@link javax.xml.transform.Result} is a StAX Result.
- *
- * @return true if result is a Spring {@link org.springframework.util.xml.StaxResult} or JAXP
- * 1.4 {@link javax.xml.transform.stax.StAXResult}; false otherwise.
+ * Indicate whether the given {@link javax.xml.transform.Result} is a StAX Result.
+ * @return true if result is a Spring StaxResult or JAXP
+ * 1.4 {@link javax.xml.transform.stax.StAXResult}; false otherwise.
*/
public static boolean isStaxResult(Result result) {
- if (result instanceof StaxResult) {
- return true;
- }
- else if (JaxpVersion.isAtLeastJaxp14()) {
- return Jaxp14StaxHandler.isStaxResult(result);
- }
- else {
- return false;
- }
+ return (result instanceof StaxResult || (jaxp14Available && Jaxp14StaxHandler.isStaxResult(result)));
}
/**
- * Returns the {@link javax.xml.stream.XMLStreamReader} for the given StAX Source.
- *
- * @param source a Spring {@link org.springframework.util.xml.StaxSource} or {@link javax.xml.transform.stax.StAXSource}
+ * Return the {@link javax.xml.stream.XMLStreamReader} for the given StAX Source.
+ * @param source a Spring StaxSource or JAXP 1.4 {@link javax.xml.transform.stax.StAXSource}
* @return the {@link javax.xml.stream.XMLStreamReader}
- * @throws IllegalArgumentException if source is neither a Spring-WS {@link org.springframework.util.xml.StaxSource}
- * or {@link javax.xml.transform.stax.StAXSource}
+ * @throws IllegalArgumentException if source is neither a Spring StaxSource
+ * nor JAXP 1.4 {@link javax.xml.transform.stax.StAXSource}
*/
public static XMLStreamReader getXMLStreamReader(Source source) {
if (source instanceof StaxSource) {
return ((StaxSource) source).getXMLStreamReader();
}
- else if (JaxpVersion.isAtLeastJaxp14()) {
+ else if (jaxp14Available) {
return Jaxp14StaxHandler.getXMLStreamReader(source);
}
else {
@@ -165,18 +145,17 @@ public abstract class StaxUtils {
}
/**
- * Returns the {@link javax.xml.stream.XMLEventReader} for the given StAX Source.
- *
- * @param source a Spring {@link org.springframework.util.xml.StaxSource} or {@link javax.xml.transform.stax.StAXSource}
+ * Return the {@link javax.xml.stream.XMLEventReader} for the given StAX Source.
+ * @param source a Spring StaxSource or JAXP 1.4 {@link javax.xml.transform.stax.StAXSource}
* @return the {@link javax.xml.stream.XMLEventReader}
- * @throws IllegalArgumentException if source is neither a Spring {@link org.springframework.util.xml.StaxSource}
- * or {@link javax.xml.transform.stax.StAXSource}
+ * @throws IllegalArgumentException if source is neither a Spring StaxSource
+ * nor a JAXP 1.4 {@link javax.xml.transform.stax.StAXSource}
*/
public static XMLEventReader getXMLEventReader(Source source) {
if (source instanceof StaxSource) {
return ((StaxSource) source).getXMLEventReader();
}
- else if (JaxpVersion.isAtLeastJaxp14()) {
+ else if (jaxp14Available) {
return Jaxp14StaxHandler.getXMLEventReader(source);
}
else {
@@ -185,18 +164,17 @@ public abstract class StaxUtils {
}
/**
- * Returns the {@link javax.xml.stream.XMLStreamWriter} for the given StAX Result.
- *
- * @param result a Spring {@link org.springframework.util.xml.StaxResult} or {@link javax.xml.transform.stax.StAXResult}
+ * Return the {@link javax.xml.stream.XMLStreamWriter} for the given StAX Result.
+ * @param result a Spring StaxResult or JAXP 1.4 {@link javax.xml.transform.stax.StAXResult}
* @return the {@link javax.xml.stream.XMLStreamReader}
- * @throws IllegalArgumentException if source is neither a Spring {@link org.springframework.util.xml.StaxResult}
- * or {@link javax.xml.transform.stax.StAXResult}
+ * @throws IllegalArgumentException if source is neither a Spring StaxResult
+ * nor a JAXP 1.4 {@link javax.xml.transform.stax.StAXResult}
*/
public static XMLStreamWriter getXMLStreamWriter(Result result) {
if (result instanceof StaxResult) {
return ((StaxResult) result).getXMLStreamWriter();
}
- else if (JaxpVersion.isAtLeastJaxp14()) {
+ else if (jaxp14Available) {
return Jaxp14StaxHandler.getXMLStreamWriter(result);
}
else {
@@ -205,18 +183,17 @@ public abstract class StaxUtils {
}
/**
- * Returns the {@link XMLEventWriter} for the given StAX Result.
- *
- * @param result a Spring {@link org.springframework.util.xml.StaxResult} or {@link javax.xml.transform.stax.StAXResult}
+ * Return the {@link XMLEventWriter} for the given StAX Result.
+ * @param result a Spring StaxResult or JAXP 1.4 {@link javax.xml.transform.stax.StAXResult}
* @return the {@link javax.xml.stream.XMLStreamReader}
- * @throws IllegalArgumentException if source is neither a Spring {@link org.springframework.util.xml.StaxResult}
- * or {@link javax.xml.transform.stax.StAXResult}
+ * @throws IllegalArgumentException if source is neither a Spring StaxResult
+ * nor a JAXP 1.4 {@link javax.xml.transform.stax.StAXResult}
*/
public static XMLEventWriter getXMLEventWriter(Result result) {
if (result instanceof StaxResult) {
return ((StaxResult) result).getXMLEventWriter();
}
- else if (JaxpVersion.isAtLeastJaxp14()) {
+ else if (jaxp14Available) {
return Jaxp14StaxHandler.getXMLEventWriter(result);
}
else {
@@ -225,8 +202,7 @@ public abstract class StaxUtils {
}
/**
- * Creates a SAX {@link ContentHandler} that writes to the given StAX {@link XMLStreamWriter}.
- *
+ * Create a SAX {@link ContentHandler} that writes to the given StAX {@link XMLStreamWriter}.
* @param streamWriter the StAX stream writer
* @return a content handler writing to the streamWriter
*/
@@ -235,8 +211,7 @@ public abstract class StaxUtils {
}
/**
- * Creates a SAX {@link ContentHandler} that writes events to the given StAX {@link XMLEventWriter}.
- *
+ * Create a SAX {@link ContentHandler} that writes events to the given StAX {@link XMLEventWriter}.
* @param eventWriter the StAX event writer
* @return a content handler writing to the eventWriter
*/
@@ -245,8 +220,7 @@ public abstract class StaxUtils {
}
/**
- * Creates a SAX {@link XMLReader} that reads from the given StAX {@link XMLStreamReader}.
- *
+ * Create a SAX {@link XMLReader} that reads from the given StAX {@link XMLStreamReader}.
* @param streamReader the StAX stream reader
* @return a XMLReader reading from the streamWriter
*/
@@ -255,8 +229,7 @@ public abstract class StaxUtils {
}
/**
- * Creates a SAX {@link XMLReader} that reads from the given StAX {@link XMLEventReader}.
- *
+ * Create a SAX {@link XMLReader} that reads from the given StAX {@link XMLEventReader}.
* @param eventReader the StAX event reader
* @return a XMLReader reading from the eventWriter
*/
@@ -265,16 +238,18 @@ public abstract class StaxUtils {
}
/**
- * Returns a {@link XMLStreamReader} that reads from a {@link XMLEventReader}. Useful, because the StAX
+ * Return a {@link XMLStreamReader} that reads from a {@link XMLEventReader}. Useful, because the StAX
* XMLInputFactory allows one to create a event reader from a stream reader, but not vice-versa.
- *
* @return a stream reader that reads from an event reader
*/
public static XMLStreamReader createEventStreamReader(XMLEventReader eventReader) throws XMLStreamException {
return new XMLEventStreamReader(eventReader);
}
- /** Inner class to avoid a static JAXP 1.4 dependency. */
+
+ /**
+ * Inner class to avoid a static JAXP 1.4 dependency.
+ */
private static class Jaxp14StaxHandler {
private static Source createStaxSource(XMLStreamReader streamReader) {
diff --git a/org.springframework.jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java b/org.springframework.jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java
index 7be914a41d2..12929172b71 100644
--- a/org.springframework.jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java
+++ b/org.springframework.jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2007 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -33,57 +33,54 @@ import javax.xml.transform.stream.StreamSource;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.oxm.Marshaller;
-import org.springframework.oxm.MarshallingFailureException;
import org.springframework.oxm.Unmarshaller;
-import org.springframework.oxm.UnmarshallingFailureException;
+import org.springframework.oxm.XmlMappingException;
import org.springframework.util.Assert;
/**
- * Spring JMS {@link MessageConverter} that uses a {@link Marshaller} and {@link Unmarshaller}. Marshals an object to a
- * {@link BytesMessage}, or to a {@link TextMessage} if the {@link #setMarshalTo marshalTo} is set to {@link
- * #MARSHAL_TO_TEXT_MESSAGE}. Unmarshals from a {@link TextMessage} or {@link BytesMessage} to an object.
+ * Spring JMS {@link MessageConverter} that uses a {@link Marshaller} and {@link Unmarshaller}.
+ * Marshals an object to a {@link BytesMessage}, or to a {@link TextMessage} if the
+ * {@link #setTargetType marshalTo} is set to {@link MessageType#TEXT}.
+ * Unmarshals from a {@link TextMessage} or {@link BytesMessage} to an object.
*
* @author Arjen Poutsma
+ * @author Juergen Hoeller
+ * @since 3.0
* @see org.springframework.jms.core.JmsTemplate#convertAndSend
* @see org.springframework.jms.core.JmsTemplate#receiveAndConvert
- * @since 3.0
*/
public class MarshallingMessageConverter implements MessageConverter, InitializingBean {
- /** Constant that indicates that {@link #toMessage(Object, Session)} should marshal to a {@link BytesMessage}. */
- public static final int MARSHAL_TO_BYTES_MESSAGE = 1;
-
- /** Constant that indicates that {@link #toMessage(Object, Session)} should marshal to a {@link TextMessage}. */
- public static final int MARSHAL_TO_TEXT_MESSAGE = 2;
-
private Marshaller marshaller;
private Unmarshaller unmarshaller;
- private int marshalTo = MARSHAL_TO_BYTES_MESSAGE;
+ private MessageType targetType = MessageType.BYTES;
/**
- * Constructs a new MarshallingMessageConverter with no {@link Marshaller} set. The marshaller must be set
- * after construction by invoking {@link #setMarshaller(Marshaller)}.
+ * Construct a new MarshallingMessageConverter with no {@link Marshaller} set.
+ * The marshaller must be set after construction by invoking {@link #setMarshaller(Marshaller)}.
*/
public MarshallingMessageConverter() {
}
/**
- * Constructs a new MarshallingMessageConverter with the given {@link Marshaller} set. If the given
- * {@link Marshaller} also implements the {@link Unmarshaller} interface, it is used for both marshalling and
- * unmarshalling. Otherwise, an exception is thrown.
MarshallingMessageConverter with the given {@link Marshaller} set.
+ * If the given {@link Marshaller} also implements the {@link Unmarshaller} interface, + * it is used for both marshalling and unmarshalling. Otherwise, an exception is thrown. + *
Note that all {@link Marshaller} implementations in Spring also implement the
+ * {@link Unmarshaller} interface, so that you can safely use this constructor.
* @param marshaller object used as marshaller and unmarshaller
- * @throws IllegalArgumentException when marshaller does not implement the {@link Unmarshaller} interface
+ * @throws IllegalArgumentException when marshaller does not implement the
+ * {@link Unmarshaller} interface as well
*/
public MarshallingMessageConverter(Marshaller marshaller) {
Assert.notNull(marshaller, "marshaller must not be null");
if (!(marshaller instanceof Unmarshaller)) {
- throw new IllegalArgumentException("Marshaller [" + marshaller + "] does not implement the Unmarshaller " +
+ throw new IllegalArgumentException(
+ "Marshaller [" + marshaller + "] does not implement the Unmarshaller " +
"interface. Please set an Unmarshaller explicitely by using the " +
- "AbstractMarshallingPayloadEndpoint(Marshaller, Unmarshaller) constructor.");
+ "MarshallingMessageConverter(Marshaller, Unmarshaller) constructor.");
}
else {
this.marshaller = marshaller;
@@ -92,10 +89,10 @@ public class MarshallingMessageConverter implements MessageConverter, Initializi
}
/**
- * Creates a new MarshallingMessageConverter with the given marshaller and unmarshaller.
- *
- * @param marshaller the marshaller to use
- * @param unmarshaller the unmarshaller to use
+ * Construct a new MarshallingMessageConverter with the
+ * given Marshaller and Unmarshaller.
+ * @param marshaller the Marshaller to use
+ * @param unmarshaller the Unmarshaller to use
*/
public MarshallingMessageConverter(Marshaller marshaller, Unmarshaller unmarshaller) {
Assert.notNull(marshaller, "marshaller must not be null");
@@ -104,52 +101,59 @@ public class MarshallingMessageConverter implements MessageConverter, Initializi
this.unmarshaller = unmarshaller;
}
+
/**
- * Indicates whether {@link #toMessage(Object,Session)} should marshal to a {@link BytesMessage} or a {@link
- * TextMessage}. The default is {@link #MARSHAL_TO_BYTES_MESSAGE}, i.e. this converter marshals to a {@link
- * BytesMessage}.
- *
- * @see #MARSHAL_TO_BYTES_MESSAGE
- * @see #MARSHAL_TO_TEXT_MESSAGE
+ * Set the {@link Marshaller} to be used by this message converter.
*/
- public void setMarshalTo(int marshalTo) {
- this.marshalTo = marshalTo;
- }
-
- /** Sets the {@link Marshaller} to be used by this message converter. */
public void setMarshaller(Marshaller marshaller) {
this.marshaller = marshaller;
}
- /** Sets the {@link Unmarshaller} to be used by this message converter. */
+ /**
+ * Set the {@link Unmarshaller} to be used by this message converter.
+ */
public void setUnmarshaller(Unmarshaller unmarshaller) {
this.unmarshaller = unmarshaller;
}
- public void afterPropertiesSet() throws Exception {
- Assert.notNull(marshaller, "Property 'marshaller' is required");
- Assert.notNull(unmarshaller, "Property 'unmarshaller' is required");
+ /**
+ * Specify whether {@link #toMessage(Object, Session)} should marshal to
+ * a {@link BytesMessage} or a {@link TextMessage}.
+ *
The default is {@link MessageType#BYTES}, i.e. this converter marshals + * to a {@link BytesMessage}. Note that the default version of this converter + * supports {@link MessageType#BYTES} and {@link MessageType#TEXT} only. + * @see MessageType#BYTES + * @see MessageType#TEXT + */ + public void setTargetType(MessageType targetType) { + this.targetType = targetType; + } + + public void afterPropertiesSet() { + Assert.notNull(this.marshaller, "Property 'marshaller' is required"); + Assert.notNull(this.unmarshaller, "Property 'unmarshaller' is required"); } + /** - * Marshals the given object to a {@link TextMessage} or {@link javax.jms.BytesMessage}. The desired message type can - * be defined by setting the {@link #setMarshalTo(int) marshalTo} property. - * + * This implementation marshals the given object to a {@link javax.jms.TextMessage} or + * {@link javax.jms.BytesMessage}. The desired message type can be defined by setting + * the {@link #setTargetType "marshalTo"} property. * @see #marshalToTextMessage * @see #marshalToBytesMessage */ public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { try { - switch (marshalTo) { - case MARSHAL_TO_TEXT_MESSAGE: - return marshalToTextMessage(object, session, marshaller); - case MARSHAL_TO_BYTES_MESSAGE: - return marshalToBytesMessage(object, session, marshaller); + switch (this.targetType) { + case TEXT: + return marshalToTextMessage(object, session, this.marshaller); + case BYTES: + return marshalToBytesMessage(object, session, this.marshaller); default: - return marshalToMessage(object, session, marshaller); + return marshalToMessage(object, session, this.marshaller, this.targetType); } } - catch (MarshallingFailureException ex) { + catch (XmlMappingException ex) { throw new MessageConversionException("Could not marshal [" + object + "]", ex); } catch (IOException ex) { @@ -158,8 +162,7 @@ public class MarshallingMessageConverter implements MessageConverter, Initializi } /** - * Unmarshals the given {@link Message} into an object. - * + * This implementation unmarshals the given {@link Message} into an object. * @see #unmarshalFromTextMessage * @see #unmarshalFromBytesMessage */ @@ -167,38 +170,40 @@ public class MarshallingMessageConverter implements MessageConverter, Initializi try { if (message instanceof TextMessage) { TextMessage textMessage = (TextMessage) message; - return unmarshalFromTextMessage(textMessage, unmarshaller); + return unmarshalFromTextMessage(textMessage, this.unmarshaller); } else if (message instanceof BytesMessage) { BytesMessage bytesMessage = (BytesMessage) message; - return unmarshalFromBytesMessage(bytesMessage, unmarshaller); + return unmarshalFromBytesMessage(bytesMessage, this.unmarshaller); } else { - return unmarshalFromMessage(message, unmarshaller); + return unmarshalFromMessage(message, this.unmarshaller); } } - catch (UnmarshallingFailureException ex) { - throw new MessageConversionException("Could not unmarshal message [" + message + "]", ex); - } catch (IOException ex) { - throw new MessageConversionException("Could not unmarshal message [" + message + "]", ex); + throw new MessageConversionException("Could not access message content: " + message, ex); + } + catch (XmlMappingException ex) { + throw new MessageConversionException("Could not unmarshal message: " + message, ex); } } + /** - * Marshals the given object to a {@link TextMessage}. - * - * @param object the object to be marshalled - * @param session current JMS session + * Marshal the given object to a {@link TextMessage}. + * @param object the object to be marshalled + * @param session current JMS session * @param marshaller the marshaller to use * @return the resulting message * @throws JMSException if thrown by JMS methods - * @throws IOException in case of I/O errors + * @throws IOException in case of I/O errors + * @throws XmlMappingException in case of OXM mapping errors * @see Session#createTextMessage * @see Marshaller#marshal(Object, Result) */ protected TextMessage marshalToTextMessage(Object object, Session session, Marshaller marshaller) - throws JMSException, IOException { + throws JMSException, IOException, XmlMappingException { + StringWriter writer = new StringWriter(); Result result = new StreamResult(writer); marshaller.marshal(object, result); @@ -206,19 +211,20 @@ public class MarshallingMessageConverter implements MessageConverter, Initializi } /** - * Marshals the given object to a {@link BytesMessage}. - * - * @param object the object to be marshalled - * @param session current JMS session + * Marshal the given object to a {@link BytesMessage}. + * @param object the object to be marshalled + * @param session current JMS session * @param marshaller the marshaller to use * @return the resulting message * @throws JMSException if thrown by JMS methods - * @throws IOException in case of I/O errors + * @throws IOException in case of I/O errors + * @throws XmlMappingException in case of OXM mapping errors * @see Session#createBytesMessage * @see Marshaller#marshal(Object, Result) */ protected BytesMessage marshalToBytesMessage(Object object, Session session, Marshaller marshaller) - throws JMSException, IOException { + throws JMSException, IOException, XmlMappingException { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); StreamResult streamResult = new StreamResult(bos); marshaller.marshal(object, streamResult); @@ -228,51 +234,57 @@ public class MarshallingMessageConverter implements MessageConverter, Initializi } /** - * Template method that allows for custom message marshalling. Invoked when {@link #setMarshalTo(int)} is not {@link - * #MARSHAL_TO_TEXT_MESSAGE} or {@link #MARSHAL_TO_BYTES_MESSAGE}.
Default implemenetation throws a {@link - * MessageConversionException}. - * - * @param object the object to marshal - * @param session the JMS session + * Template method that allows for custom message marshalling. + * Invoked when {@link #setTargetType} is not {@link MessageType#TEXT} or + * {@link MessageType#BYTES}. + *The default implementation throws an {@link IllegalArgumentException}. + * @param object the object to marshal + * @param session the JMS session * @param marshaller the marshaller to use + * @param targetType the target message type (other than TEXT or BYTES) * @return the resulting message * @throws JMSException if thrown by JMS methods - * @throws IOException in case of I/O errors + * @throws IOException in case of I/O errors + * @throws XmlMappingException in case of OXM mapping errors */ - protected Message marshalToMessage(Object object, Session session, Marshaller marshaller) - throws JMSException, IOException { - throw new MessageConversionException( - "Unknown 'marshalTo' value [" + marshalTo + "]. Cannot convert object to Message"); + protected Message marshalToMessage(Object object, Session session, Marshaller marshaller, MessageType targetType) + throws JMSException, IOException, XmlMappingException { + + throw new IllegalArgumentException( + "Unsupported message type [" + targetType + "]. Cannot marshal to the specified message type."); } + /** - * Unmarshals the given {@link TextMessage} into an object. - * - * @param message the message + * Unmarshal the given {@link TextMessage} into an object. + * @param message the message * @param unmarshaller the unmarshaller to use * @return the unmarshalled object * @throws JMSException if thrown by JMS methods - * @throws IOException in case of I/O errors + * @throws IOException in case of I/O errors + * @throws XmlMappingException in case of OXM mapping errors * @see Unmarshaller#unmarshal(Source) */ protected Object unmarshalFromTextMessage(TextMessage message, Unmarshaller unmarshaller) - throws JMSException, IOException { + throws JMSException, IOException, XmlMappingException { + Source source = new StreamSource(new StringReader(message.getText())); return unmarshaller.unmarshal(source); } /** - * Unmarshals the given {@link BytesMessage} into an object. - * - * @param message the message + * Unmarshal the given {@link BytesMessage} into an object. + * @param message the message * @param unmarshaller the unmarshaller to use * @return the unmarshalled object * @throws JMSException if thrown by JMS methods - * @throws IOException in case of I/O errors + * @throws IOException in case of I/O errors + * @throws XmlMappingException in case of OXM mapping errors * @see Unmarshaller#unmarshal(Source) */ protected Object unmarshalFromBytesMessage(BytesMessage message, Unmarshaller unmarshaller) - throws JMSException, IOException { + throws JMSException, IOException, XmlMappingException { + byte[] bytes = new byte[(int) message.getBodyLength()]; message.readBytes(bytes); ByteArrayInputStream bis = new ByteArrayInputStream(bytes); @@ -281,19 +293,22 @@ public class MarshallingMessageConverter implements MessageConverter, Initializi } /** - * Template method that allows for custom message unmarshalling. Invoked when {@link #fromMessage(Message)} is invoked - * with a message that is not a {@link TextMessage} or {@link BytesMessage}.
Default implemenetation throws a - * {@link MessageConversionException}. - * - * @param message the message + * Template method that allows for custom message unmarshalling. + * Invoked when {@link #fromMessage(Message)} is invoked with a message + * that is not a {@link TextMessage} or {@link BytesMessage}. + *The default implemenetation throws an {@link IllegalArgumentException}.
+ * @param message the message
* @param unmarshaller the unmarshaller to use
* @return the unmarshalled object
* @throws JMSException if thrown by JMS methods
- * @throws IOException in case of I/O errors
+ * @throws IOException in case of I/O errors
+ * @throws XmlMappingException in case of OXM mapping errors
*/
- protected Object unmarshalFromMessage(Message message, Unmarshaller unmarshaller) throws JMSException, IOException {
- throw new MessageConversionException(
+ protected Object unmarshalFromMessage(Message message, Unmarshaller unmarshaller)
+ throws JMSException, IOException, XmlMappingException {
+
+ throw new IllegalArgumentException(
"MarshallingMessageConverter only supports TextMessages and BytesMessages");
}
-}
+}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorSystemException.java b/org.springframework.jms/src/main/java/org/springframework/jms/support/converter/MessageType.java
similarity index 55%
rename from org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorSystemException.java
rename to org.springframework.jms/src/main/java/org/springframework/jms/support/converter/MessageType.java
index d8a84a945bf..cf62d34f483 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorSystemException.java
+++ b/org.springframework.jms/src/main/java/org/springframework/jms/support/converter/MessageType.java
@@ -1,32 +1,32 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.castor;
-
-import org.springframework.oxm.UncategorizedXmlMappingException;
-
-/**
- * Castor-specific subclass of UncategorizedXmlMappingException, for Castor exceptions that cannot be
- * distinguished further.
- *
- * @author Arjen Poutsma
- * @since 3.0
- */
-public class CastorSystemException extends UncategorizedXmlMappingException {
-
- public CastorSystemException(String msg, Throwable ex) {
- super(msg, ex);
- }
-}
+/*
+ * Copyright 2002-2009 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.jms.support.converter;
+
+/**
+ * Constants that indicate a target message type to convert to: a
+ * {@link javax.jms.TextMessage}, a {@link javax.jms.BytesMessage},
+ * a {@link javax.jms.MapMessage} or an {@link ObjectMessage}.
+ *
+ * @author Juergen Hoeller
+ * @since 3.0
+ * @see MarshallingMessageConverter#setTargetType
+ */
+public enum MessageType {
+
+ TEXT, BYTES, MAP, OBJECT
+
+}
diff --git a/org.springframework.jms/src/test/java/org/springframework/jms/support/converter/MarshallingMessageConverterTests.java b/org.springframework.jms/src/test/java/org/springframework/jms/support/converter/MarshallingMessageConverterTests.java
index b6a562a3a97..861179583d7 100644
--- a/org.springframework.jms/src/test/java/org/springframework/jms/support/converter/MarshallingMessageConverterTests.java
+++ b/org.springframework.jms/src/test/java/org/springframework/jms/support/converter/MarshallingMessageConverterTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2007 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -23,13 +23,16 @@ import javax.xml.transform.Result;
import javax.xml.transform.Source;
import static org.easymock.EasyMock.*;
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.Unmarshaller;
+/**
+ * @author Arjen Poutsma
+ */
public class MarshallingMessageConverterTests {
private MarshallingMessageConverter converter;
@@ -83,7 +86,7 @@ public class MarshallingMessageConverterTests {
@Test
public void toTextMessage() throws Exception {
- converter.setMarshalTo(MarshallingMessageConverter.MARSHAL_TO_TEXT_MESSAGE);
+ converter.setTargetType(MessageType.TEXT);
TextMessage textMessageMock = createMock(TextMessage.class);
Object toBeMarshalled = new Object();
@@ -114,4 +117,4 @@ public class MarshallingMessageConverterTests {
verify(marshallerMock, unmarshallerMock, sessionMock, textMessageMock);
}
-}
\ No newline at end of file
+}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/Marshaller.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/Marshaller.java
index d8b60aa1218..aaa3198025a 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/Marshaller.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/Marshaller.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -13,39 +13,42 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.oxm;
import java.io.IOException;
import javax.xml.transform.Result;
/**
- * Defines the contract for Object XML Mapping Marshallers. Implementations of this interface can serialize a given
- * Object to an XML Stream.
marshal method accepts a java.lang.Object as its
- * first parameter, most Marshaller implementations cannot handle arbitrary java.lang.Object.
- * Instead, a object class must be registered with the marshaller, or have a common base class.
+ * Defines the contract for Object XML Mapping Marshallers. Implementations of this interface
+ * can serialize a given Object to an XML Stream.
+ *
+ * Although the marshal method accepts a java.lang.Object as its
+ * first parameter, most Marshaller implementations cannot handle arbitrary
+ * Objects. Instead, a object class must be registered with the marshaller,
+ * or have a common base class.
*
* @author Arjen Poutsma
* @since 3.0
+ * @see Unmarshaller
*/
public interface Marshaller {
- /**
- * Marshals the object graph with the given root into the provided {@link Result}.
- *
- * @param graph the root of the object graph to marshal
- * @param result the result to marshal to
- * @throws XmlMappingException if the given object cannot be marshalled to the result
- * @throws IOException if an I/O exception occurs
- */
- void marshal(Object graph, Result result) throws XmlMappingException, IOException;
-
/**
* Indicates whether this marshaller can marshal instances of the supplied type.
- *
* @param clazz the class that this marshaller is being asked if it can marshal
- * @return true if this marshaller can indeed marshal instances of the supplied class; false
- * otherwise
+ * @return true if this marshaller can indeed marshal instances of the supplied class;
+ * false otherwise
*/
boolean supports(Class> clazz);
+ /**
+ * Marshals the object graph with the given root into the provided {@link Result}.
+ * @param graph the root of the object graph to marshal
+ * @param result the result to marshal to
+ * @throws IOException if an I/O error occurs
+ * @throws XmlMappingException if the given object cannot be marshalled to the result
+ */
+ void marshal(Object graph, Result result) throws IOException, XmlMappingException;
+
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/GenericMarshallingFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/MarshallingException.java
similarity index 57%
rename from org.springframework.oxm/src/main/java/org/springframework/oxm/GenericMarshallingFailureException.java
rename to org.springframework.oxm/src/main/java/org/springframework/oxm/MarshallingException.java
index ec1abe053de..799bf9b6626 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/GenericMarshallingFailureException.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/MarshallingException.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -13,26 +13,36 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.oxm;
/**
* Base class for exception thrown when a marshalling or unmarshalling error occurs.
*
* @author Arjen Poutsma
+ * @author Juergen Hoeller
+ * @since 3.0
* @see MarshallingFailureException
* @see UnmarshallingFailureException
- * @since 3.0
*/
-public abstract class GenericMarshallingFailureException extends XmlMappingException {
+public abstract class MarshallingException extends XmlMappingException {
- /** Constructor for GenericMarshallingFailureException. */
- public GenericMarshallingFailureException(String msg) {
+ /**
+ * Construct a MarshallingException with the specified detail message.
+ * @param msg the detail message
+ */
+ protected MarshallingException(String msg) {
super(msg);
}
- /** Constructor for GenericMarshallingFailureException. */
- public GenericMarshallingFailureException(String msg, Throwable ex) {
- super(msg, ex);
+ /**
+ * Construct a MarshallingException with the specified detail message
+ * and nested exception.
+ * @param msg the detail message
+ * @param cause the nested exception
+ */
+ protected MarshallingException(String msg, Throwable cause) {
+ super(msg, cause);
}
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/MarshallingFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/MarshallingFailureException.java
index 995e0db8d15..fb486b3dafd 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/MarshallingFailureException.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/MarshallingFailureException.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.oxm;
/**
@@ -21,11 +22,10 @@ package org.springframework.oxm;
* @author Arjen Poutsma
* @since 3.0
*/
-public class MarshallingFailureException extends GenericMarshallingFailureException {
+public class MarshallingFailureException extends MarshallingException {
/**
* Construct a MarshallingFailureException with the specified detail message.
- *
* @param msg the detail message
*/
public MarshallingFailureException(String msg) {
@@ -33,12 +33,13 @@ public class MarshallingFailureException extends GenericMarshallingFailureExcept
}
/**
- * Construct a MarshallingFailureException with the specified detail message and nested exception.
- *
+ * Construct a MarshallingFailureException with the specified detail message
+ * and nested exception.
* @param msg the detail message
- * @param ex the nested exception
+ * @param cause the nested exception
*/
- public MarshallingFailureException(String msg, Throwable ex) {
- super(msg, ex);
+ public MarshallingFailureException(String msg, Throwable cause) {
+ super(msg, cause);
}
+
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/UncategorizedXmlMappingException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/UncategorizedMappingException.java
similarity index 56%
rename from org.springframework.oxm/src/main/java/org/springframework/oxm/UncategorizedXmlMappingException.java
rename to org.springframework.oxm/src/main/java/org/springframework/oxm/UncategorizedMappingException.java
index ea2d0d1b902..127c38b7ecf 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/UncategorizedXmlMappingException.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/UncategorizedMappingException.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -13,18 +13,25 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.oxm;
/**
- * Superclass for exceptions that cannot be distinguished further.
+ * Exception that indicates that the cause cannot be distinguished further.
*
* @author Arjen Poutsma
* @since 3.0
*/
-public abstract class UncategorizedXmlMappingException extends XmlMappingException {
+public class UncategorizedMappingException extends XmlMappingException {
- /** Constructor for UncategorizedXmlMappingException. */
- protected UncategorizedXmlMappingException(String msg, Throwable ex) {
- super(msg, ex);
+ /**
+ * Construct an UncategorizedMappingException with the specified detail message
+ * and nested exception.
+ * @param msg the detail message
+ * @param cause the nested exception
+ */
+ public UncategorizedMappingException(String msg, Throwable cause) {
+ super(msg, cause);
}
+
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/Unmarshaller.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/Unmarshaller.java
index 156ee9f7ad6..e1534f3f2f0 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/Unmarshaller.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/Unmarshaller.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2005-2007 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -13,37 +13,37 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.oxm;
import java.io.IOException;
import javax.xml.transform.Source;
/**
- * Defines the contract for Object XML Mapping unmarshallers.
Implementations of this interface can deserialize
- * a given XML Stream to an Object graph.
+ * Defines the contract for Object XML Mapping unmarshallers. Implementations of this
+ * interface can deserialize a given XML Stream to an Object graph.
*
* @author Arjen Poutsma
* @since 3.0
+ * @see Marshaller
*/
public interface Unmarshaller {
+ /**
+ * Indicates whether this unmarshaller can unmarshal instances of the supplied type.
+ * @param clazz the class that this unmarshaller is being asked if it can marshal
+ * @return You cannot set both this property and the mapping (location).
*/
- public boolean isValidating() {
- return validating;
+ public void setTargetClass(Class targetClass) {
+ this.targetClass = targetClass;
}
/**
- * Sets whether this marshaller should validate in- and outgoing documents. Default is Default is Default is Default is Default is The default implementation loads mapping files if defined, and the target class if not defined.
* @return the created resolver
* @throws MappingException when the mapping file cannot be loaded
- * @throws IOException in case of I/O errors
+ * @throws IOException in case of I/O errors
* @see XMLContext#addMapping(org.exolab.castor.mapping.Mapping)
* @see XMLContext#addClass(Class)
*/
protected XMLContext createXMLContext(Resource[] mappingLocations, Class targetClass)
- throws MappingException, IOException, ResolverException {
+ throws MappingException, ResolverException, IOException {
+
XMLContext context = new XMLContext();
if (!ObjectUtils.isEmpty(mappingLocations)) {
Mapping mapping = new Mapping();
for (Resource mappingLocation : mappingLocations) {
- mapping.loadMapping(SaxUtils.createInputSource(mappingLocation));
+ mapping.loadMapping(SaxResourceUtils.createInputSource(mappingLocation));
}
context.addMapping(mapping);
}
@@ -272,9 +235,16 @@ public class CastorMarshaller extends AbstractMarshaller implements Initializing
return context;
}
- //
+
+ /**
+ * Returns The default implementation invokes {@link Marshaller#setValidation(boolean)}
+ * with the property set on this marshaller, and calls {@link Marshaller#setNamespaceMapping(String, String)}
+ * with the {@linkplain #setNamespaceMappings(java.util.Properties) namespace mappings}.
*/
protected void customizeMarshaller(Marshaller marshaller) {
- marshaller.setValidation(isValidating());
- Properties namespaceMappings = getNamespaceMappings();
- if (namespaceMappings != null) {
- for (Iterator iterator = namespaceMappings.keySet().iterator(); iterator.hasNext();) {
- String prefix = (String) iterator.next();
- String uri = namespaceMappings.getProperty(prefix);
- marshaller.setNamespaceMapping(prefix, uri);
+ marshaller.setValidation(this.validating);
+ if (this.namespaceMappings != null) {
+ for (Map.Entry The default implementation invokes {@link Unmarshaller#setValidation(boolean)},
+ * {@link Unmarshaller#setWhitespacePreserve(boolean)}, {@link Unmarshaller#setIgnoreExtraAttributes(boolean)},
+ * and {@link Unmarshaller#setIgnoreExtraElements(boolean)} with the properties set on this marshaller.
*/
protected void customizeUnmarshaller(Unmarshaller unmarshaller) {
- unmarshaller.setValidation(isValidating());
- unmarshaller.setWhitespacePreserve(getWhitespacePreserve());
- unmarshaller.setIgnoreExtraAttributes(getIgnoreExtraAttributes());
- unmarshaller.setIgnoreExtraElements(getIgnoreExtraElements());
+ unmarshaller.setValidation(this.validating);
+ unmarshaller.setWhitespacePreserve(this.whitespacePreserve);
+ unmarshaller.setIgnoreExtraAttributes(this.ignoreExtraAttributes);
+ unmarshaller.setIgnoreExtraElements(this.ignoreExtraElements);
}
/**
- * Converts the given A boolean flag is used to indicate whether this exception occurs during marshalling or
+ * unmarshalling, since Castor itself does not make this distinction in its exception hierarchy.
+ * @param ex Castor Default implementation sets the {@link #setMarshallerProperties(Map) defined properties}, the {@link
- * #setValidationEventHandler(ValidationEventHandler) validation event handler}, the {@link #setSchemas(Resource[])
- * schemas}, {@link #setMarshallerListener(Marshaller.Listener) listener}, and {@link #setAdapters(XmlAdapter[])
- * adapters}.
- */
- protected void initJaxbMarshaller(Marshaller marshaller) throws JAXBException {
- if (marshallerProperties != null) {
- for (String name : marshallerProperties.keySet()) {
- marshaller.setProperty(name, marshallerProperties.get(name));
- }
- }
- if (validationEventHandler != null) {
- marshaller.setEventHandler(validationEventHandler);
- }
- if (schema != null) {
- marshaller.setSchema(schema);
- }
- if (marshallerListener != null) {
- marshaller.setListener(marshallerListener);
- }
- if (adapters != null) {
- for (XmlAdapter adapter : adapters) {
- marshaller.setAdapter(adapter);
- }
- }
- }
+ // Marshalling
public void marshal(Object graph, Result result) throws XmlMappingException {
marshal(graph, result, null);
@@ -426,7 +374,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
public void marshal(Object graph, Result result, MimeContainer mimeContainer) throws XmlMappingException {
try {
Marshaller marshaller = createMarshaller();
- if (mtomEnabled && mimeContainer != null) {
+ if (this.mtomEnabled && mimeContainer != null) {
marshaller.setAttachmentMarshaller(new Jaxb2AttachmentMarshaller(mimeContainer));
}
if (StaxUtils.isStaxResult(result)) {
@@ -457,18 +405,14 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
}
}
- /*
- * Unmarshalling
- */
-
/**
- * Returns a newly created JAXB unmarshaller. JAXB unmarshallers are not necessarily thread safe.
+ * Return a newly created JAXB marshaller. JAXB marshallers are not necessarily thread safe.
*/
- private Unmarshaller createUnmarshaller() {
+ protected Marshaller createMarshaller() {
try {
- Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
- initJaxbUnmarshaller(unmarshaller);
- return unmarshaller;
+ Marshaller marshaller = this.jaxbContext.createMarshaller();
+ initJaxbMarshaller(marshaller);
+ return marshaller;
}
catch (JAXBException ex) {
throw convertJaxbException(ex);
@@ -476,36 +420,38 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
}
/**
- * Template method that can be overridden by concrete JAXB marshallers for custom initialization behavior. Gets called
- * after creation of JAXB Default implementation sets the {@link #setUnmarshallerProperties(Map) defined properties}, the {@link
+ * Template method that can be overridden by concrete JAXB marshallers for custom initialization behavior.
+ * Gets called after creation of JAXB The default implementation sets the {@link #setMarshallerProperties(Map) defined properties}, the {@link
* #setValidationEventHandler(ValidationEventHandler) validation event handler}, the {@link #setSchemas(Resource[])
- * schemas}, {@link #setUnmarshallerListener(Unmarshaller.Listener) listener}, and {@link #setAdapters(XmlAdapter[])
+ * schemas}, {@link #setMarshallerListener(Marshaller.Listener) listener}, and {@link #setAdapters(XmlAdapter[])
* adapters}.
*/
- protected void initJaxbUnmarshaller(Unmarshaller unmarshaller) throws JAXBException {
- if (unmarshallerProperties != null) {
- for (String name : unmarshallerProperties.keySet()) {
- unmarshaller.setProperty(name, unmarshallerProperties.get(name));
+ protected void initJaxbMarshaller(Marshaller marshaller) throws JAXBException {
+ if (this.marshallerProperties != null) {
+ for (String name : this.marshallerProperties.keySet()) {
+ marshaller.setProperty(name, this.marshallerProperties.get(name));
}
}
- if (validationEventHandler != null) {
- unmarshaller.setEventHandler(validationEventHandler);
- }
- if (schema != null) {
- unmarshaller.setSchema(schema);
+ if (this.marshallerListener != null) {
+ marshaller.setListener(this.marshallerListener);
}
- if (unmarshallerListener != null) {
- unmarshaller.setListener(unmarshallerListener);
+ if (this.validationEventHandler != null) {
+ marshaller.setEventHandler(this.validationEventHandler);
}
- if (adapters != null) {
- for (XmlAdapter adapter : adapters) {
- unmarshaller.setAdapter(adapter);
+ if (this.adapters != null) {
+ for (XmlAdapter adapter : this.adapters) {
+ marshaller.setAdapter(adapter);
}
}
+ if (this.schema != null) {
+ marshaller.setSchema(this.schema);
+ }
}
+
+ // Unmarshalling
+
public Object unmarshal(Source source) throws XmlMappingException {
return unmarshal(source, null);
}
@@ -513,7 +459,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
public Object unmarshal(Source source, MimeContainer mimeContainer) throws XmlMappingException {
try {
Unmarshaller unmarshaller = createUnmarshaller();
- if (mtomEnabled && mimeContainer != null) {
+ if (this.mtomEnabled && mimeContainer != null) {
unmarshaller.setAttachmentUnmarshaller(new Jaxb2AttachmentUnmarshaller(mimeContainer));
}
if (StaxUtils.isStaxSource(source)) {
@@ -544,22 +490,73 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
}
}
+ /**
+ * Return a newly created JAXB unmarshaller. JAXB unmarshallers are not necessarily thread safe.
+ */
+ protected Unmarshaller createUnmarshaller() {
+ try {
+ Unmarshaller unmarshaller = this.jaxbContext.createUnmarshaller();
+ initJaxbUnmarshaller(unmarshaller);
+ return unmarshaller;
+ }
+ catch (JAXBException ex) {
+ throw convertJaxbException(ex);
+ }
+ }
+
+ /**
+ * Template method that can be overridden by concrete JAXB marshallers for custom initialization behavior.
+ * Gets called after creation of JAXB The default implementation sets the {@link #setUnmarshallerProperties(Map) defined properties}, the {@link
+ * #setValidationEventHandler(ValidationEventHandler) validation event handler}, the {@link #setSchemas(Resource[])
+ * schemas}, {@link #setUnmarshallerListener(Unmarshaller.Listener) listener}, and {@link #setAdapters(XmlAdapter[])
+ * adapters}.
+ */
+ protected void initJaxbUnmarshaller(Unmarshaller unmarshaller) throws JAXBException {
+ if (this.unmarshallerProperties != null) {
+ for (String name : this.unmarshallerProperties.keySet()) {
+ unmarshaller.setProperty(name, this.unmarshallerProperties.get(name));
+ }
+ }
+ if (this.unmarshallerListener != null) {
+ unmarshaller.setListener(this.unmarshallerListener);
+ }
+ if (this.validationEventHandler != null) {
+ unmarshaller.setEventHandler(this.validationEventHandler);
+ }
+ if (this.adapters != null) {
+ for (XmlAdapter adapter : this.adapters) {
+ unmarshaller.setAdapter(adapter);
+ }
+ }
+ if (this.schema != null) {
+ unmarshaller.setSchema(this.schema);
+ }
+ }
+
+
/**
* Convert the given The typical usage will be to set the A boolean flag is used to indicate whether this exception occurs during marshalling or
+ * unmarshalling, since JiBX itself does not make this distinction in its exception hierarchy.
+ * @param ex This implementation inspects the given result, and calls This implementation inspects the given result, and calls Can be overridden in subclasses, adding further initialization of the builder.
* @param factory the The resulting This implementation delegates to This implementation delegates to This implementation delegates to This implementation delegates to This implementation delegates to This implementation delegates to This implementation delegates to This implementation defers to In practice, node is be a Even though Sets the system identifier to the resource's Returns Options can be set by setting the Unmarshalled objects can be validated by setting the NOTE: Due to the nature of XMLBeans, this marshaller requires
+ * all passed objects to be of type {@link XmlObject}.
*
* @author Arjen Poutsma
- * @see #setXmlOptions(org.apache.xmlbeans.XmlOptions)
- * @see XmlOptionsFactoryBean
- * @see #setValidating(boolean)
* @since 3.0
+ * @see #setValidating
+ * @see #setXmlOptions
+ * @see XmlOptionsFactoryBean
*/
public class XmlBeansMarshaller extends AbstractMarshaller {
@@ -55,16 +80,9 @@ public class XmlBeansMarshaller extends AbstractMarshaller {
private boolean validating = false;
- /**
- * Returns the A boolean flag is used to indicate whether this exception occurs during marshalling or
+ * unmarshalling, since XMLBeans itself does not make this distinction in its exception hierarchy.
+ * @param ex XMLBeans Exception that occured
+ * @param marshalling indicates whether the exception occurs during marshalling ( Typical usage will be to set XMLBeans options on this bean, and refer to it
+ * in the {@link XmlBeansMarshaller}.
*
* @author Arjen Poutsma
+ * @since 3.0
* @see XmlOptions
* @see #setOptions(java.util.Map)
- * @see XmlBeansMarshaller#setXmlOptions(org.apache.xmlbeans.XmlOptions)
- * @since 3.0
+ * @see XmlBeansMarshaller#setXmlOptions(XmlOptions)
*/
-public class XmlOptionsFactoryBean implements FactoryBean, InitializingBean {
+public class XmlOptionsFactoryBean implements FactoryBean The keys of the supplied map should be one of the String constants
+ * defined in By default, XStream does not require any further configuration,
+ * though class aliases can be used to have more control over the behavior of XStream.
+ *
+ * Due to XStream's API, it is required to set the encoding used for writing to OutputStreams.
+ * It defaults to NOTE: XStream is an XML serialization library, not a data binding library.
+ * Therefore, it has limited namespace support. As such, it is rather unsuitable for
+ * usage within Web services.
*
* @author Peter Meijer
* @author Arjen Poutsma
- * @see #setEncoding(String)
- * @see #DEFAULT_ENCODING
- * @see #setAliases(Map)
- * @see #setConverters(ConverterMatcher[])
* @since 3.0
+ * @see #setAliases
+ * @see #setConverters
+ * @see #setEncoding
*/
public class XStreamMarshaller extends AbstractMarshaller {
- /** The default encoding used for stream access. */
+ /**
+ * The default encoding used for stream access: UTF-8.
+ */
public static final String DEFAULT_ENCODING = "UTF-8";
- private XStream xstream = new XStream();
-
- private String encoding;
- private Class[] supportedClasses;
+ private final XStream xstream = new XStream();
- /** Specialized driver to be used with stream readers and writers */
private HierarchicalStreamDriver streamDriver;
- /**
- * Returns the encoding to be used for stream access. If this property is not set, the default encoding is used.
- *
- * @see #DEFAULT_ENCODING
- */
- public String getEncoding() {
- return encoding != null ? encoding : DEFAULT_ENCODING;
- }
+ private String encoding = DEFAULT_ENCODING;
+
+ private Class[] supportedClasses;
+
/**
- * Sets the encoding to be used for stream access. If this property is not set, the default encoding is used.
- *
- * @see #DEFAULT_ENCODING
+ * Returns the XStream instance used by this marshaller.
*/
- public void setEncoding(String encoding) {
- this.encoding = encoding;
- }
-
- /** Returns the XStream instance used by this marshaller. */
- public XStream getXStream() {
- return xstream;
+ public final XStream getXStream() {
+ return this.xstream;
}
/**
- * Sets the XStream mode.
- *
+ * Set the XStream mode.
* @see XStream#XPATH_REFERENCES
* @see XStream#ID_REFERENCES
* @see XStream#NO_REFERENCES
*/
public void setMode(int mode) {
- getXStream().setMode(mode);
+ this.xstream.setMode(mode);
}
/**
- * Sets the classes supported by this marshaller. If this property is empty (the default), all classes are supported.
- *
- * @see #supports(Class)
- */
- public void setSupportedClasses(Class[] supportedClasses) {
- this.supportedClasses = supportedClasses;
- }
-
- /**
- * Sets the If this property is empty (the default), all classes are supported.
+ * @see #supports(Class)
+ */
+ public void setSupportedClasses(Class[] supportedClasses) {
+ this.supportedClasses = supportedClasses;
+ }
+
+
public boolean supports(Class clazz) {
- if (ObjectUtils.isEmpty(supportedClasses)) {
+ if (ObjectUtils.isEmpty(this.supportedClasses)) {
return true;
}
else {
- for (Class supportedClass : supportedClasses) {
+ for (Class supportedClass : this.supportedClasses) {
if (supportedClass.isAssignableFrom(clazz)) {
return true;
}
@@ -331,36 +291,8 @@ public class XStreamMarshaller extends AbstractMarshaller {
}
}
- /**
- * Convert the given XStream exception to an appropriate exception from the A boolean flag is used to indicate whether this exception occurs during marshalling or
+ * unmarshalling, since XStream itself does not make this distinction in its exception hierarchy.
+ * @param ex XStream exception that occured
+ * @param marshalling indicates whether the exception occurs during marshalling ( A boolean flag is used to indicate whether this exception occurs during marshalling or
* unmarshalling, since XStream itself does not make this distinction in its exception hierarchy.
- *
- * @param ex XStream exception that occured
- * @param marshalling indicates whether the exception occurs during marshalling (true if this unmarshaller can indeed unmarshal to the supplied class;
+ * false otherwise
+ */
+ boolean supports(Class> clazz);
+
/**
* Unmarshals the given {@link Source} into an object graph.
- *
* @param source the source to marshal from
* @return the object graph
+ * @throws IOException if an I/O error occurs
* @throws XmlMappingException if the given source cannot be mapped to an object
- * @throws IOException if an I/O Exception occurs
*/
- Object unmarshal(Source source) throws XmlMappingException, IOException;
-
- /**
- * Indicates whether this unmarshaller can unmarshal instances of the supplied type.
- *
- * @param clazz the class that this unmarshaller is being asked if it can marshal
- * @return true if this unmarshaller can indeed unmarshal to the supplied class; false
- * otherwise
- */
- boolean supports(Class> clazz);
+ Object unmarshal(Source source) throws IOException, XmlMappingException;
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/UnmarshallingFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/UnmarshallingFailureException.java
index 877c63eb286..16b93de1df2 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/UnmarshallingFailureException.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/UnmarshallingFailureException.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.oxm;
/**
@@ -21,15 +22,24 @@ package org.springframework.oxm;
* @author Arjen Poutsma
* @since 3.0
*/
-public class UnmarshallingFailureException extends GenericMarshallingFailureException {
+public class UnmarshallingFailureException extends MarshallingException {
- /** Constructor for UnmarshallingFailureException. */
+ /**
+ * Construct a MarshallingFailureException with the specified detail message.
+ * @param msg the detail message
+ */
public UnmarshallingFailureException(String msg) {
super(msg);
}
- /** Constructor for UnmarshallingFailureException. */
- public UnmarshallingFailureException(String msg, Throwable ex) {
- super(msg, ex);
+ /**
+ * Construct a MarshallingFailureException with the specified detail message
+ * and nested exception.
+ * @param msg the detail message
+ * @param cause the nested exception
+ */
+ public UnmarshallingFailureException(String msg, Throwable cause) {
+ super(msg, cause);
}
+
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/ValidationFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/ValidationFailureException.java
index addc48db5a2..6b2aadcbcab 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/ValidationFailureException.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/ValidationFailureException.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.oxm;
/**
@@ -23,13 +24,22 @@ package org.springframework.oxm;
*/
public class ValidationFailureException extends XmlMappingException {
- /** Constructor for ValidationFailureException. */
+ /**
+ * Construct a ValidationFailureException with the specified detail message.
+ * @param msg the detail message
+ */
public ValidationFailureException(String msg) {
super(msg);
}
- /** Constructor for ValidationFailureException. */
- public ValidationFailureException(String msg, Throwable ex) {
- super(msg, ex);
+ /**
+ * Construct a ValidationFailureException with the specified detail message
+ * and nested exception.
+ * @param msg the detail message
+ * @param cause the nested exception
+ */
+ public ValidationFailureException(String msg, Throwable cause) {
+ super(msg, cause);
}
+
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/XmlMappingException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/XmlMappingException.java
index 12f5575959a..bdcef11a4ca 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/XmlMappingException.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/XmlMappingException.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.oxm;
import org.springframework.core.NestedRuntimeException;
@@ -25,13 +26,22 @@ import org.springframework.core.NestedRuntimeException;
*/
public abstract class XmlMappingException extends NestedRuntimeException {
- /** Constructor for XmlMappingException. */
+ /**
+ * Construct an XmlMappingException with the specified detail message.
+ * @param msg the detail message
+ */
public XmlMappingException(String msg) {
super(msg);
}
- /** Constructor for XmlMappingException. */
- public XmlMappingException(String msg, Throwable ex) {
- super(msg, ex);
+ /**
+ * Construct an XmlMappingException with the specified detail message
+ * and nested exception.
+ * @param msg the detail message
+ * @param cause the nested exception
+ */
+ public XmlMappingException(String msg, Throwable cause) {
+ super(msg, cause);
}
+
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorMarshallingFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorMappingException.java
similarity index 51%
rename from org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorMarshallingFailureException.java
rename to org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorMappingException.java
index f225106095b..fc881da516b 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorMarshallingFailureException.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorMappingException.java
@@ -1,35 +1,39 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.castor;
-
-import org.exolab.castor.xml.MarshalException;
-
-import org.springframework.oxm.MarshallingFailureException;
-
-/**
- * Castor-specific subclass of MarshallingFailureException.
- *
- * @author Arjen Poutsma
- * @see CastorUtils#convertXmlException
- * @since 3.0
- */
-public class CastorMarshallingFailureException extends MarshallingFailureException {
-
- public CastorMarshallingFailureException(MarshalException ex) {
- super("Castor marshalling exception: " + ex.getMessage(), ex);
- }
-
-}
+/*
+ * Copyright 2002-2009 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.oxm.castor;
+
+import org.springframework.oxm.XmlMappingException;
+
+/**
+ * Exception thrown by {@link CastorMarshaller} whenever it encounters a mapping problem.
+ *
+ * @author Juergen Hoeller
+ * @since 3.0
+ */
+public class CastorMappingException extends XmlMappingException {
+
+ /**
+ * Construct a CastorMappingException with the specified detail message
+ * and nested exception.
+ * @param msg the detail message
+ * @param cause the nested exception
+ */
+ public CastorMappingException(String msg, Throwable cause) {
+ super(msg, cause);
+ }
+
+}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorMarshaller.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorMarshaller.java
index 6fe76dfde98..e4b5d998259 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorMarshaller.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorMarshaller.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.oxm.castor;
import java.io.IOException;
@@ -21,8 +22,7 @@ import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
-import java.util.Iterator;
-import java.util.Properties;
+import java.util.Map;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLStreamReader;
@@ -30,13 +30,14 @@ import javax.xml.stream.XMLStreamWriter;
import org.exolab.castor.mapping.Mapping;
import org.exolab.castor.mapping.MappingException;
-import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.ResolverException;
import org.exolab.castor.xml.UnmarshalHandler;
import org.exolab.castor.xml.Unmarshaller;
import org.exolab.castor.xml.XMLContext;
import org.exolab.castor.xml.XMLException;
+import org.exolab.castor.xml.ValidationException;
+import org.exolab.castor.xml.MarshalException;
import org.w3c.dom.Node;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
@@ -46,12 +47,16 @@ import org.xml.sax.ext.LexicalHandler;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.Resource;
-import org.springframework.oxm.AbstractMarshaller;
+import org.springframework.oxm.UnmarshallingFailureException;
import org.springframework.oxm.XmlMappingException;
+import org.springframework.oxm.ValidationFailureException;
+import org.springframework.oxm.MarshallingFailureException;
+import org.springframework.oxm.UncategorizedMappingException;
+import org.springframework.oxm.support.AbstractMarshaller;
+import org.springframework.oxm.support.SaxResourceUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.util.xml.DomUtils;
-import org.springframework.util.xml.SaxUtils;
import org.springframework.util.xml.StaxUtils;
/**
@@ -76,18 +81,17 @@ import org.springframework.util.xml.StaxUtils;
public class CastorMarshaller extends AbstractMarshaller implements InitializingBean {
/**
- * The default encoding used for stream access.
+ * The default encoding used for stream access: UTF-8.
*/
public static final String DEFAULT_ENCODING = "UTF-8";
+
private Resource[] mappingLocations;
private String encoding = DEFAULT_ENCODING;
private Class targetClass;
- private XMLContext xmlContext;
-
private boolean validating = false;
private boolean whitespacePreserve = false;
@@ -96,68 +100,45 @@ public class CastorMarshaller extends AbstractMarshaller implements Initializing
private boolean ignoreExtraElements = false;
- private Properties namespaceMappings;
+ private Maptrue: extra attributes are ignored.
- *
- * @see org.exolab.castor.xml.Unmarshaller#setIgnoreExtraAttributes(boolean)
- */
- public void setIgnoreExtraAttributes(boolean ignoreExtraAttributes) {
- this.ignoreExtraAttributes = ignoreExtraAttributes;
- }
+ private XMLContext xmlContext;
- /**
- * Returns whether the Castor {@link Unmarshaller} should ignore elements that do not match a specific field.
- */
- public boolean getIgnoreExtraElements() {
- return ignoreExtraElements;
- }
/**
- * Sets whether the Castor {@link Unmarshaller} should ignore elements that do not match a specific field. Default is
- * false, extra attributes are flagged as an error.
- *
- * @see org.exolab.castor.xml.Unmarshaller#setIgnoreExtraElements(boolean)
+ * Set the encoding to be used for stream access.
+ * @see #DEFAULT_ENCODING
*/
- public void setIgnoreExtraElements(boolean ignoreExtraElements) {
- this.ignoreExtraElements = ignoreExtraElements;
+ public void setEncoding(String encoding) {
+ this.encoding = encoding;
}
/**
- * Returns whether the Castor {@link Unmarshaller} should preserve "ignorable" whitespace.
+ * Set the locations of the Castor XML Mapping files.
*/
- public boolean getWhitespacePreserve() {
- return whitespacePreserve;
+ public void setMappingLocation(Resource mappingLocation) {
+ this.mappingLocations = new Resource[] {mappingLocation};
}
/**
- * Sets whether the Castor {@link Unmarshaller} should preserve "ignorable" whitespace. Default is false.
- *
- * @see org.exolab.castor.xml.Unmarshaller#setWhitespacePreserve(boolean)
+ * Set the locations of the Castor XML Mapping files.
*/
- public void setWhitespacePreserve(boolean whitespacePreserve) {
- this.whitespacePreserve = whitespacePreserve;
+ public void setMappingLocations(Resource[] mappingLocations) {
+ this.mappingLocations = mappingLocations;
}
/**
- * Returns whether this marshaller should validate in- and outgoing documents.
+ * Set the Castor target class. If this property is set, this CastorMarshaller
+ * is tied to this one specific class. Use a mapping file for unmarshalling multiple classes.
+ * false.
- *
+ * Set whether this marshaller should validate in- and outgoing documents.
+ * false.
* @see Marshaller#setValidation(boolean)
*/
public void setValidating(boolean validating) {
@@ -165,104 +146,86 @@ public class CastorMarshaller extends AbstractMarshaller implements Initializing
}
/**
- * Returns the namespace mappings. Property names are interpreted as namespace prefixes; values are namespace URIs.
+ * Set whether the Castor {@link Unmarshaller} should preserve "ignorable" whitespace.
+ * false.
+ * @see org.exolab.castor.xml.Unmarshaller#setWhitespacePreserve(boolean)
*/
- public Properties getNamespaceMappings() {
- return namespaceMappings;
+ public void setWhitespacePreserve(boolean whitespacePreserve) {
+ this.whitespacePreserve = whitespacePreserve;
}
/**
- * Sets the namespace mappings. Property names are interpreted as namespace prefixes; values are namespace URIs.
- *
- * @see org.exolab.castor.xml.Marshaller#setNamespaceMapping(String, String)
+ * Set whether the Castor {@link Unmarshaller} should ignore attributes that do not match a specific field.
+ * true: extra attributes are ignored.
+ * @see org.exolab.castor.xml.Unmarshaller#setIgnoreExtraAttributes(boolean)
*/
- public void setNamespaceMappings(Properties namespaceMappings) {
- this.namespaceMappings = namespaceMappings;
+ public void setIgnoreExtraAttributes(boolean ignoreExtraAttributes) {
+ this.ignoreExtraAttributes = ignoreExtraAttributes;
}
/**
- * Sets the encoding to be used for stream access. If this property is not set, the default encoding is used.
- *
- * @see #DEFAULT_ENCODING
+ * Set whether the Castor {@link Unmarshaller} should ignore elements that do not match a specific field.
+ * false, extra attributes are flagged as an error.
+ * @see org.exolab.castor.xml.Unmarshaller#setIgnoreExtraElements(boolean)
*/
- public void setEncoding(String encoding) {
- this.encoding = encoding;
+ public void setIgnoreExtraElements(boolean ignoreExtraElements) {
+ this.ignoreExtraElements = ignoreExtraElements;
}
/**
- * Sets the locations of the Castor XML Mapping files.
+ * Set the namespace mappings. Property names are interpreted as namespace prefixes; values are namespace URIs.
+ * @see org.exolab.castor.xml.Marshaller#setNamespaceMapping(String, String)
*/
- public void setMappingLocation(Resource mappingLocation) {
- mappingLocations = new Resource[]{mappingLocation};
+ public void setNamespaceMappings(MapCastorMarshaller is tied to this one
- * specific class. Use a mapping file for unmarshalling multiple classes. You cannot set both this property and
- * the mapping (location).
- */
- public void setTargetClass(Class targetClass) {
- this.targetClass = targetClass;
- }
- public final void afterPropertiesSet() throws IOException {
- if (mappingLocations != null && targetClass != null) {
+ public final void afterPropertiesSet() throws CastorMappingException, IOException {
+ if (this.mappingLocations != null && this.targetClass != null) {
throw new IllegalArgumentException("Cannot set both the 'mappingLocations' and 'targetClass' property. " +
- "Set targetClass for unmarshalling a single class, and 'mappingLocations' for multiple classes'");
+ "Set 'targetClass' for unmarshalling a single class, and 'mappingLocations' for multiple classes.");
}
if (logger.isInfoEnabled()) {
- if (mappingLocations != null) {
- logger.info("Configured using " + StringUtils.arrayToCommaDelimitedString(mappingLocations));
+ if (this.mappingLocations != null) {
+ logger.info("Configured using " + StringUtils.arrayToCommaDelimitedString(this.mappingLocations));
}
- else if (targetClass != null) {
- logger.info("Configured for target class [" + targetClass.getName() + "]");
+ else if (this.targetClass != null) {
+ logger.info("Configured for target class [" + this.targetClass.getName() + "]");
}
else {
logger.info("Using default configuration");
}
}
try {
- xmlContext = createXMLContext(mappingLocations, targetClass);
+ this.xmlContext = createXMLContext(this.mappingLocations, this.targetClass);
}
catch (MappingException ex) {
- throw new CastorSystemException("Could not load Castor mapping: " + ex.getMessage(), ex);
+ throw new CastorMappingException("Could not load Castor mapping", ex);
}
- catch (ResolverException rex) {
- throw new CastorSystemException("Could not load Castor mapping: " + rex.getMessage(), rex);
+ catch (ResolverException ex) {
+ throw new CastorMappingException("Could not resolve Castor mapping", ex);
}
}
/**
- * Returns true for all classes, i.e. Castor supports arbitrary classes.
- */
- public boolean supports(Class> clazz) {
- return true;
- }
-
- /**
- * Creates the Castor XMLContext. Subclasses can override this to create a custom context. The
- * default implementation loads mapping files if defined, and the target class if not defined.
- *
+ * Create the Castor XMLContext. Subclasses can override this to create a custom context.
+ * true for all classes, i.e. Castor supports arbitrary classes.
+ */
+ public boolean supports(Class> clazz) {
+ return true;
+ }
+
+
// Marshalling
- //
@Override
protected final void marshalDomNode(Object graph, Node node) throws XmlMappingException {
@@ -323,26 +293,22 @@ public class CastorMarshaller extends AbstractMarshaller implements Initializing
}
/**
- * Template method that allows for customizing of the given Castor {@link Marshaller}. CastorException to an appropriate exception from the
- * org.springframework.oxm hierarchy. CastorUtils. Can be overridden in subclasses. A boolean flag is used to indicate whether this
- * exception occurs during marshalling or unmarshalling, since Castor itself does not make this distinction in its
- * exception hierarchy.
- *
- * @param ex Castor XMLException that occured
- * @param marshalling indicates whether the exception occurs during marshalling (true), or unmarshalling
- * (false)
+ * Convert the given XMLException to an appropriate exception from the
+ * org.springframework.oxm hierarchy.
+ * XMLException that occured
+ * @param marshalling indicates whether the exception occurs during marshalling (true),
+ * or unmarshalling (false)
* @return the corresponding XmlMappingException
- * @see CastorUtils#convertXmlException
+ * @see CastorUtils#convertCastorException
*/
- public XmlMappingException convertCastorException(XMLException ex, boolean marshalling) {
- return CastorUtils.convertXmlException(ex, marshalling);
+ protected XmlMappingException convertCastorException(XMLException ex, boolean marshalling) {
+ if (ex instanceof ValidationException) {
+ return new ValidationFailureException("Castor validation exception", ex);
+ }
+ else if (ex instanceof MarshalException) {
+ if (marshalling) {
+ return new MarshallingFailureException("Castor marshalling exception", ex);
+ }
+ else {
+ return new UnmarshallingFailureException("Castor unmarshalling exception", ex);
+ }
+ }
+ else {
+ // fallback
+ return new UncategorizedMappingException("Unknown Castor exception", ex);
+ }
}
+
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorUnmarshallingFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorUnmarshallingFailureException.java
deleted file mode 100644
index 307cb696340..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorUnmarshallingFailureException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.castor;
-
-import org.exolab.castor.xml.MarshalException;
-import org.xml.sax.SAXException;
-
-import org.springframework.oxm.UnmarshallingFailureException;
-
-/**
- * Castor-specific subclass of UnmarshallingFailureException.
- *
- * @author Arjen Poutsma
- * @see CastorUtils#convertXmlException
- * @since 3.0
- */
-public class CastorUnmarshallingFailureException extends UnmarshallingFailureException {
-
- public CastorUnmarshallingFailureException(MarshalException ex) {
- super("Castor unmarshalling exception: " + ex.getMessage(), ex);
- }
-
- public CastorUnmarshallingFailureException(SAXException ex) {
- super("Castor unmarshalling exception: " + ex.getMessage(), ex);
- }
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorUtils.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorUtils.java
deleted file mode 100644
index 3515e97cd3f..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorUtils.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.castor;
-
-import org.exolab.castor.xml.MarshalException;
-import org.exolab.castor.xml.ValidationException;
-import org.exolab.castor.xml.XMLException;
-
-import org.springframework.oxm.XmlMappingException;
-
-/**
- * Generic utility methods for working with Castor. Mainly for internal use within the framework.
- *
- * @author Arjen Poutsma
- * @since 3.0
- */
-public class CastorUtils {
-
- /**
- * Converts the given XMLException to an appropriate exception from the
- * org.springframework.oxm hierarchy. XMLException that occured
- * @param marshalling indicates whether the exception occurs during marshalling (true), or unmarshalling
- * (false)
- * @return the corresponding XmlMappingException
- */
- public static XmlMappingException convertXmlException(XMLException ex, boolean marshalling) {
- if (ex instanceof MarshalException) {
- MarshalException marshalException = (MarshalException) ex;
- if (marshalling) {
- return new CastorMarshallingFailureException(marshalException);
- }
- else {
- return new CastorUnmarshallingFailureException(marshalException);
- }
- }
- else if (ex instanceof ValidationException) {
- return new CastorValidationFailureException((ValidationException) ex);
- }
- // fallback
- return new CastorSystemException("Unknown Castor exception: " + ex.getMessage(), ex);
- }
-
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorValidationFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorValidationFailureException.java
deleted file mode 100644
index e33fd7285ea..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/castor/CastorValidationFailureException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.castor;
-
-import org.exolab.castor.xml.ValidationException;
-
-import org.springframework.oxm.ValidationFailureException;
-
-/**
- * Castor-specific subclass of MarshallingFailureException.
- *
- * @author Arjen Poutsma
- * @see CastorUtils#convertXmlException
- * @since 3.0
- */
-public class CastorValidationFailureException extends ValidationFailureException {
-
- public CastorValidationFailureException(ValidationException ex) {
- super("Castor validation exception: " + ex.getMessage(), ex);
- }
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/config/Jaxb2MarshallerBeanDefinitionParser.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/config/Jaxb2MarshallerBeanDefinitionParser.java
index 9172b87d9b6..3d60be51c1f 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/config/Jaxb2MarshallerBeanDefinitionParser.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/config/Jaxb2MarshallerBeanDefinitionParser.java
@@ -1,6 +1,6 @@
/*
- * Copyright 2007 the original author or authors.
- *
+* Copyright 2002-2009 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.
* You may obtain a copy of the License at
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/config/JibxMarshallerBeanDefinitionParser.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/config/JibxMarshallerBeanDefinitionParser.java
index 71faac2dc43..b3a0773f27a 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/config/JibxMarshallerBeanDefinitionParser.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/config/JibxMarshallerBeanDefinitionParser.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2008 the original author or authors.
+ * Copyright 2002-2009 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.
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/config/OxmNamespaceHandler.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/config/OxmNamespaceHandler.java
index 8f73923e614..7d9d1c797f0 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/config/OxmNamespaceHandler.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/config/OxmNamespaceHandler.java
@@ -1,6 +1,6 @@
/*
- * Copyright 2008 the original author or authors.
- *
+* Copyright 2002-2009 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.
* You may obtain a copy of the License at
@@ -32,4 +32,5 @@ public class OxmNamespaceHandler extends NamespaceHandlerSupport {
registerBeanDefinitionParser("jibx-marshaller", new JibxMarshallerBeanDefinitionParser());
registerBeanDefinitionParser("xmlbeans-marshaller", new XmlBeansMarshallerBeanDefinitionParser());
}
+
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/config/XmlBeansMarshallerBeanDefinitionParser.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/config/XmlBeansMarshallerBeanDefinitionParser.java
index 075ea7b1527..a27fec56bd0 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/config/XmlBeansMarshallerBeanDefinitionParser.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/config/XmlBeansMarshallerBeanDefinitionParser.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2008 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -45,4 +45,5 @@ class XmlBeansMarshallerBeanDefinitionParser extends AbstractSingleBeanDefinitio
beanDefinitionBuilder.addPropertyReference("xmlOptions", optionsName);
}
}
-}
\ No newline at end of file
+
+}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java
index 73a4e1093bd..4ce357dda8a 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -34,9 +34,12 @@ import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
+import javax.xml.bind.MarshalException;
import javax.xml.bind.Marshaller;
+import javax.xml.bind.UnmarshalException;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.ValidationEventHandler;
+import javax.xml.bind.ValidationException;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.attachment.AttachmentMarshaller;
@@ -61,16 +64,20 @@ import org.xml.sax.helpers.XMLReaderFactory;
import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.Resource;
+import org.springframework.oxm.MarshallingFailureException;
+import org.springframework.oxm.UncategorizedMappingException;
+import org.springframework.oxm.UnmarshallingFailureException;
+import org.springframework.oxm.ValidationFailureException;
import org.springframework.oxm.XmlMappingException;
import org.springframework.oxm.mime.MimeContainer;
import org.springframework.oxm.mime.MimeMarshaller;
import org.springframework.oxm.mime.MimeUnmarshaller;
+import org.springframework.oxm.support.SaxResourceUtils;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.FileCopyUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
-import org.springframework.util.xml.SaxUtils;
import org.springframework.util.xml.StaxUtils;
/**
@@ -97,55 +104,45 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
private static final String CID = "cid:";
+
/**
* Logger available to subclasses.
*/
- private static final Log logger = LogFactory.getLog(Jaxb2Marshaller.class);
+ protected final Log logger = LogFactory.getLog(getClass());
private String contextPath;
+ private Class[] classesToBeBound;
+
+ private MapXmlAdapters to be registered with the JAXB Marshaller and
- * Unmarshaller
- */
- public void setAdapters(XmlAdapter[] adapters) {
- this.adapters = adapters;
- }
/**
- * Sets the JAXB Context path.
+ * Set a JAXB context path.
*/
public void setContextPath(String contextPath) {
Assert.hasText(contextPath, "'contextPath' must not be null");
@@ -153,8 +150,8 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
}
/**
- * Sets multiple JAXB Context paths. The given array of context paths is converted to a colon-delimited string, as
- * supported by JAXB.
+ * Set multiple JAXB context paths. The given array of context paths is converted to a
+ * colon-delimited string, as supported by JAXB.
*/
public void setContextPaths(String[] contextPaths) {
Assert.notEmpty(contextPaths, "'contextPaths' must not be empty");
@@ -162,133 +159,126 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
}
/**
- * Sets the list of java classes to be recognized by a newly created JAXBContext. Setting this property or
- * contextPath is required.
- *
- * @see #setContextPath(String)
+ * Set the list of Java classes to be recognized by a newly created JAXBContext.
+ * Setting this property or {@link #setContextPath "contextPath"} is required.
*/
public void setClassesToBeBound(Class[] classesToBeBound) {
this.classesToBeBound = classesToBeBound;
}
/**
- * Sets the JAXBContext properties. These implementation-specific properties will be set on the
- * JAXBContext.
+ * Set the JAXBContext properties. These implementation-specific
+ * properties will be set on the underlying JAXBContext.
*/
public void setJaxbContextProperties(MapMarshaller.Listener to be registered with the JAXB Marshaller.
+ * Set the JAXB Marshaller properties. These properties will be set on the
+ * underlying JAXB Marshaller, and allow for features such as indentation.
+ * @param properties the properties
+ * @see Marshaller#setProperty(String,Object)
+ * @see Marshaller#JAXB_ENCODING
+ * @see Marshaller#JAXB_FORMATTED_OUTPUT
+ * @see Marshaller#JAXB_NO_NAMESPACE_SCHEMA_LOCATION
+ * @see Marshaller#JAXB_SCHEMA_LOCATION
*/
- public void setMarshallerListener(Marshaller.Listener marshallerListener) {
- this.marshallerListener = marshallerListener;
+ public void setMarshallerProperties(Mapfalse, marshalling using XOP/MTOM
- * is not enabled.
+ * Set the JAXB Unmarshaller properties. These properties will be set on the
+ * underlying JAXB Unmarshaller.
+ * @param properties the properties
+ * @see javax.xml.bind.Unmarshaller#setProperty(String,Object)
*/
- public void setMtomEnabled(boolean mtomEnabled) {
- this.mtomEnabled = mtomEnabled;
+ public void setUnmarshallerProperties(Maphttp://www.w3.org/2001/XMLSchema".
- *
- * @see XMLConstants#W3C_XML_SCHEMA_NS_URI
- * @see XMLConstants#RELAXNG_NS_URI
+ * Specify the Marshaller.Listener to be registered with the JAXB Marshaller.
*/
- public void setSchemaLanguage(String schemaLanguage) {
- this.schemaLanguage = schemaLanguage;
+ public void setMarshallerListener(Marshaller.Listener marshallerListener) {
+ this.marshallerListener = marshallerListener;
}
/**
- * Sets the schema resource to use for validation.
+ * Set the Unmarshaller.Listener to be registered with the JAXB Unmarshaller.
*/
- public void setSchema(Resource schemaResource) {
- schemaResources = new Resource[]{schemaResource};
+ public void setUnmarshallerListener(Unmarshaller.Listener unmarshallerListener) {
+ this.unmarshallerListener = unmarshallerListener;
}
/**
- * Sets the schema resources to use for validation.
+ * Set the JAXB validation event handler. This event handler will be called by JAXB
+ * if any validation errors are encountered during calls to any of the marshal APIs.
*/
- public void setSchemas(Resource[] schemaResources) {
- this.schemaResources = schemaResources;
+ public void setValidationEventHandler(ValidationEventHandler validationEventHandler) {
+ this.validationEventHandler = validationEventHandler;
}
/**
- * Sets the Unmarshaller.Listener to be registered with the JAXB Unmarshaller.
+ * Specify the XmlAdapters to be registered with the JAXB Marshaller
+ * and Unmarshaller
*/
- public void setUnmarshallerListener(Unmarshaller.Listener unmarshallerListener) {
- this.unmarshallerListener = unmarshallerListener;
+ public void setAdapters(XmlAdapter[] adapters) {
+ this.adapters = adapters;
}
/**
- * Sets the JAXB Marshaller properties. These properties will be set on the underlying JAXB
- * Marshaller, and allow for features such as indentation.
- *
- * @param properties the properties
- * @see Marshaller#setProperty(String,Object)
- * @see Marshaller#JAXB_ENCODING
- * @see Marshaller#JAXB_FORMATTED_OUTPUT
- * @see Marshaller#JAXB_NO_NAMESPACE_SCHEMA_LOCATION
- * @see Marshaller#JAXB_SCHEMA_LOCATION
+ * Set the schema resource to use for validation.
*/
- public void setMarshallerProperties(MapUnmarshaller properties. These properties will be set on the underlying JAXB
- * Unmarshaller.
- *
- * @param properties the properties
- * @see javax.xml.bind.Unmarshaller#setProperty(String,Object)
+ * Set the schema resources to use for validation.
*/
- public void setUnmarshallerProperties(Maphttp://www.w3.org/2001/XMLSchema".
+ * @see XMLConstants#W3C_XML_SCHEMA_NS_URI
+ * @see XMLConstants#RELAXNG_NS_URI
*/
- public void setValidationEventHandler(ValidationEventHandler validationEventHandler) {
- this.validationEventHandler = validationEventHandler;
+ public void setSchemaLanguage(String schemaLanguage) {
+ this.schemaLanguage = schemaLanguage;
}
+ /**
+ * Specify whether MTOM support should be enabled or not.
+ * Default is false: marshalling using XOP/MTOM not being enabled.
+ */
+ public void setMtomEnabled(boolean mtomEnabled) {
+ this.mtomEnabled = mtomEnabled;
+ }
+
+ public void setBeanClassLoader(ClassLoader classLoader) {
+ this.beanClassLoader = classLoader;
+ }
+
+
public final void afterPropertiesSet() throws Exception {
- if (StringUtils.hasLength(contextPath) && !ObjectUtils.isEmpty(classesToBeBound)) {
- throw new IllegalArgumentException("specify either contextPath or classesToBeBound property; not both");
- }
- try {
- jaxbContext = createJaxbContext();
- }
- catch (JAXBException ex) {
- throw convertJaxbException(ex);
+ this.jaxbContext = createJaxbContext();
+ if (!ObjectUtils.isEmpty(this.schemaResources)) {
+ this.schema = loadSchema(this.schemaResources, this.schemaLanguage);
}
}
- /*
- * JAXBContext
- */
-
protected JAXBContext createJaxbContext() throws Exception {
- if (!ObjectUtils.isEmpty(schemaResources)) {
- if (logger.isDebugEnabled()) {
- logger.debug(
- "Setting validation schema to " + StringUtils.arrayToCommaDelimitedString(schemaResources));
- }
- schema = loadSchema(schemaResources, schemaLanguage);
+ if (StringUtils.hasLength(this.contextPath) && !ObjectUtils.isEmpty(this.classesToBeBound)) {
+ throw new IllegalArgumentException("Specify either 'contextPath' or 'classesToBeBound property'; not both");
}
- if (StringUtils.hasLength(contextPath)) {
+ if (StringUtils.hasLength(this.contextPath)) {
return createJaxbContextFromContextPath();
}
- else if (!ObjectUtils.isEmpty(classesToBeBound)) {
+ else if (!ObjectUtils.isEmpty(this.classesToBeBound)) {
return createJaxbContextFromClasses();
}
else {
@@ -298,22 +288,22 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
private JAXBContext createJaxbContextFromContextPath() throws JAXBException {
if (logger.isInfoEnabled()) {
- logger.info("Creating JAXBContext with context path [" + contextPath + "]");
+ logger.info("Creating JAXBContext with context path [" + this.contextPath + "]");
}
- if (jaxbContextProperties != null) {
- if (classLoader != null) {
- return JAXBContext.newInstance(contextPath, classLoader, jaxbContextProperties);
+ if (this.jaxbContextProperties != null) {
+ if (this.beanClassLoader != null) {
+ return JAXBContext.newInstance(this.contextPath, this.beanClassLoader, this.jaxbContextProperties);
}
else {
- return JAXBContext.newInstance(contextPath, ClassUtils.getDefaultClassLoader(), jaxbContextProperties);
+ return JAXBContext.newInstance(this.contextPath, ClassUtils.getDefaultClassLoader(), this.jaxbContextProperties);
}
}
else {
- if (classLoader != null) {
- return JAXBContext.newInstance(contextPath, classLoader);
+ if (this.beanClassLoader != null) {
+ return JAXBContext.newInstance(this.contextPath, this.beanClassLoader);
}
else {
- return JAXBContext.newInstance(contextPath);
+ return JAXBContext.newInstance(this.contextPath);
}
}
}
@@ -321,17 +311,20 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
private JAXBContext createJaxbContextFromClasses() throws JAXBException {
if (logger.isInfoEnabled()) {
logger.info("Creating JAXBContext with classes to be bound [" +
- StringUtils.arrayToCommaDelimitedString(classesToBeBound) + "]");
+ StringUtils.arrayToCommaDelimitedString(this.classesToBeBound) + "]");
}
- if (jaxbContextProperties != null) {
- return JAXBContext.newInstance(classesToBeBound, jaxbContextProperties);
+ if (this.jaxbContextProperties != null) {
+ return JAXBContext.newInstance(this.classesToBeBound, this.jaxbContextProperties);
}
else {
- return JAXBContext.newInstance(classesToBeBound);
+ return JAXBContext.newInstance(this.classesToBeBound);
}
}
private Schema loadSchema(Resource[] resources, String schemaLanguage) throws IOException, SAXException {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Setting validation schema to " + StringUtils.arrayToCommaDelimitedString(this.schemaResources));
+ }
Assert.notEmpty(resources, "No resources given");
Assert.hasLength(schemaLanguage, "No schema language provided");
Source[] schemaSources = new Source[resources.length];
@@ -340,13 +333,14 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
for (int i = 0; i < resources.length; i++) {
Assert.notNull(resources[i], "Resource is null");
Assert.isTrue(resources[i].exists(), "Resource " + resources[i] + " does not exist");
- InputSource inputSource = SaxUtils.createInputSource(resources[i]);
+ InputSource inputSource = SaxResourceUtils.createInputSource(resources[i]);
schemaSources[i] = new SAXSource(xmlReader, inputSource);
}
SchemaFactory schemaFactory = SchemaFactory.newInstance(schemaLanguage);
return schemaFactory.newSchema(schemaSources);
}
+
public boolean supports(Class> clazz) {
if (JAXBElement.class.isAssignableFrom(clazz)) {
return true;
@@ -354,9 +348,9 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
else if (clazz.getAnnotation(XmlRootElement.class) != null) {
return true;
}
- if (StringUtils.hasLength(contextPath)) {
+ if (StringUtils.hasLength(this.contextPath)) {
String packageName = ClassUtils.getPackageName(clazz);
- String[] contextPaths = StringUtils.tokenizeToStringArray(contextPath, ":");
+ String[] contextPaths = StringUtils.tokenizeToStringArray(this.contextPath, ":");
for (String contextPath : contextPaths) {
if (contextPath.equals(packageName)) {
return true;
@@ -364,60 +358,14 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
}
return false;
}
- else if (!ObjectUtils.isEmpty(classesToBeBound)) {
- return Arrays.asList(classesToBeBound).contains(clazz);
+ else if (!ObjectUtils.isEmpty(this.classesToBeBound)) {
+ return Arrays.asList(this.classesToBeBound).contains(clazz);
}
return false;
}
- /*
- * Marshalling
- */
- /**
- * Returns a newly created JAXB marshaller. JAXB marshallers are not necessarily thread safe.
- */
- private Marshaller createMarshaller() {
- try {
- Marshaller marshaller = jaxbContext.createMarshaller();
- initJaxbMarshaller(marshaller);
- return marshaller;
- }
- catch (JAXBException ex) {
- throw convertJaxbException(ex);
- }
- }
-
- /**
- * Template method that can be overridden by concrete JAXB marshallers for custom initialization behavior. Gets called
- * after creation of JAXB Marshaller, and after the respective properties have been set.
- *
- * Marshaller, and after the respective properties have been set.
- *
- * Marshaller, and after the respective properties have been set.
+ * Marshaller, and after the respective properties have been set.
+ * JAXBException to an appropriate exception from the
- * org.springframework.oxm hierarchy. JaxbUtils.
- * Can be overridden in subclasses.
- *
+ * org.springframework.oxm hierarchy.
* @param ex JAXBException that occured
- * @return the corresponding XmlMappingException instance
- * @see org.springframework.oxm.jaxb.JaxbUtils#convertJaxbException
+ * @return the corresponding XmlMappingException
*/
protected XmlMappingException convertJaxbException(JAXBException ex) {
- return JaxbUtils.convertJaxbException(ex);
+ if (ex instanceof ValidationException) {
+ return new ValidationFailureException("JAXB validation exception", ex);
+ }
+ else if (ex instanceof MarshalException) {
+ return new MarshallingFailureException("JAXB marshalling exception", ex);
+ }
+ else if (ex instanceof UnmarshalException) {
+ return new UnmarshallingFailureException("JAXB unmarshalling exception", ex);
+ }
+ else {
+ // fallback
+ return new UncategorizedMappingException("Unknown JAXB exception", ex);
+ }
}
- /*
- * Inner classes
- */
private static class Jaxb2AttachmentMarshaller extends AttachmentMarshaller {
@@ -570,12 +567,8 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
}
@Override
- public String addMtomAttachment(byte[] data,
- int offset,
- int length,
- String mimeType,
- String elementNamespace,
- String elementLocalName) {
+ public String addMtomAttachment(byte[] data, int offset, int length, String mimeType,
+ String elementNamespace, String elementLocalName) {
ByteArrayDataSource dataSource = new ByteArrayDataSource(mimeType, data, offset, length);
return addMtomAttachment(new DataHandler(dataSource), elementNamespace, elementLocalName);
}
@@ -584,7 +577,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
public String addMtomAttachment(DataHandler dataHandler, String elementNamespace, String elementLocalName) {
String host = getHost(elementNamespace, dataHandler);
String contentId = UUID.randomUUID() + "@" + host;
- mimeContainer.addAttachment("<" + contentId + ">", dataHandler);
+ this.mimeContainer.addAttachment("<" + contentId + ">", dataHandler);
try {
contentId = URLEncoder.encode(contentId, "UTF-8");
}
@@ -614,10 +607,11 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
@Override
public boolean isXOPPackage() {
- return mimeContainer.convertToXopPackage();
+ return this.mimeContainer.convertToXopPackage();
}
}
+
private static class Jaxb2AttachmentUnmarshaller extends AttachmentUnmarshaller {
private final MimeContainer mimeContainer;
@@ -633,7 +627,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
return FileCopyUtils.copyToByteArray(dataHandler.getInputStream());
}
catch (IOException ex) {
- throw new JaxbUnmarshallingFailureException(ex);
+ throw new UnmarshallingFailureException("Couldn't read attachment", ex);
}
}
@@ -649,15 +643,16 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
}
contentId = '<' + contentId + '>';
}
- return mimeContainer.getAttachment(contentId);
+ return this.mimeContainer.getAttachment(contentId);
}
@Override
public boolean isXOPPackage() {
- return mimeContainer.isXopPackage();
+ return this.mimeContainer.isXopPackage();
}
}
+
/**
* DataSource that wraps around a byte array.
*/
@@ -679,7 +674,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
}
public InputStream getInputStream() throws IOException {
- return new ByteArrayInputStream(data, offset, length);
+ return new ByteArrayInputStream(this.data, this.offset, this.length);
}
public OutputStream getOutputStream() throws IOException {
@@ -687,7 +682,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanCl
}
public String getContentType() {
- return contentType;
+ return this.contentType;
}
public String getName() {
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/JaxbMarshallingFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/JaxbMarshallingFailureException.java
deleted file mode 100644
index 05ab8190fae..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/JaxbMarshallingFailureException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.jaxb;
-
-import javax.xml.bind.MarshalException;
-
-import org.springframework.oxm.MarshallingFailureException;
-
-/**
- * JAXB-specific subclass of MarshallingFailureException.
- *
- * @author Arjen Poutsma
- * @see JaxbUtils#convertJaxbException
- * @since 3.0
- */
-public class JaxbMarshallingFailureException extends MarshallingFailureException {
-
- public JaxbMarshallingFailureException(MarshalException ex) {
- super("JAXB marshalling exception: " + ex.getMessage(), ex);
- }
-
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/JaxbSystemException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/JaxbSystemException.java
deleted file mode 100644
index c0bfccf6acc..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/JaxbSystemException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.jaxb;
-
-import javax.xml.bind.JAXBException;
-
-import org.springframework.oxm.UncategorizedXmlMappingException;
-
-/**
- * JAXB-specific subclass of UncategorizedXmlMappingException, for JAXBExceptions that cannot
- * be distinguished further.
- *
- * @author Arjen Poutsma
- * @see JaxbUtils#convertJaxbException(javax.xml.bind.JAXBException)
- * @since 3.0
- */
-public class JaxbSystemException extends UncategorizedXmlMappingException {
-
- public JaxbSystemException(JAXBException ex) {
- super(ex.getMessage(), ex);
- }
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/JaxbUnmarshallingFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/JaxbUnmarshallingFailureException.java
deleted file mode 100644
index fb8e2e9384d..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/JaxbUnmarshallingFailureException.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.jaxb;
-
-import java.io.IOException;
-import javax.xml.bind.UnmarshalException;
-
-import org.springframework.oxm.UnmarshallingFailureException;
-
-/**
- * JAXB-specific subclass of UnmarshallingFailureException.
- *
- * @author Arjen Poutsma
- * @since 3.0
- */
-public class JaxbUnmarshallingFailureException extends UnmarshallingFailureException {
-
- public JaxbUnmarshallingFailureException(UnmarshalException ex) {
- super("JAXB unmarshalling exception: " + ex.getMessage(), ex);
- }
-
- public JaxbUnmarshallingFailureException(IOException ex) {
- super("JAXB unmarshalling exception: " + ex.getMessage(), ex);
- }
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/JaxbUtils.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/JaxbUtils.java
deleted file mode 100644
index 902be90db01..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/JaxbUtils.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.jaxb;
-
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.MarshalException;
-import javax.xml.bind.UnmarshalException;
-import javax.xml.bind.ValidationException;
-
-import org.springframework.oxm.XmlMappingException;
-
-/**
- * Generic utility methods for working with JAXB. Mainly for internal use within the framework.
- *
- * @author Arjen Poutsma
- * @since 3.0
- */
-public abstract class JaxbUtils {
-
- /**
- * Converts the given JAXBException to an appropriate exception from the
- * org.springframework.oxm hierarchy.
- *
- * @param ex JAXBException that occured
- * @return the corresponding XmlMappingException
- */
- public static XmlMappingException convertJaxbException(JAXBException ex) {
- if (ex instanceof MarshalException) {
- return new JaxbMarshallingFailureException((MarshalException) ex);
- }
- else if (ex instanceof UnmarshalException) {
- return new JaxbUnmarshallingFailureException((UnmarshalException) ex);
- }
- else if (ex instanceof ValidationException) {
- return new JaxbValidationFailureException((ValidationException) ex);
- }
- // fallback
- return new JaxbSystemException(ex);
- }
-
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/JaxbValidationFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/JaxbValidationFailureException.java
deleted file mode 100644
index 85cb639fa9f..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/JaxbValidationFailureException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.jaxb;
-
-import javax.xml.bind.ValidationException;
-
-import org.springframework.oxm.ValidationFailureException;
-
-/**
- * JAXB-specific subclass of ValidationFailureException.
- *
- * @author Arjen Poutsma
- * @see JaxbUtils#convertJaxbException
- * @since 3.0
- */
-public class JaxbValidationFailureException extends ValidationFailureException {
-
- public JaxbValidationFailureException(ValidationException ex) {
- super("JAXB validation exception: " + ex.getMessage(), ex);
- }
-
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxMarshaller.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxMarshaller.java
index 1cfcffb0ae4..026c9e55aaf 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxMarshaller.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxMarshaller.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -45,6 +45,7 @@ import org.jibx.runtime.IUnmarshallingContext;
import org.jibx.runtime.IXMLReader;
import org.jibx.runtime.IXMLWriter;
import org.jibx.runtime.JiBXException;
+import org.jibx.runtime.ValidationException;
import org.jibx.runtime.impl.MarshallingContext;
import org.jibx.runtime.impl.StAXReaderWrapper;
import org.jibx.runtime.impl.StAXWriter;
@@ -56,21 +57,25 @@ import org.xml.sax.XMLReader;
import org.xml.sax.ext.LexicalHandler;
import org.springframework.beans.factory.InitializingBean;
-import org.springframework.oxm.AbstractMarshaller;
+import org.springframework.oxm.MarshallingFailureException;
+import org.springframework.oxm.UnmarshallingFailureException;
+import org.springframework.oxm.ValidationFailureException;
import org.springframework.oxm.XmlMappingException;
+import org.springframework.oxm.support.AbstractMarshaller;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import org.springframework.util.xml.StaxUtils;
/**
- * Implementation of the Marshaller and Unmarshaller interfaces for JiBX. The typical
- * usage will be to set the targetClass and optionally the bindingName property on this bean,
- * and to refer to it.
+ * Implementation of the Marshaller and Unmarshaller interfaces for JiBX.
+ *
+ * targetClass and optionally the
+ * bindingName property on this bean.
*
* @author Arjen Poutsma
+ * @since 3.0
* @see org.jibx.runtime.IMarshallingContext
* @see org.jibx.runtime.IUnmarshallingContext
- * @since 3.0
*/
public class JibxMarshaller extends AbstractMarshaller implements InitializingBean {
@@ -78,77 +83,73 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
private String bindingName;
- private IBindingFactory bindingFactory;
-
- private static TransformerFactory transformerFactory = TransformerFactory.newInstance();
-
private int indent = -1;
private String encoding;
private Boolean standalone;
+ private IBindingFactory bindingFactory;
+
+ private TransformerFactory transformerFactory = TransformerFactory.newInstance();
+
+
/**
- * Sets the optional binding name for this instance.
+ * Set the target class for this instance. This property is required.
*/
- public void setBindingName(String bindingName) {
- this.bindingName = bindingName;
+ public void setTargetClass(Class targetClass) {
+ this.targetClass = targetClass;
}
/**
- * Sets the target class for this instance. This property is required.
+ * Set the optional binding name for this instance.
*/
- public void setTargetClass(Class targetClass) {
- this.targetClass = targetClass;
+ public void setBindingName(String bindingName) {
+ this.bindingName = bindingName;
}
/**
- * Sets the number of nesting indent spaces. Default is -1, i.e. no indentation.
+ * Set the number of nesting indent spaces. Default is -1, i.e. no indentation.
*/
public void setIndent(int indent) {
this.indent = indent;
}
/**
- * Sets the document encoding using for marshalling. Default is UTF-8.
+ * Set the document encoding using for marshalling. Default is UTF-8.
*/
public void setEncoding(String encoding) {
this.encoding = encoding;
}
/**
- * Sets the document standalone flag for marshalling. By default, this flag is not present.
+ * Set the document standalone flag for marshalling. By default, this flag is not present.
*/
public void setStandalone(Boolean standalone) {
this.standalone = standalone;
}
- public void afterPropertiesSet() throws Exception {
- Assert.notNull(targetClass, "targetClass is required");
- if (logger.isInfoEnabled()) {
- if (StringUtils.hasLength(bindingName)) {
- logger.info("Configured for target class [" + targetClass + "] using binding [" + bindingName + "]");
- }
- else {
- logger.info("Configured for target class [" + targetClass + "]");
+
+ public void afterPropertiesSet() throws JiBXException {
+ Assert.notNull(this.targetClass, "targetClass is required");
+ if (StringUtils.hasLength(this.bindingName)) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Configured for target class [" + this.targetClass + "] using binding [" + this.bindingName + "]");
}
+ this.bindingFactory = BindingDirectory.getFactory(this.bindingName, this.targetClass);
}
- try {
- if (StringUtils.hasLength(bindingName)) {
- bindingFactory = BindingDirectory.getFactory(bindingName, targetClass);
- }
- else {
- bindingFactory = BindingDirectory.getFactory(targetClass);
+ else {
+ if (logger.isInfoEnabled()) {
+ logger.info("Configured for target class [" + this.targetClass + "]");
}
- }
- catch (JiBXException ex) {
- throw new JibxSystemException(ex);
+ this.bindingFactory = BindingDirectory.getFactory(this.targetClass);
}
}
+
public boolean supports(Class> clazz) {
Assert.notNull(clazz, "'clazz' must not be null");
- String[] mappedClasses = bindingFactory.getMappedClasses();
+ String[] mappedClasses = this.bindingFactory.getMappedClasses();
String className = clazz.getName();
for (String mappedClass : mappedClasses) {
if (className.equals(mappedClass)) {
@@ -158,32 +159,15 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
return false;
}
- /**
- * Convert the given JiBXException to an appropriate exception from the
- * org.springframework.oxm hierarchy. JibxUtils.
- * Can be overridden in subclasses. A boolean flag is used to indicate whether this exception occurs during
- * marshalling or unmarshalling, since JiBX itself does not make this distinction in its exception hierarchy.
- *
- * @param ex JiBXException that occured
- * @param marshalling indicates whether the exception occurs during marshalling (true), or unmarshalling
- * (false)
- * @return the corresponding XmlMappingException instance
- * @see JibxUtils#convertJibxException(org.jibx.runtime.JiBXException,boolean)
- */
- public XmlMappingException convertJibxException(JiBXException ex, boolean marshalling) {
- return JibxUtils.convertJibxException(ex, marshalling);
- }
- //
// Supported Marshalling
- //
@Override
protected void marshalOutputStream(Object graph, OutputStream outputStream)
throws XmlMappingException, IOException {
try {
IMarshallingContext marshallingContext = createMarshallingContext();
- marshallingContext.marshalDocument(graph, encoding, standalone, outputStream);
+ marshallingContext.marshalDocument(graph, this.encoding, this.standalone, outputStream);
}
catch (JiBXException ex) {
throw convertJibxException(ex, true);
@@ -194,7 +178,7 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
protected void marshalWriter(Object graph, Writer writer) throws XmlMappingException, IOException {
try {
IMarshallingContext marshallingContext = createMarshallingContext();
- marshallingContext.marshalDocument(graph, encoding, standalone, writer);
+ marshallingContext.marshalDocument(graph, this.encoding, this.standalone, writer);
}
catch (JiBXException ex) {
throw convertJibxException(ex, true);
@@ -214,9 +198,8 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
}
}
- //
+
// Unsupported Marshalling
- //
@Override
protected void marshalDomNode(Object graph, Node node) throws XmlMappingException {
@@ -225,14 +208,11 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
ByteArrayOutputStream os = new ByteArrayOutputStream();
marshalOutputStream(graph, os);
ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
- Transformer transformer = transformerFactory.newTransformer();
+ Transformer transformer = this.transformerFactory.newTransformer();
transformer.transform(new StreamSource(is), new DOMResult(node));
}
- catch (IOException ex) {
- throw new JibxSystemException(ex);
- }
- catch (TransformerException ex) {
- throw new JibxSystemException(ex);
+ catch (Exception ex) {
+ throw new MarshallingFailureException("JiBX marshalling exception", ex);
}
}
@@ -244,16 +224,13 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
ByteArrayOutputStream os = new ByteArrayOutputStream();
marshalOutputStream(graph, os);
ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
- Transformer transformer = transformerFactory.newTransformer();
+ Transformer transformer = this.transformerFactory.newTransformer();
SAXResult saxResult = new SAXResult(contentHandler);
saxResult.setLexicalHandler(lexicalHandler);
transformer.transform(new StreamSource(is), saxResult);
}
- catch (IOException ex) {
- throw new JibxSystemException(ex);
- }
- catch (TransformerException ex) {
- throw new JibxSystemException(ex);
+ catch (Exception ex) {
+ throw new MarshallingFailureException("JiBX marshalling exception", ex);
}
}
@@ -263,9 +240,8 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
marshalSaxHandlers(graph, contentHandler, null);
}
- //
+
// Unmarshalling
- //
@Override
protected Object unmarshalInputStream(InputStream inputStream) throws XmlMappingException, IOException {
@@ -309,13 +285,12 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
return unmarshalXmlStreamReader(streamReader);
}
catch (XMLStreamException ex) {
- throw new JibxSystemException(ex);
+ return new UnmarshallingFailureException("JiBX unmarshalling exception", ex);
}
}
- //
+
// Unsupported Unmarshalling
- //
@Override
protected Object unmarshalDomNode(Node node) throws XmlMappingException {
@@ -326,11 +301,8 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
return unmarshalInputStream(is);
}
- catch (IOException ex) {
- throw new JibxSystemException(ex);
- }
- catch (TransformerException ex) {
- throw new JibxSystemException(ex);
+ catch (Exception ex) {
+ throw new UnmarshallingFailureException("JiBX unmarshalling exception", ex);
}
}
@@ -338,41 +310,60 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
protected Object unmarshalSaxReader(XMLReader xmlReader, InputSource inputSource)
throws XmlMappingException, IOException {
try {
- Transformer transformer = transformerFactory.newTransformer();
+ Transformer transformer = this.transformerFactory.newTransformer();
ByteArrayOutputStream os = new ByteArrayOutputStream();
transformer.transform(new SAXSource(xmlReader, inputSource), new StreamResult(os));
ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
return unmarshalInputStream(is);
}
- catch (IOException ex) {
- throw new JibxSystemException(ex);
- }
catch (TransformerException ex) {
- throw new JibxSystemException(ex);
+ throw new UnmarshallingFailureException("JiBX unmarshalling exception", ex);
}
}
+
/**
- * Creates a new IMarshallingContext, set with the correct indentation.
- *
+ * Create a new IMarshallingContext, configured with the correct indentation.
* @return the created marshalling context
* @throws JiBXException in case of errors
*/
protected IMarshallingContext createMarshallingContext() throws JiBXException {
- IMarshallingContext marshallingContext = bindingFactory.createMarshallingContext();
- marshallingContext.setIndent(indent);
+ IMarshallingContext marshallingContext = this.bindingFactory.createMarshallingContext();
+ marshallingContext.setIndent(this.indent);
return marshallingContext;
}
/**
- * Creates a new IUnmarshallingContext, set with the correct indentation.
- *
+ * Create a new IUnmarshallingContext.
* @return the created unmarshalling context
* @throws JiBXException in case of errors
*/
protected IUnmarshallingContext createUnmarshallingContext() throws JiBXException {
- return bindingFactory.createUnmarshallingContext();
+ return this.bindingFactory.createUnmarshallingContext();
}
+ /**
+ * Convert the given JiBXException to an appropriate exception from the
+ * org.springframework.oxm hierarchy.
+ * JiBXException that occured
+ * @param marshalling indicates whether the exception occurs during marshalling (true),
+ * or unmarshalling (false)
+ * @return the corresponding XmlMappingException
+ */
+ public XmlMappingException convertJibxException(JiBXException ex, boolean marshalling) {
+ if (ex instanceof ValidationException) {
+ return new ValidationFailureException("JiBX validation exception", ex);
+ }
+ else {
+ if (marshalling) {
+ return new MarshallingFailureException("JiBX marshalling exception", ex);
+ }
+ else {
+ return new UnmarshallingFailureException("JiBX unmarshalling exception", ex);
+ }
+ }
+ }
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxMarshallingFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxMarshallingFailureException.java
deleted file mode 100644
index dae314b960d..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxMarshallingFailureException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2006 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.oxm.jibx;
-
-import org.jibx.runtime.JiBXException;
-
-import org.springframework.oxm.MarshallingFailureException;
-
-/**
- * JiXB-specific subclass of MarshallingFailureException.
- *
- * @author Arjen Poutsma
- * @see JibxUtils#convertJibxException(org.jibx.runtime.JiBXException,boolean)
- * @since 3.0
- */
-public class JibxMarshallingFailureException extends MarshallingFailureException {
-
- public JibxMarshallingFailureException(JiBXException ex) {
- super("JiBX marshalling exception: " + ex.getMessage(), ex);
- }
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxSystemException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxSystemException.java
deleted file mode 100644
index ede06119d9d..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxSystemException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2006 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.oxm.jibx;
-
-import org.springframework.oxm.UncategorizedXmlMappingException;
-
-/**
- * JiBX-specific subclass of UncategorizedXmlMappingException, for JiBXBExceptions that cannot
- * be distinguished further.
- *
- * @author Arjen Poutsma
- * @see JibxUtils#convertJibxException(org.jibx.runtime.JiBXException,boolean)
- * @since 3.0
- */
-public class JibxSystemException extends UncategorizedXmlMappingException {
-
- public JibxSystemException(Exception ex) {
- super(ex.getMessage(), ex);
- }
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxUnmarshallingFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxUnmarshallingFailureException.java
deleted file mode 100644
index 421dc69c261..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxUnmarshallingFailureException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2006 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.oxm.jibx;
-
-import org.jibx.runtime.JiBXException;
-
-import org.springframework.oxm.UnmarshallingFailureException;
-
-/**
- * JiXB-specific subclass of UnmarshallingFailureException.
- *
- * @author Arjen Poutsma
- * @see JibxUtils#convertJibxException(org.jibx.runtime.JiBXException,boolean)
- * @since 3.0
- */
-public class JibxUnmarshallingFailureException extends UnmarshallingFailureException {
-
- public JibxUnmarshallingFailureException(JiBXException ex) {
- super("JiBX unmarshalling exception: " + ex.getMessage(), ex);
- }
-
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxUtils.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxUtils.java
deleted file mode 100644
index 43bdc04037a..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxUtils.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2006 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.oxm.jibx;
-
-import org.jibx.runtime.JiBXException;
-import org.jibx.runtime.ValidationException;
-
-import org.springframework.oxm.XmlMappingException;
-
-/**
- * Generic utility methods for working with JiBX. Mainly for internal use within the framework.
- *
- * @author Arjen Poutsma
- * @since 3.0
- */
-public abstract class JibxUtils {
-
- /**
- * Converts the given JiBXException to an appropriate exception from the
- * org.springframework.oxm hierarchy. JiBXException that occured
- * @param marshalling indicates whether the exception occurs during marshalling (true), or unmarshalling
- * (false)
- * @return the corresponding XmlMappingException
- */
- public static XmlMappingException convertJibxException(JiBXException ex, boolean marshalling) {
- if (ex instanceof ValidationException) {
- return new JibxValidationFailureException((ValidationException) ex);
- }
- else {
- if (marshalling) {
- return new JibxMarshallingFailureException(ex);
- }
- else {
- return new JibxUnmarshallingFailureException(ex);
- }
- }
- }
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxValidationFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxValidationFailureException.java
deleted file mode 100644
index 69132a5d05f..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/jibx/JibxValidationFailureException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2006 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.oxm.jibx;
-
-import org.jibx.runtime.ValidationException;
-
-import org.springframework.oxm.ValidationFailureException;
-
-/**
- * JAXB-specific subclass of ValidationFailureException.
- *
- * @author Arjen Poutsma
- * @see JibxUtils#convertJibxException(org.jibx.runtime.JiBXException,boolean)
- * @since 3.0
- */
-public class JibxValidationFailureException extends ValidationFailureException {
-
- public JibxValidationFailureException(ValidationException ex) {
- super("JiBX validation exception: " + ex.getMessage(), ex);
- }
-
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/mime/MimeContainer.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/mime/MimeContainer.java
index 3887a093b04..5d2ce35bb55 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/mime/MimeContainer.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/mime/MimeContainer.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2007 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -19,44 +19,43 @@ package org.springframework.oxm.mime;
import javax.activation.DataHandler;
/**
- * Represents a container for MIME attachments. Concrete implementations might adapt a SOAPMesage, or an email message.
+ * Represents a container for MIME attachments
+ * Concrete implementations might adapt a SOAPMessage or an email message.
*
* @author Arjen Poutsma
- * @see XML-binary Optimized Packaging
* @since 3.0
+ * @see XML-binary Optimized Packaging
*/
public interface MimeContainer {
/**
- * Indicates whether this container is a XOP package.
- *
- * @return true when the constraints specified in Identifying
- * XOP Documents are met.
+ * Indicate whether this container is a XOP package.
+ * @return true when the constraints specified in
+ * Identifying XOP Documents
+ * are met
* @see XOP Packages
*/
boolean isXopPackage();
/**
- * Turns this message into a XOP package.
- *
- * @return true when the message is a XOP package
+ * Turn this message into a XOP package.
+ * @return true when the message actually is a XOP package
* @see XOP Packages
*/
boolean convertToXopPackage();
/**
- * Adds the given data handler as an attachment to this container.
- *
- * @param contentId the content id of the attachment
+ * Add the given data handler as an attachment to this container.
+ * @param contentId the content id of the attachment
* @param dataHandler the data handler containing the data of the attachment
*/
void addAttachment(String contentId, DataHandler dataHandler);
/**
- * Returns the attachment with the given content id, or null if not found.
- *
+ * Return the attachment with the given content id, or null if not found.
* @param contentId the content id
* @return the attachment, as a data handler
*/
DataHandler getAttachment(String contentId);
+
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/mime/MimeMarshaller.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/mime/MimeMarshaller.java
index d692453fe96..d66c321d15d 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/mime/MimeMarshaller.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/mime/MimeMarshaller.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2007 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -23,28 +23,25 @@ import org.springframework.oxm.Marshaller;
import org.springframework.oxm.XmlMappingException;
/**
- * Subinterface of {@link Marshaller} that can use MIME attachments to optimize storage of binary data. Attachments can
- * be added as MTOM, XOP, or SwA.
+ * Subinterface of {@link Marshaller} that can use MIME attachments to optimize
+ * storage of binary data. Attachments can be added as MTOM, XOP, or SwA.
*
* @author Arjen Poutsma
- * @see SOAP Message Transmission Optimization
- * Mechanism
- * @see XML-binary Optimized Packaging
* @since 3.0
+ * @see SOAP Message Transmission Optimization Mechanism
+ * @see XML-binary Optimized Packaging
*/
public interface MimeMarshaller extends Marshaller {
/**
- * Marshals the object graph with the given root into the provided {@link Result}, writing binary data to a {@link
- * MimeContainer}.
- *
- * @param graph the root of the object graph to marshal
- * @param result the result to marshal to
+ * Marshals the object graph with the given root into the provided {@link Result},
+ * writing binary data to a {@link MimeContainer}.
+ * @param graph the root of the object graph to marshal
+ * @param result the result to marshal to
* @param mimeContainer the MIME container to write extracted binary content to
* @throws XmlMappingException if the given object cannot be marshalled to the result
- * @throws IOException if an I/O exception occurs
+ * @throws IOException if an I/O exception occurs
*/
void marshal(Object graph, Result result, MimeContainer mimeContainer) throws XmlMappingException, IOException;
-
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/mime/MimeUnmarshaller.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/mime/MimeUnmarshaller.java
index 1e880d65f88..9526c18446d 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/mime/MimeUnmarshaller.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/mime/MimeUnmarshaller.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2007 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -23,26 +23,25 @@ import org.springframework.oxm.Unmarshaller;
import org.springframework.oxm.XmlMappingException;
/**
- * Subinterface of {@link org.springframework.oxm.Marshaller} that can use MIME attachments to optimize storage of
- * binary data. Attachments can be added as MTOM, XOP, or SwA.
+ * Subinterface of {@link org.springframework.oxm.Marshaller} that can use MIME attachments
+ * to optimize storage of binary data. Attachments can be added as MTOM, XOP, or SwA.
*
* @author Arjen Poutsma
- * @see SOAP Message Transmission Optimization
- * Mechanism
- * @see XML-binary Optimized Packaging
* @since 3.0
+ * @see SOAP Message Transmission Optimization Mechanism
+ * @see XML-binary Optimized Packaging
*/
public interface MimeUnmarshaller extends Unmarshaller {
/**
- * Unmarshals the given provided {@link Source} into an object graph, reading binary attachments from a {@link
- * MimeContainer}.
- *
- * @param source the source to marshal from
+ * Unmarshals the given provided {@link Source} into an object graph,
+ * reading binary attachments from a {@link MimeContainer}.
+ * @param source the source to marshal from
* @param mimeContainer the MIME container to read extracted binary content from
* @return the object graph
* @throws XmlMappingException if the given source cannot be mapped to an object
- * @throws IOException if an I/O Exception occurs
+ * @throws IOException if an I/O Exception occurs
*/
Object unmarshal(Source source, MimeContainer mimeContainer) throws XmlMappingException, IOException;
+
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/AbstractMarshaller.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/support/AbstractMarshaller.java
similarity index 67%
rename from org.springframework.oxm/src/main/java/org/springframework/oxm/AbstractMarshaller.java
rename to org.springframework.oxm/src/main/java/org/springframework/oxm/support/AbstractMarshaller.java
index b7b11a2745d..c6aa545eed5 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/AbstractMarshaller.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/support/AbstractMarshaller.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.oxm;
+package org.springframework.oxm.support;
import java.io.IOException;
import java.io.InputStream;
@@ -48,15 +48,20 @@ import org.xml.sax.XMLReader;
import org.xml.sax.ext.LexicalHandler;
import org.xml.sax.helpers.XMLReaderFactory;
+import org.springframework.oxm.Marshaller;
+import org.springframework.oxm.Unmarshaller;
+import org.springframework.oxm.UnmarshallingFailureException;
+import org.springframework.oxm.XmlMappingException;
import org.springframework.util.Assert;
import org.springframework.util.xml.StaxUtils;
/**
- * Abstract implementation of the Marshaller and Unmarshaller interface. This implementation
- * inspects the given Source or Result, and defers further handling to overridable template
- * methods.
+ * Abstract implementation of the Marshaller and Unmarshaller interface.
+ * This implementation inspects the given Source or Result, and defers
+ * further handling to overridable template methods.
*
* @author Arjen Poutsma
+ * @author Juergen Hoeller
* @since 3.0
*/
public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
@@ -66,22 +71,24 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
private DocumentBuilderFactory documentBuilderFactory;
+ private final Object documentBuilderFactoryMonitor = new Object();
+
+
/**
- * Marshals the object graph with the given root into the provided javax.xml.transform.Result. This
- * implementation inspects the given result, and calls marshalDomResult, marshalSaxResult, or
- * marshalStreamResult.
- *
- * @param graph the root of the object graph to marshal
+ * Marshals the object graph with the given root into the provided javax.xml.transform.Result.
+ * marshalDomResult,
+ * marshalSaxResult, or marshalStreamResult.
+ * @param graph the root of the object graph to marshal
* @param result the result to marshal to
- * @throws XmlMappingException if the given object cannot be marshalled to the result
- * @throws IOException if an I/O exception occurs
- * @throws IllegalArgumentException if result if neither a DOMResult, SAXResult,
- * StreamResult
- * @see #marshalDomResult(Object,javax.xml.transform.dom.DOMResult)
- * @see #marshalSaxResult(Object,javax.xml.transform.sax.SAXResult)
- * @see #marshalStreamResult(Object,javax.xml.transform.stream.StreamResult)
+ * @throws IOException if an I/O exception occurs
+ * @throws XmlMappingException if the given object cannot be marshalled to the result
+ * @throws IllegalArgumentException if result if neither a DOMResult,
+ * a SAXResult, nor a StreamResult
+ * @see #marshalDomResult(Object, javax.xml.transform.dom.DOMResult)
+ * @see #marshalSaxResult(Object, javax.xml.transform.sax.SAXResult)
+ * @see #marshalStreamResult(Object, javax.xml.transform.stream.StreamResult)
*/
- public final void marshal(Object graph, Result result) throws XmlMappingException, IOException {
+ public final void marshal(Object graph, Result result) throws IOException, XmlMappingException {
if (result instanceof DOMResult) {
marshalDomResult(graph, (DOMResult) result);
}
@@ -100,21 +107,20 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
}
/**
- * Unmarshals the given provided javax.xml.transform.Source into an object graph. unmarshalDomSource, unmarshalSaxSource, or
- * unmarshalStreamSource.
- *
+ * Unmarshals the given provided javax.xml.transform.Source into an object graph.
+ * unmarshalDomSource,
+ * unmarshalSaxSource, or unmarshalStreamSource.
* @param source the source to marshal from
* @return the object graph
- * @throws XmlMappingException if the given source cannot be mapped to an object
- * @throws IOException if an I/O Exception occurs
- * @throws IllegalArgumentException if source is neither a DOMSource, a
- * SAXSource, nor a StreamSource
+ * @throws IOException if an I/O Exception occurs
+ * @throws XmlMappingException if the given source cannot be mapped to an object
+ * @throws IllegalArgumentException if source is neither a DOMSource,
+ * a SAXSource, nor a StreamSource
* @see #unmarshalDomSource(javax.xml.transform.dom.DOMSource)
* @see #unmarshalSaxSource(javax.xml.transform.sax.SAXSource)
* @see #unmarshalStreamSource(javax.xml.transform.stream.StreamSource)
*/
- public final Object unmarshal(Source source) throws XmlMappingException, IOException {
+ public final Object unmarshal(Source source) throws IOException, XmlMappingException {
if (source instanceof DOMSource) {
return unmarshalDomSource((DOMSource) source);
}
@@ -133,24 +139,24 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
}
/**
- * Create a DocumentBuilder that this marshaller will use for creating DOM documents when passed an empty
- * DOMSource. Can be overridden in subclasses, adding further initialization of the builder.
- *
+ * Create a DocumentBuilder that this marshaller will use for creating
+ * DOM documents when passed an empty DOMSource.
+ * DocumentBuilderFactory that the DocumentBuilder should be created with
* @return the DocumentBuilder
- * @throws javax.xml.parsers.ParserConfigurationException
- * if thrown by JAXP methods
+ * @throws ParserConfigurationException if thrown by JAXP methods
*/
protected DocumentBuilder createDocumentBuilder(DocumentBuilderFactory factory)
throws ParserConfigurationException {
+
return factory.newDocumentBuilder();
}
/**
- * Create a DocumentBuilder that this marshaller will use for creating DOM documents when passed an empty
- * DOMSource. The resulting DocumentBuilderFactory is cached, so this method will only be
- * called once.
- *
+ * Create a DocumentBuilder that this marshaller will use for creating
+ * DOM documents when passed an empty DOMSource.
+ * DocumentBuilderFactory is cached, so this method
+ * will only be called once.
* @return the DocumentBuilderFactory
* @throws ParserConfigurationException if thrown by JAXP methods
*/
@@ -163,7 +169,6 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
/**
* Create a XMLReader that this marshaller will when passed an empty SAXSource.
- *
* @return the XMLReader
* @throws SAXException if thrown by JAXP methods
*/
@@ -171,18 +176,17 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
return XMLReaderFactory.createXMLReader();
}
- //
+
// Marshalling
- //
/**
- * Template method for handling DOMResults. This implementation defers to marshalDomNode.
- *
- * @param graph the root of the object graph to marshal
+ * Template method for handling DOMResults.
+ * marshalDomNode.
+ * @param graph the root of the object graph to marshal
* @param domResult the DOMResult
- * @throws XmlMappingException if the given object cannot be marshalled to the result
+ * @throws XmlMappingException if the given object cannot be marshalled to the result
* @throws IllegalArgumentException if the domResult is empty
- * @see #marshalDomNode(Object,org.w3c.dom.Node)
+ * @see #marshalDomNode(Object, org.w3c.dom.Node)
*/
protected void marshalDomResult(Object graph, DOMResult domResult) throws XmlMappingException {
Assert.notNull(domResult.getNode(), "DOMResult does not contain Node");
@@ -190,13 +194,13 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
}
/**
- * Template method for handling StaxResults. This implementation defers to
- * marshalXMLSteamWriter, or marshalXMLEventConsumer, depending on what is contained in the
+ * Template method for handling StaxResults.
+ * marshalXMLSteamWriter or
+ * marshalXMLEventConsumer, depending on what is contained in the
* StaxResult.
- *
- * @param graph the root of the object graph to marshal
+ * @param graph the root of the object graph to marshal
* @param staxResult a Spring {@link org.springframework.util.xml.StaxSource} or JAXP 1.4 {@link StAXSource}
- * @throws XmlMappingException if the given object cannot be marshalled to the result
+ * @throws XmlMappingException if the given object cannot be marshalled to the result
* @throws IllegalArgumentException if the domResult is empty
* @see #marshalDomNode(Object,org.w3c.dom.Node)
*/
@@ -217,13 +221,12 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
}
/**
- * Template method for handling SAXResults. This implementation defers to
- * marshalSaxHandlers.
- *
- * @param graph the root of the object graph to marshal
+ * Template method for handling SAXResults.
+ * marshalSaxHandlers.
+ * @param graph the root of the object graph to marshal
* @param saxResult the SAXResult
* @throws XmlMappingException if the given object cannot be marshalled to the result
- * @see #marshalSaxHandlers(Object,org.xml.sax.ContentHandler,org.xml.sax.ext.LexicalHandler)
+ * @see #marshalSaxHandlers(Object, org.xml.sax.ContentHandler, org.xml.sax.ext.LexicalHandler)
*/
protected void marshalSaxResult(Object graph, SAXResult saxResult) throws XmlMappingException {
ContentHandler contentHandler = saxResult.getHandler();
@@ -233,19 +236,19 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
}
/**
- * Template method for handling StreamResults. This implementation defers to
- * marshalOutputStream, or marshalWriter, depending on what is contained in the
- * StreamResult
- *
- * @param graph the root of the object graph to marshal
+ * Template method for handling StreamResults.
+ * marshalOutputStream or marshalWriter,
+ * depending on what is contained in the StreamResult
+ * @param graph the root of the object graph to marshal
* @param streamResult the StreamResult
- * @throws IOException if an I/O Exception occurs
- * @throws XmlMappingException if the given object cannot be marshalled to the result
- * @throws IllegalArgumentException if streamResult contains neither OutputStream nor
- * Writer.
+ * @throws IOException if an I/O Exception occurs
+ * @throws XmlMappingException if the given object cannot be marshalled to the result
+ * @throws IllegalArgumentException if streamResult does neither
+ * contain an OutputStream nor a Writer
*/
protected void marshalStreamResult(Object graph, StreamResult streamResult)
throws XmlMappingException, IOException {
+
if (streamResult.getOutputStream() != null) {
marshalOutputStream(graph, streamResult.getOutputStream());
}
@@ -257,27 +260,29 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
}
}
- //
+
// Unmarshalling
- //
/**
- * Template method for handling DOMSources. This implementation defers to unmarshalDomNode.
- * If the given source is empty, an empty source Document will be created as a placeholder.
- *
+ * Template method for handling DOMSources.
+ * unmarshalDomNode.
+ * If the given source is empty, an empty source Document
+ * will be created as a placeholder.
* @param domSource the DOMSource
* @return the object graph
+ * @throws XmlMappingException if the given source cannot be mapped to an object
* @throws IllegalArgumentException if the domSource is empty
- * @throws XmlMappingException if the given source cannot be mapped to an object
* @see #unmarshalDomNode(org.w3c.dom.Node)
*/
protected Object unmarshalDomSource(DOMSource domSource) throws XmlMappingException {
if (domSource.getNode() == null) {
try {
- if (documentBuilderFactory == null) {
- documentBuilderFactory = createDocumentBuilderFactory();
+ synchronized (this.documentBuilderFactoryMonitor) {
+ if (this.documentBuilderFactory == null) {
+ this.documentBuilderFactory = createDocumentBuilderFactory();
+ }
}
- DocumentBuilder documentBuilder = createDocumentBuilder(documentBuilderFactory);
+ DocumentBuilder documentBuilder = createDocumentBuilder(this.documentBuilderFactory);
domSource.setNode(documentBuilder.newDocument());
}
catch (ParserConfigurationException ex) {
@@ -289,9 +294,9 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
}
/**
- * Template method for handling StaxSources. This implementation defers to
- * unmarshalXmlStreamReader, or unmarshalXmlEventReader.
- *
+ * Template method for handling StaxSources.
+ * unmarshalXmlStreamReader or
+ * unmarshalXmlEventReader.
* @param staxSource the StaxSource
* @return the object graph
* @throws XmlMappingException if the given source cannot be mapped to an object
@@ -313,14 +318,13 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
}
/**
- * Template method for handling SAXSources. This implementation defers to
- * unmarshalSaxReader.
- *
+ * Template method for handling SAXSources.
+ * unmarshalSaxReader.
* @param saxSource the SAXSource
* @return the object graph
* @throws XmlMappingException if the given source cannot be mapped to an object
- * @throws IOException if an I/O Exception occurs
- * @see #unmarshalSaxReader(org.xml.sax.XMLReader,org.xml.sax.InputSource)
+ * @throws IOException if an I/O Exception occurs
+ * @see #unmarshalSaxReader(org.xml.sax.XMLReader, org.xml.sax.InputSource)
*/
protected Object unmarshalSaxSource(SAXSource saxSource) throws XmlMappingException, IOException {
if (saxSource.getXMLReader() == null) {
@@ -328,8 +332,7 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
saxSource.setXMLReader(createXmlReader());
}
catch (SAXException ex) {
- throw new UnmarshallingFailureException("Could not create XMLReader for SAXSource: " + ex.getMessage(),
- ex);
+ throw new UnmarshallingFailureException("Could not create XMLReader for SAXSource", ex);
}
}
if (saxSource.getInputSource() == null) {
@@ -339,12 +342,11 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
}
/**
- * Template method for handling StreamSources. This implementation defers to
- * unmarshalInputStream, or unmarshalReader.
- *
+ * Template method for handling StreamSources.
+ * unmarshalInputStream or unmarshalReader.
* @param streamSource the StreamSource
* @return the object graph
- * @throws IOException if an I/O exception occurs
+ * @throws IOException if an I/O exception occurs
* @throws XmlMappingException if the given source cannot be mapped to an object
*/
protected Object unmarshalStreamSource(StreamSource streamSource) throws XmlMappingException, IOException {
@@ -359,37 +361,35 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
}
}
- //
+
// Abstract template methods
- //
/**
- * Abstract template method for marshalling the given object graph to a DOM Node. Document node, a DocumentFragment node, or a Element node. In other
- * words, a node that accepts children.
- *
+ * Abstract template method for marshalling the given object graph to a DOM Node.
+ * Document node, a DocumentFragment node,
+ * or a Element node. In other words, a node that accepts children.
* @param graph the root of the object graph to marshal
- * @param node The DOM node that will contain the result tree
+ * @param node the DOM node that will contain the result tree
* @throws XmlMappingException if the given object cannot be marshalled to the DOM node
* @see org.w3c.dom.Document
* @see org.w3c.dom.DocumentFragment
* @see org.w3c.dom.Element
*/
- protected abstract void marshalDomNode(Object graph, Node node) throws XmlMappingException;
+ protected abstract void marshalDomNode(Object graph, Node node)
+ throws XmlMappingException;
/**
* Abstract template method for marshalling the given object to a StAX XMLEventWriter.
- *
- * @param graph the root of the object graph to marshal
+ * @param graph the root of the object graph to marshal
* @param eventWriter the XMLEventWriter to write to
* @throws XmlMappingException if the given object cannot be marshalled to the DOM node
*/
- protected abstract void marshalXmlEventWriter(Object graph, XMLEventWriter eventWriter) throws XmlMappingException;
+ protected abstract void marshalXmlEventWriter(Object graph, XMLEventWriter eventWriter)
+ throws XmlMappingException;
/**
* Abstract template method for marshalling the given object to a StAX XMLStreamWriter.
- *
- * @param graph the root of the object graph to marshal
+ * @param graph the root of the object graph to marshal
* @param streamWriter the XMLStreamWriter to write to
* @throws XmlMappingException if the given object cannot be marshalled to the DOM node
*/
@@ -398,41 +398,38 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
/**
* Abstract template method for marshalling the given object graph to a OutputStream.
- *
- * @param graph the root of the object graph to marshal
+ * @param graph the root of the object graph to marshal
* @param outputStream the OutputStream to write to
* @throws XmlMappingException if the given object cannot be marshalled to the writer
- * @throws IOException if an I/O exception occurs
+ * @throws IOException if an I/O exception occurs
*/
protected abstract void marshalOutputStream(Object graph, OutputStream outputStream)
throws XmlMappingException, IOException;
/**
* Abstract template method for marshalling the given object graph to a SAX ContentHandler.
- *
- * @param graph the root of the object graph to marshal
+ * @param graph the root of the object graph to marshal
* @param contentHandler the SAX ContentHandler
* @param lexicalHandler the SAX2 LexicalHandler. Can be null.
* @throws XmlMappingException if the given object cannot be marshalled to the handlers
*/
- protected abstract void marshalSaxHandlers(Object graph,
- ContentHandler contentHandler,
- LexicalHandler lexicalHandler) throws XmlMappingException;
+ protected abstract void marshalSaxHandlers(
+ Object graph, ContentHandler contentHandler, LexicalHandler lexicalHandler)
+ throws XmlMappingException;
/**
* Abstract template method for marshalling the given object graph to a Writer.
- *
- * @param graph the root of the object graph to marshal
+ * @param graph the root of the object graph to marshal
* @param writer the Writer to write to
* @throws XmlMappingException if the given object cannot be marshalled to the writer
- * @throws IOException if an I/O exception occurs
+ * @throws IOException if an I/O exception occurs
*/
- protected abstract void marshalWriter(Object graph, Writer writer) throws XmlMappingException, IOException;
+ protected abstract void marshalWriter(Object graph, Writer writer)
+ throws XmlMappingException, IOException;
/**
* Abstract template method for unmarshalling from a given DOM Node.
- *
- * @param node The DOM node that contains the objects to be unmarshalled
+ * @param node the DOM node that contains the objects to be unmarshalled
* @return the object graph
* @throws XmlMappingException if the given DOM node cannot be mapped to an object
*/
@@ -440,51 +437,52 @@ public abstract class AbstractMarshaller implements Marshaller, Unmarshaller {
/**
* Abstract template method for unmarshalling from a given Stax XMLEventReader.
- *
- * @param eventReader The XMLEventReader to read from
+ * @param eventReader the XMLEventReader to read from
* @return the object graph
* @throws XmlMappingException if the given event reader cannot be converted to an object
*/
- protected abstract Object unmarshalXmlEventReader(XMLEventReader eventReader) throws XmlMappingException;
+ protected abstract Object unmarshalXmlEventReader(XMLEventReader eventReader)
+ throws XmlMappingException;
/**
* Abstract template method for unmarshalling from a given Stax XMLStreamReader.
- *
- * @param streamReader The XMLStreamReader to read from
+ * @param streamReader the XMLStreamReader to read from
* @return the object graph
* @throws XmlMappingException if the given stream reader cannot be converted to an object
*/
- protected abstract Object unmarshalXmlStreamReader(XMLStreamReader streamReader) throws XmlMappingException;
+ protected abstract Object unmarshalXmlStreamReader(XMLStreamReader streamReader)
+ throws XmlMappingException;
/**
* Abstract template method for unmarshalling from a given InputStream.
- *
* @param inputStream the InputStreamStream to read from
* @return the object graph
* @throws XmlMappingException if the given stream cannot be converted to an object
- * @throws IOException if an I/O exception occurs
+ * @throws IOException if an I/O exception occurs
*/
- protected abstract Object unmarshalInputStream(InputStream inputStream) throws XmlMappingException, IOException;
+ protected abstract Object unmarshalInputStream(InputStream inputStream)
+ throws XmlMappingException, IOException;
/**
* Abstract template method for unmarshalling from a given Reader.
- *
* @param reader the Reader to read from
* @return the object graph
* @throws XmlMappingException if the given reader cannot be converted to an object
- * @throws IOException if an I/O exception occurs
+ * @throws IOException if an I/O exception occurs
*/
- protected abstract Object unmarshalReader(Reader reader) throws XmlMappingException, IOException;
+ protected abstract Object unmarshalReader(Reader reader)
+ throws XmlMappingException, IOException;
/**
- * Abstract template method for unmarshalling using a given SAX XMLReader and InputSource.
- *
- * @param xmlReader the SAX XMLReader to parse with
+ * Abstract template method for unmarshalling using a given SAX XMLReader
+ * and InputSource.
+ * @param xmlReader the SAX XMLReader to parse with
* @param inputSource the input source to parse from
* @return the object graph
* @throws XmlMappingException if the given reader and input source cannot be converted to an object
- * @throws java.io.IOException if an I/O exception occurs
+ * @throws IOException if an I/O exception occurs
*/
protected abstract Object unmarshalSaxReader(XMLReader xmlReader, InputSource inputSource)
throws XmlMappingException, IOException;
+
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/support/MarshallingSource.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/support/MarshallingSource.java
index a563ac0edaa..9ebc45ba098 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/support/MarshallingSource.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/support/MarshallingSource.java
@@ -28,7 +28,6 @@ import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
-import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;
import org.xml.sax.ext.LexicalHandler;
@@ -37,8 +36,8 @@ import org.springframework.oxm.Marshaller;
import org.springframework.util.Assert;
/**
- * {@link Source} implementation that uses a {@link Marshaller}.Can be constructed with a Marshaller and an
- * object to be marshalled.
+ * {@link Source} implementation that uses a {@link Marshaller}.Can be constructed with a
+ * Marshaller and an object to be marshalled.
*
* MarshallingSource extends from SAXSource, calling the methods of
* SAXSource is not supported. In general, the only supported operation on this class is
@@ -47,8 +46,8 @@ import org.springframework.util.Assert;
* UnsupportedOperationExceptions.
*
* @author Arjen Poutsma
- * @see javax.xml.transform.Transformer
* @since 3.0
+ * @see javax.xml.transform.Transformer
*/
public class MarshallingSource extends SAXSource {
@@ -56,11 +55,11 @@ public class MarshallingSource extends SAXSource {
private final Object content;
+
/**
- * Creates a new MarshallingSource with the given marshaller and content.
- *
+ * Create a new MarshallingSource with the given marshaller and content.
* @param marshaller the marshaller to use
- * @param content the object to be marshalled
+ * @param content the object to be marshalled
*/
public MarshallingSource(Marshaller marshaller, Object content) {
super(new MarshallingXMLReader(marshaller, content), new InputSource());
@@ -70,20 +69,23 @@ public class MarshallingSource extends SAXSource {
this.content = content;
}
- /** Returns the Marshaller used by this MarshallingSource. */
+
+ /**
+ * Return the Marshaller used by this MarshallingSource.
+ */
public Marshaller getMarshaller() {
- return marshaller;
+ return this.marshaller;
}
- /** Returns the object to be marshalled. */
+ /**
+ * Return the object to be marshalled.
+ */
public Object getContent() {
- return content;
+ return this.content;
}
/**
* Throws a UnsupportedOperationException.
- *
- * @throws UnsupportedOperationException always
*/
@Override
public void setInputSource(InputSource inputSource) {
@@ -92,14 +94,13 @@ public class MarshallingSource extends SAXSource {
/**
* Throws a UnsupportedOperationException.
- *
- * @throws UnsupportedOperationException always
*/
@Override
public void setXMLReader(XMLReader reader) {
throw new UnsupportedOperationException("setXMLReader is not supported");
}
+
private static class MarshallingXMLReader implements XMLReader {
private final Marshaller marshaller;
@@ -123,51 +124,51 @@ public class MarshallingSource extends SAXSource {
this.content = content;
}
- public ContentHandler getContentHandler() {
- return contentHandler;
- }
-
public void setContentHandler(ContentHandler contentHandler) {
this.contentHandler = contentHandler;
}
+ public ContentHandler getContentHandler() {
+ return this.contentHandler;
+ }
+
public void setDTDHandler(DTDHandler dtdHandler) {
this.dtdHandler = dtdHandler;
}
public DTDHandler getDTDHandler() {
- return dtdHandler;
- }
-
- public EntityResolver getEntityResolver() {
- return entityResolver;
+ return this.dtdHandler;
}
public void setEntityResolver(EntityResolver entityResolver) {
this.entityResolver = entityResolver;
}
- public ErrorHandler getErrorHandler() {
- return errorHandler;
+ public EntityResolver getEntityResolver() {
+ return this.entityResolver;
}
public void setErrorHandler(ErrorHandler errorHandler) {
this.errorHandler = errorHandler;
}
+ public ErrorHandler getErrorHandler() {
+ return this.errorHandler;
+ }
+
protected LexicalHandler getLexicalHandler() {
- return lexicalHandler;
+ return this.lexicalHandler;
}
- public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException {
+ public boolean getFeature(String name) throws SAXNotRecognizedException {
throw new SAXNotRecognizedException(name);
}
- public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException {
+ public void setFeature(String name, boolean value) throws SAXNotRecognizedException {
throw new SAXNotRecognizedException(name);
}
- public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException {
+ public Object getProperty(String name) throws SAXNotRecognizedException {
if ("http://xml.org/sax/properties/lexical-handler".equals(name)) {
return lexicalHandler;
}
@@ -176,20 +177,20 @@ public class MarshallingSource extends SAXSource {
}
}
- public void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException {
+ public void setProperty(String name, Object value) throws SAXNotRecognizedException {
if ("http://xml.org/sax/properties/lexical-handler".equals(name)) {
- lexicalHandler = (LexicalHandler) value;
+ this.lexicalHandler = (LexicalHandler) value;
}
else {
throw new SAXNotRecognizedException(name);
}
}
- public void parse(InputSource input) throws IOException, SAXException {
+ public void parse(InputSource input) throws SAXException {
parse();
}
- public void parse(String systemId) throws IOException, SAXException {
+ public void parse(String systemId) throws SAXException {
parse();
}
@@ -197,18 +198,19 @@ public class MarshallingSource extends SAXSource {
SAXResult result = new SAXResult(getContentHandler());
result.setLexicalHandler(getLexicalHandler());
try {
- marshaller.marshal(content, result);
+ this.marshaller.marshal(this.content, result);
}
catch (IOException ex) {
SAXParseException saxException = new SAXParseException(ex.getMessage(), null, null, -1, -1, ex);
- if (getErrorHandler() != null) {
- getErrorHandler().fatalError(saxException);
+ ErrorHandler errorHandler = getErrorHandler();
+ if (errorHandler != null) {
+ errorHandler.fatalError(saxException);
}
else {
throw saxException;
}
}
}
-
}
+
}
diff --git a/org.springframework.core/src/main/java/org/springframework/util/xml/SaxUtils.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/support/SaxResourceUtils.java
similarity index 77%
rename from org.springframework.core/src/main/java/org/springframework/util/xml/SaxUtils.java
rename to org.springframework.oxm/src/main/java/org/springframework/oxm/support/SaxResourceUtils.java
index 823da314fcd..6f653024d63 100644
--- a/org.springframework.core/src/main/java/org/springframework/util/xml/SaxUtils.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/support/SaxResourceUtils.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.util.xml;
+package org.springframework.oxm.support;
import java.io.IOException;
@@ -26,14 +26,14 @@ import org.springframework.core.io.Resource;
* Convenient utility methods for dealing with SAX.
*
* @author Arjen Poutsma
+ * @author Juergen Hoeller
* @since 3.0
*/
-public abstract class SaxUtils {
+public abstract class SaxResourceUtils {
/**
- * Creates a SAX InputSource from the given resource. Sets the system identifier to the resource's
- * URL, if available.
- *
+ * Create a SAX InputSource from the given resource.
+ * URL, if available.
* @param resource the resource
* @return the input source created from the resource
* @throws IOException if an I/O exception occurs
@@ -46,12 +46,15 @@ public abstract class SaxUtils {
return inputSource;
}
- /** Retrieves the URL from the given resource as System ID. Returns null if it cannot be openened. */
+ /**
+ * Retrieve the URL from the given resource as System ID.
+ * null if it cannot be opened.
+ */
private static String getSystemId(Resource resource) {
try {
return resource.getURI().toString();
}
- catch (IOException e) {
+ catch (IOException ex) {
return null;
}
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansMarshaller.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansMarshaller.java
index 05a7aecb264..d94d6ef5c68 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansMarshaller.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansMarshaller.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2002-2009 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package org.springframework.oxm.xmlbeans;
import java.io.IOException;
@@ -6,7 +22,6 @@ import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
@@ -19,6 +34,7 @@ import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.XmlOptions;
import org.apache.xmlbeans.XmlSaxHandler;
import org.apache.xmlbeans.XmlValidationError;
+import org.apache.xmlbeans.XMLStreamValidationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -30,24 +46,33 @@ import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.XMLReader;
import org.xml.sax.ext.LexicalHandler;
-import org.springframework.oxm.AbstractMarshaller;
import org.springframework.oxm.Marshaller;
+import org.springframework.oxm.ValidationFailureException;
import org.springframework.oxm.XmlMappingException;
+import org.springframework.oxm.MarshallingFailureException;
+import org.springframework.oxm.UnmarshallingFailureException;
+import org.springframework.oxm.UncategorizedMappingException;
+import org.springframework.oxm.support.AbstractMarshaller;
import org.springframework.util.xml.StaxUtils;
/**
- * Implementation of the {@link Marshaller} interface for XMLBeans. Further options can be set by setting the
- * xmlOptions property. The {@link XmlOptionsFactoryBean} is provided to easily wire up {@link XmlOptions}
- * instances. validating property, or by calling
- * the {@link #validate(XmlObject)} method directly. Invalid objects will result in an {@link
- * XmlBeansValidationFailureException}. Note that due to the nature of XMLBeans, this marshaller
- * requires all passed objects to be of type {@link XmlObject}.
+ * Implementation of the {@link Marshaller} interface for Apache XMLBeans.
+ *
+ * xmlOptions property.
+ * The {@link XmlOptionsFactoryBean} is provided to easily set up an {@link XmlOptions} instance.
+ *
+ * validating property,
+ * or by calling the {@link #validate(XmlObject)} method directly. Invalid objects will
+ * result in an {@link XmlBeansValidationFailureException}.
+ *
+ * XmlOptions.
- */
- public XmlOptions getXmlOptions() {
- return xmlOptions;
- }
/**
- * Sets the XmlOptions.
- *
+ * Set the XmlOptions.
* @see XmlOptionsFactoryBean
*/
public void setXmlOptions(XmlOptions xmlOptions) {
@@ -72,21 +90,30 @@ public class XmlBeansMarshaller extends AbstractMarshaller {
}
/**
- * Returns whether this marshaller should validate in- and outgoing documents.
+ * Return the XmlOptions.
*/
- public boolean isValidating() {
- return validating;
+ public XmlOptions getXmlOptions() {
+ return this.xmlOptions;
}
/**
- * Sets whether this marshaller should validate in- and outgoing documents. Default is false.
+ * Set whether this marshaller should validate in- and outgoing documents.
+ * Default is false.
*/
public void setValidating(boolean validating) {
this.validating = validating;
}
/**
- * Returns true if the given class is an implementation of {@link XmlObject}.
+ * Return whether this marshaller should validate in- and outgoing documents.
+ */
+ public boolean isValidating() {
+ return this.validating;
+ }
+
+
+ /**
+ * This implementation returns true if the given class is an implementation of {@link XmlObject}.
*/
public boolean supports(Class> clazz) {
return XmlObject.class.isAssignableFrom(clazz);
@@ -107,6 +134,7 @@ public class XmlBeansMarshaller extends AbstractMarshaller {
@Override
protected final void marshalOutputStream(Object graph, OutputStream outputStream)
throws XmlMappingException, IOException {
+
((XmlObject) graph).save(outputStream, getXmlOptions());
}
@@ -225,30 +253,13 @@ public class XmlBeansMarshaller extends AbstractMarshaller {
}
}
- /**
- * Converts the given XMLBeans exception to an appropriate exception from the org.springframework.oxm
- * hierarchy. XmlBeansUtils. Can be overridden in subclasses.
- * A boolean flag is used to indicate whether this exception occurs during marshalling or unmarshalling, since
- * XMLBeans itself does not make this distinction in its exception hierarchy.
- *
- * @param ex XMLBeans Exception that occured
- * @param marshalling indicates whether the exception occurs during marshalling (true), or unmarshalling
- * (false)
- * @return the corresponding XmlMappingException
- * @see XmlBeansUtils#convertXmlBeansException(Exception,boolean)
- */
- public XmlMappingException convertXmlBeansException(Exception ex, boolean marshalling) {
- return XmlBeansUtils.convertXmlBeansException(ex, marshalling);
- }
/**
- * Validates the given XmlObject.
- *
+ * Validate the given XmlObject.
* @param object the xml object to validate
- * @throws XmlBeansValidationFailureException
- * if the given object is not valid
+ * @throws XmlBeansValidationFailureException if the given object is not valid
*/
- public void validate(XmlObject object) throws XmlBeansValidationFailureException {
+ protected void validate(XmlObject object) throws ValidationFailureException {
if (isValidating() && object != null) {
// create a temporary xmlOptions just for validation
XmlOptions validateOptions = getXmlOptions() != null ? getXmlOptions() : new XmlOptions();
@@ -256,15 +267,44 @@ public class XmlBeansMarshaller extends AbstractMarshaller {
validateOptions.setErrorListener(errorsList);
if (!object.validate(validateOptions)) {
StringBuilder builder = new StringBuilder("Could not validate XmlObject :");
- for (Iterator iterator = errorsList.iterator(); iterator.hasNext();) {
- XmlError xmlError = (XmlError) iterator.next();
+ for (Object anErrorsList : errorsList) {
+ XmlError xmlError = (XmlError) anErrorsList;
if (xmlError instanceof XmlValidationError) {
builder.append(xmlError.toString());
}
}
- XmlException ex = new XmlException(builder.toString(), null, errorsList);
- throw new XmlBeansValidationFailureException(ex);
+ throw new ValidationFailureException("XMLBeans validation failure",
+ new XmlException(builder.toString(), null, errorsList));
}
}
}
+
+ /**
+ * Convert the given XMLBeans exception to an appropriate exception from the
+ * org.springframework.oxm hierarchy.
+ * true),
+ * or unmarshalling (false)
+ * @return the corresponding XmlMappingException
+ */
+ protected XmlMappingException convertXmlBeansException(Exception ex, boolean marshalling) {
+ if (ex instanceof XMLStreamValidationException) {
+ return new ValidationFailureException("XmlBeans validation exception", ex);
+ }
+ else if (ex instanceof XmlException || ex instanceof SAXException) {
+ if (marshalling) {
+ return new MarshallingFailureException("XMLBeans marshalling exception", ex);
+ }
+ else {
+ return new UnmarshallingFailureException("XMLBeans unmarshalling exception", ex);
+ }
+ }
+ else {
+ // fallback
+ return new UncategorizedMappingException("Unknown XMLBeans exception", ex);
+ }
+ }
+
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansMarshallingFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansMarshallingFailureException.java
deleted file mode 100644
index ecaa82a8993..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansMarshallingFailureException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.xmlbeans;
-
-import org.apache.xmlbeans.XmlException;
-import org.xml.sax.SAXException;
-
-import org.springframework.oxm.MarshallingFailureException;
-
-/**
- * XMLBeans-specific subclass of MarshallingFailureException.
- *
- * @author Arjen Poutsma
- * @see XmlBeansUtils#convertXmlBeansException(Exception,boolean)
- * @since 3.0
- */
-public class XmlBeansMarshallingFailureException extends MarshallingFailureException {
-
- public XmlBeansMarshallingFailureException(XmlException ex) {
- super("XMLBeans marshalling exception: " + ex.getMessage(), ex);
- }
-
- public XmlBeansMarshallingFailureException(SAXException ex) {
- super("XMLBeans marshalling exception: " + ex.getMessage(), ex);
- }
-
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansSystemException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansSystemException.java
deleted file mode 100644
index cef8c5a8805..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansSystemException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.xmlbeans;
-
-import org.springframework.oxm.UncategorizedXmlMappingException;
-
-/**
- * XMLBeans-specific subclass of UncategorizedXmlMappingException, for XMLBeans exceptions that cannot be
- * distinguished further.
- *
- * @author Arjen Poutsma
- * @since 3.0
- */
-public class XmlBeansSystemException extends UncategorizedXmlMappingException {
-
- public XmlBeansSystemException(Exception e) {
- super(e.getMessage(), e);
- }
-
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansUnmarshallingFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansUnmarshallingFailureException.java
deleted file mode 100644
index edd9cb4fd11..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansUnmarshallingFailureException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.xmlbeans;
-
-import org.apache.xmlbeans.XmlException;
-import org.xml.sax.SAXException;
-
-import org.springframework.oxm.UnmarshallingFailureException;
-
-/**
- * XMLBeans-specific subclass of UnmarshallingFailureException.
- *
- * @author Arjen Poutsma
- * @see XmlBeansUtils#convertXmlBeansException(Exception,boolean)
- * @since 3.0
- */
-public class XmlBeansUnmarshallingFailureException extends UnmarshallingFailureException {
-
- public XmlBeansUnmarshallingFailureException(XmlException ex) {
- super("XMLBeans unmarshalling exception: " + ex.getMessage(), ex);
- }
-
- public XmlBeansUnmarshallingFailureException(SAXException ex) {
- super("XMLBeans unmarshalling exception: " + ex.getMessage(), ex);
- }
-
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansUtils.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansUtils.java
deleted file mode 100644
index d84c813b969..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansUtils.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.xmlbeans;
-
-import org.apache.xmlbeans.XMLStreamValidationException;
-import org.apache.xmlbeans.XmlException;
-import org.xml.sax.SAXException;
-
-import org.springframework.oxm.XmlMappingException;
-
-/**
- * Generic utility methods for working with XMLBeans. Mainly for internal use within the framework.
- *
- * @author Arjen Poutsma
- * @since 3.0
- */
-public class XmlBeansUtils {
-
- /**
- * Converts the given XMLBeans exception to an appropriate exception from the org.springframework.oxm
- * hierarchy. true), or unmarshalling
- * (false)
- * @return the corresponding XmlMappingException
- */
- public static XmlMappingException convertXmlBeansException(Exception ex, boolean marshalling) {
- if (ex instanceof XMLStreamValidationException) {
- return new XmlBeansValidationFailureException((XMLStreamValidationException) ex);
- }
- else if (ex instanceof XmlException) {
- XmlException xmlException = (XmlException) ex;
- if (marshalling) {
- return new XmlBeansMarshallingFailureException(xmlException);
- }
- else {
- return new XmlBeansUnmarshallingFailureException(xmlException);
- }
- }
- else if (ex instanceof SAXException) {
- SAXException saxException = (SAXException) ex;
- if (marshalling) {
- return new XmlBeansMarshallingFailureException(saxException);
- }
- else {
- return new XmlBeansUnmarshallingFailureException(saxException);
- }
- }
- // fallback
- return new XmlBeansSystemException(ex);
- }
-
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansValidationFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansValidationFailureException.java
deleted file mode 100644
index c5899850756..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansValidationFailureException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.xmlbeans;
-
-import org.apache.xmlbeans.XMLStreamValidationException;
-import org.apache.xmlbeans.XmlException;
-
-import org.springframework.oxm.ValidationFailureException;
-
-/**
- * XMLBeans-specific subclass of ValidationFailureException.
- *
- * @author Arjen Poutsma
- * @see org.springframework.oxm.xmlbeans.XmlBeansUtils#convertXmlBeansException
- * @since 3.0
- */
-public class XmlBeansValidationFailureException extends ValidationFailureException {
-
- public XmlBeansValidationFailureException(XMLStreamValidationException ex) {
- super("XmlBeans validation exception: " + ex.getMessage(), ex);
- }
-
- public XmlBeansValidationFailureException(XmlException ex) {
- super("XmlBeans validation exception: " + ex.getMessage(), ex);
- }
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlOptionsFactoryBean.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlOptionsFactoryBean.java
index 001d751a626..2c90c53fd4a 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlOptionsFactoryBean.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlOptionsFactoryBean.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -16,64 +16,58 @@
package org.springframework.oxm.xmlbeans;
-import java.util.Iterator;
import java.util.Map;
import org.apache.xmlbeans.XmlOptions;
import org.springframework.beans.factory.FactoryBean;
-import org.springframework.beans.factory.InitializingBean;
/**
- * Factory bean that configures an XMLBeans XmlOptions object and provides it as a bean reference.
- * Typical usage will be to set XMLBeans options on this bean, and refer to it in the XmlBeansMarshaller.
+ * {@link FactoryBean} that configures an XMLBeans XmlOptions object
+ * and provides it as a bean reference.
+ *
+ * XmlOptions. */
- public Object getObject() throws Exception {
- return xmlOptions;
+ /**
+ * Set options on the underlying XmlOptions object.
+ * XmlOptions, the values vary per option.
+ * @see XmlOptions#put(Object,Object)
+ * @see XmlOptions#SAVE_PRETTY_PRINT
+ * @see XmlOptions#LOAD_STRIP_COMMENTS
+ */
+ public void setOptions(MapXmlOptions. */
- public Class getObjectType() {
+
+ public XmlOptions getObject() {
+ return this.xmlOptions;
+ }
+
+ public Class extends XmlOptions> getObjectType() {
return XmlOptions.class;
}
- /** Returns true. */
public boolean isSingleton() {
return true;
}
- /**
- * Sets options on the underlying XmlOptions object. The keys of the supplied map should be one of the
- * string constants defined in XmlOptions, the values vary per option.
- *
- * @see XmlOptions#put(Object,Object)
- * @see XmlOptions#SAVE_PRETTY_PRINT
- * @see XmlOptions#LOAD_STRIP_COMMENTS
- */
- public void setOptions(Map options) {
- this.options = options;
- }
-
- public void afterPropertiesSet() throws Exception {
- xmlOptions = new XmlOptions();
- if (options != null) {
- for (Iterator iterator = options.keySet().iterator(); iterator.hasNext();) {
- Object option = iterator.next();
- xmlOptions.put(option, options.get(option));
- }
- }
- }
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java
index c9b9d5eb2f3..ac2a439f423 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -23,7 +23,6 @@ import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
-import java.util.Iterator;
import java.util.Map;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
@@ -32,12 +31,14 @@ import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.converters.ConversionException;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.ConverterMatcher;
import com.thoughtworks.xstream.converters.SingleValueConverter;
import com.thoughtworks.xstream.io.HierarchicalStreamDriver;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
+import com.thoughtworks.xstream.io.StreamException;
import com.thoughtworks.xstream.io.xml.CompactWriter;
import com.thoughtworks.xstream.io.xml.DomReader;
import com.thoughtworks.xstream.io.xml.DomWriter;
@@ -47,6 +48,7 @@ import com.thoughtworks.xstream.io.xml.StaxReader;
import com.thoughtworks.xstream.io.xml.StaxWriter;
import com.thoughtworks.xstream.io.xml.XmlFriendlyReplacer;
import com.thoughtworks.xstream.io.xml.XppReader;
+import com.thoughtworks.xstream.mapper.CannotResolveClassException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -55,100 +57,83 @@ import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.ext.LexicalHandler;
-import org.springframework.beans.propertyeditors.ClassEditor;
-import org.springframework.oxm.AbstractMarshaller;
+import org.springframework.oxm.MarshallingFailureException;
+import org.springframework.oxm.UncategorizedMappingException;
+import org.springframework.oxm.UnmarshallingFailureException;
import org.springframework.oxm.XmlMappingException;
+import org.springframework.oxm.support.AbstractMarshaller;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.util.xml.StaxUtils;
/**
- * Implementation of the Marshaller interface for XStream. By default, XStream does not require any further
- * configuration, though class aliases can be used to have more control over the behavior of XStream. Due to
- * XStream's API, it is required to set the encoding used for writing to outputstreams. It defaults to
- * UTF-8. Note that XStream is an XML serialization library, not a data binding library.
- * Therefore, it has limited namespace support. As such, it is rather unsuitable for usage within Web services.
+ * Implementation of the Marshaller interface for XStream.
+ *
+ * UTF-8.
+ *
+ * Converters or SingleValueConverters to be registered with the
- * XStream instance.
- *
+ * Set the Converters or SingleValueConverters to be registered
+ * with the XStream instance.
* @see Converter
* @see SingleValueConverter
*/
public void setConverters(ConverterMatcher[] converters) {
for (int i = 0; i < converters.length; i++) {
if (converters[i] instanceof Converter) {
- getXStream().registerConverter((Converter) converters[i], i);
+ this.xstream.registerConverter((Converter) converters[i], i);
}
else if (converters[i] instanceof SingleValueConverter) {
- getXStream().registerConverter((SingleValueConverter) converters[i], i);
+ this.xstream.registerConverter((SingleValueConverter) converters[i], i);
}
else {
throw new IllegalArgumentException("Invalid ConverterMatcher [" + converters[i] + "]");
@@ -156,68 +141,48 @@ public class XStreamMarshaller extends AbstractMarshaller {
}
}
- /** Sets the XStream hierarchical stream driver to be used with stream readers and writers */
- public void setStreamDriver(HierarchicalStreamDriver streamDriver) {
- this.streamDriver = streamDriver;
- }
-
/**
- * Set a alias/type map, consisting of string aliases mapped to Class instances (or Strings to be
- * converted to Class instances).
- *
- * @see org.springframework.beans.propertyeditors.ClassEditor
+ * Set an alias/type map, consisting of string aliases mapped to Class instances.
*/
- public void setAliases(Map aliases) {
- for (Iterator iterator = aliases.entrySet().iterator(); iterator.hasNext();) {
- Map.Entry entry = (Map.Entry) iterator.next();
- // Check whether we need to convert from String to Class.
- Class type;
- if (entry.getValue() instanceof Class) {
- type = (Class) entry.getValue();
- }
- else {
- ClassEditor editor = new ClassEditor();
- editor.setAsText(String.valueOf(entry.getValue()));
- type = (Class) editor.getValue();
- }
- addAlias((String) entry.getKey(), type);
+ public void setAliases(Map<String, Class> pairs,
- * in which case {@link XStream#useAttributeFor(String,Class)} is called, or <Class, String> pairs,
- * which results in {@link XStream#useAttributeFor(Class,String)}.
+ * Set the types to use XML attributes for. The given map can contain
+ * either <String, Class> pairs, in which case
+ * {@link XStream#useAttributeFor(String, Class)} is called,
+ * or <Class, String> pairs, which results in
+ * {@link XStream#useAttributeFor(Class, String)} calls.
*/
- public void setUseAttributeFor(Map attributes) {
- for (Iterator iterator = attributes.entrySet().iterator(); iterator.hasNext();) {
- Map.Entry entry = (Map.Entry) iterator.next();
+ public void setUseAttributeFor(Map, ?> attributes) {
+ for (Map.Entry, ?> entry : attributes.entrySet()) {
if (entry.getKey() instanceof String && entry.getValue() instanceof Class) {
- getXStream().useAttributeFor((String) entry.getKey(), (Class) entry.getValue());
+ this.xstream.useAttributeFor((String) entry.getKey(), (Class) entry.getValue());
}
else if (entry.getKey() instanceof Class && entry.getValue() instanceof String) {
- getXStream().useAttributeFor((Class) entry.getKey(), (String) entry.getValue());
+ this.xstream.useAttributeFor((Class) entry.getKey(), (String) entry.getValue());
}
else {
throw new IllegalArgumentException("Invalid attribute key and value pair. " +
@@ -227,102 +192,97 @@ public class XStreamMarshaller extends AbstractMarshaller {
}
/**
- * Adds an implicit Collection for the given type.
- *
+ * Set a implicit colletion/type map, consisting of implicit collection String keys
+ * mapped to Class values.
* @see XStream#addImplicitCollection(Class, String)
*/
- public void addImplicitCollection(String name, Class type) {
- getXStream().addImplicitCollection(type, name);
+ public void setImplicitCollection(MapClass instances
- * (or Strings to be converted to Class instances).
- *
+ * Add an implicit Collection for the given type.
* @see XStream#addImplicitCollection(Class, String)
*/
- public void setImplicitCollection(Map implicitCollection) {
- for (Iterator iterator = implicitCollection.entrySet().iterator(); iterator.hasNext();) {
- Map.Entry entry = (Map.Entry) iterator.next();
- // Check whether we need to convert from String to Class.
- Class type;
- if (entry.getValue() instanceof Class) {
- type = (Class) entry.getValue();
- }
- else {
- ClassEditor editor = new ClassEditor();
- editor.setAsText(String.valueOf(entry.getValue()));
- type = (Class) editor.getValue();
- }
- addImplicitCollection((String) entry.getKey(), type);
- }
+ public void addImplicitCollection(String name, Class type) {
+ this.xstream.addImplicitCollection(type, name);
}
/**
- * Adds an omitted field for the given type.
- *
- * @param type the type to be containing the field
- * @param fieldName field to omitt
+ * Specify omitted fields, as a Map consisting of Class instances
+ * mapped to comma separated field names.
* @see XStream#omitField(Class, String)
*/
- public void addOmittedField(Class type, String fieldName) {
- getXStream().omitField(type, fieldName);
+ public void setOmittedFields(MapClass instances (or Strings to be converted to
- * Class instances) mapped to comma separated field names.
- *
+ * Add an omitted field for the given type.
+ * @param type the type to be containing the field
+ * @param fieldName field to omitt
* @see XStream#omitField(Class, String)
*/
- public void setOmittedFields(Map omittedFields) {
- for (Iterator iterator = omittedFields.entrySet().iterator(); iterator.hasNext();) {
- Map.Entry entry = (Map.Entry) iterator.next();
- // Check whether we need to convert from String to Class.
- Class type;
- if (entry.getKey() instanceof Class) {
- type = (Class) entry.getKey();
- }
- else {
- ClassEditor editor = new ClassEditor();
- editor.setAsText(String.valueOf(entry.getKey()));
- type = (Class) editor.getValue();
- }
- // add each omitted field for the current type
- String fieldsString = (String) entry.getValue();
- String[] fields = StringUtils.commaDelimitedListToStringArray(fieldsString);
- for (String field : fields) {
- addOmittedField(type, field);
- }
- }
+ public void addOmittedField(Class type, String fieldName) {
+ this.xstream.omitField(type, fieldName);
}
/**
- * Sets the classes, for which mappings will be read from class-level JDK 1.5+ annotation metadata.
- *
- * @see com.thoughtworks.xstream.annotations.Annotations#configureAliases(com.thoughtworks.xstream.XStream, Class[])
+ * Set the classes for which mappings will be read from class-level JDK 1.5+ annotation metadata.
+ * @see com.thoughtworks.xstream.XStream#processAnnotations(Class)
*/
public void setAnnotatedClass(Class> annotatedClass) {
Assert.notNull(annotatedClass, "'annotatedClass' must not be null");
- getXStream().processAnnotations(annotatedClass);
+ this.xstream.processAnnotations(annotatedClass);
}
/**
- * Sets annotated classes, for which aliases will be read from class-level JDK 1.5+ annotation metadata.
- *
- * @see com.thoughtworks.xstream.annotations.Annotations#configureAliases(com.thoughtworks.xstream.XStream, Class[])
+ * Set annotated classes for which aliases will be read from class-level JDK 1.5+ annotation metadata.
+ * @see com.thoughtworks.xstream.XStream#processAnnotations(Class[])
*/
public void setAnnotatedClasses(Class>[] annotatedClasses) {
Assert.notEmpty(annotatedClasses, "'annotatedClasses' must not be empty");
- getXStream().processAnnotations(annotatedClasses);
+ this.xstream.processAnnotations(annotatedClasses);
+ }
+
+ /**
+ * Set the XStream hierarchical stream driver to be used with stream readers and writers.
+ */
+ public void setStreamDriver(HierarchicalStreamDriver streamDriver) {
+ this.streamDriver = streamDriver;
+ }
+
+ /**
+ * Set the encoding to be used for stream access.
+ * @see #DEFAULT_ENCODING
+ */
+ public void setEncoding(String encoding) {
+ this.encoding = encoding;
}
+ /**
+ * Set the classes supported by this marshaller.
+ * org.springframework.oxm
- * hierarchy. XStreamUtils. Can be overridden in subclasses.
- *
- * @param ex exception that occured
- * @param marshalling indicates whether the exception occurs during marshalling (true), or unmarshalling
- * (false)
- * @return the corresponding XmlMappingException instance
- * @see XStreamUtils#convertXStreamException(Exception,boolean)
- */
- public XmlMappingException convertXStreamException(Exception ex, boolean marshalling) {
- return XStreamUtils.convertXStreamException(ex, marshalling);
- }
- //
// Marshalling
- //
-
- /**
- * Marshals the given graph to the given XStream HierarchicalStreamWriter. Converts exceptions using
- * convertXStreamException.
- */
- private void marshal(Object graph, HierarchicalStreamWriter streamWriter) {
- try {
- getXStream().marshal(graph, streamWriter);
- }
- catch (Exception ex) {
- throw convertXStreamException(ex, true);
- }
- }
@Override
protected void marshalDomNode(Object graph, Node node) throws XmlMappingException {
@@ -394,14 +326,14 @@ public class XStreamMarshaller extends AbstractMarshaller {
}
@Override
- protected void marshalOutputStream(Object graph, OutputStream outputStream)
- throws XmlMappingException, IOException {
- marshalWriter(graph, new OutputStreamWriter(outputStream, getEncoding()));
+ protected void marshalOutputStream(Object graph, OutputStream outputStream) throws XmlMappingException, IOException {
+ marshalWriter(graph, new OutputStreamWriter(outputStream, this.encoding));
}
@Override
protected void marshalSaxHandlers(Object graph, ContentHandler contentHandler, LexicalHandler lexicalHandler)
throws XmlMappingException {
+
SaxWriter saxWriter = new SaxWriter();
saxWriter.setContentHandler(contentHandler);
marshal(graph, saxWriter);
@@ -417,19 +349,22 @@ public class XStreamMarshaller extends AbstractMarshaller {
}
}
- //
- // Unmarshalling
- //
-
- private Object unmarshal(HierarchicalStreamReader streamReader) {
+ /**
+ * Marshals the given graph to the given XStream HierarchicalStreamWriter.
+ * Converts exceptions using {@link #convertXStreamException}.
+ */
+ private void marshal(Object graph, HierarchicalStreamWriter streamWriter) {
try {
- return getXStream().unmarshal(streamReader);
+ this.xstream.marshal(graph, streamWriter);
}
catch (Exception ex) {
- throw convertXStreamException(ex, false);
+ throw convertXStreamException(ex, true);
}
}
+
+ // Unmarshalling
+
@Override
protected Object unmarshalDomNode(Node node) throws XmlMappingException {
HierarchicalStreamReader streamReader;
@@ -463,7 +398,7 @@ public class XStreamMarshaller extends AbstractMarshaller {
@Override
protected Object unmarshalInputStream(InputStream inputStream) throws XmlMappingException, IOException {
- return unmarshalReader(new InputStreamReader(inputStream, getEncoding()));
+ return unmarshalReader(new InputStreamReader(inputStream, this.encoding));
}
@Override
@@ -479,8 +414,45 @@ public class XStreamMarshaller extends AbstractMarshaller {
@Override
protected Object unmarshalSaxReader(XMLReader xmlReader, InputSource inputSource)
throws XmlMappingException, IOException {
+
throw new UnsupportedOperationException(
"XStreamMarshaller does not support unmarshalling using SAX XMLReaders");
}
+ private Object unmarshal(HierarchicalStreamReader streamReader) {
+ try {
+ return this.xstream.unmarshal(streamReader);
+ }
+ catch (Exception ex) {
+ throw convertXStreamException(ex, false);
+ }
+ }
+
+
+ /**
+ * Convert the given XStream exception to an appropriate exception from the
+ * org.springframework.oxm hierarchy.
+ * true),
+ * or unmarshalling (false)
+ * @return the corresponding XmlMappingException
+ */
+ protected XmlMappingException convertXStreamException(Exception ex, boolean marshalling) {
+ if (ex instanceof StreamException || ex instanceof CannotResolveClassException ||
+ ex instanceof ConversionException) {
+ if (marshalling) {
+ return new MarshallingFailureException("XStream marshalling exception", ex);
+ }
+ else {
+ return new UnmarshallingFailureException("XStream unmarshalling exception", ex);
+ }
+ }
+ else {
+ // fallback
+ return new UncategorizedMappingException("Unknown XStream exception", ex);
+ }
+ }
+
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshallingFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshallingFailureException.java
deleted file mode 100644
index 2dc30f234c5..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshallingFailureException.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2006 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.oxm.xstream;
-
-import com.thoughtworks.xstream.alias.CannotResolveClassException;
-import com.thoughtworks.xstream.converters.ConversionException;
-import com.thoughtworks.xstream.io.StreamException;
-
-import org.springframework.oxm.MarshallingFailureException;
-
-/**
- * XStream-specific subclass of MarshallingFailureException.
- *
- * @author Arjen Poutsma
- * @since 3.0
- */
-public class XStreamMarshallingFailureException extends MarshallingFailureException {
-
- public XStreamMarshallingFailureException(String msg) {
- super(msg);
- }
-
- public XStreamMarshallingFailureException(StreamException ex) {
- super("XStream marshalling exception: " + ex.getMessage(), ex);
-
- }
-
- public XStreamMarshallingFailureException(CannotResolveClassException ex) {
- super("XStream resolving exception: " + ex.getMessage(), ex);
- }
-
- public XStreamMarshallingFailureException(ConversionException ex) {
- super("XStream conversion exception: " + ex.getMessage(), ex);
- }
-
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamSystemException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamSystemException.java
deleted file mode 100644
index 31dd3565bd7..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamSystemException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2006 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.oxm.xstream;
-
-import org.springframework.oxm.UncategorizedXmlMappingException;
-
-/**
- * XStream-specific subclass of UncategorizedXmlMappingException, for XStream exceptions that cannot be
- * distinguished further.
- *
- * @author Arjen Poutsma
- * @since 3.0
- */
-public class XStreamSystemException extends UncategorizedXmlMappingException {
-
- public XStreamSystemException(String msg, Throwable ex) {
- super(msg, ex);
- }
-
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamUnmarshallingFailureException.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamUnmarshallingFailureException.java
deleted file mode 100644
index 7b7671fde58..00000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamUnmarshallingFailureException.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2006 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.oxm.xstream;
-
-import javax.xml.stream.XMLStreamException;
-
-import com.thoughtworks.xstream.alias.CannotResolveClassException;
-import com.thoughtworks.xstream.converters.ConversionException;
-import com.thoughtworks.xstream.io.StreamException;
-
-import org.springframework.oxm.UnmarshallingFailureException;
-
-/**
- * XStream-specific subclass of UnmarshallingFailureException.
- *
- * @author Arjen Poutsma
- * @since 3.0
- */
-public class XStreamUnmarshallingFailureException extends UnmarshallingFailureException {
-
- public XStreamUnmarshallingFailureException(StreamException ex) {
- super("XStream unmarshalling exception: " + ex.getMessage(), ex);
- }
-
- public XStreamUnmarshallingFailureException(CannotResolveClassException ex) {
- super("XStream resolving exception: " + ex.getMessage(), ex);
- }
-
- public XStreamUnmarshallingFailureException(ConversionException ex) {
- super("XStream conversion exception: " + ex.getMessage(), ex);
- }
-
- public XStreamUnmarshallingFailureException(String msg) {
- super(msg);
- }
-
- public XStreamUnmarshallingFailureException(String msg, XMLStreamException ex) {
- super(msg, ex);
- }
-
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamUtils.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamUtils.java
index 5c4ab5c66c3..1750cb5c752 100644
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamUtils.java
+++ b/org.springframework.oxm/src/main/java/org/springframework/oxm/xstream/XStreamUtils.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -16,57 +16,48 @@
package org.springframework.oxm.xstream;
-import com.thoughtworks.xstream.alias.CannotResolveClassException;
import com.thoughtworks.xstream.converters.ConversionException;
import com.thoughtworks.xstream.io.StreamException;
+import com.thoughtworks.xstream.mapper.CannotResolveClassException;
+import org.springframework.oxm.MarshallingFailureException;
+import org.springframework.oxm.UncategorizedMappingException;
+import org.springframework.oxm.UnmarshallingFailureException;
import org.springframework.oxm.XmlMappingException;
/**
* Generic utility methods for working with XStream. Mainly for internal use within the framework.
*
* @author Arjen Poutsma
+ * @author Juergen Hoeller
* @since 3.0
*/
-public abstract class XStreamUtils {
+abstract class XStreamUtils {
/**
- * Converts the given XStream exception to an appropriate exception from the org.springframework.oxm
- * hierarchy. org.springframework.oxm hierarchy.
+ * true), or unmarshalling
- * (false)
+ * @param ex XStream exception that occured
+ * @param marshalling indicates whether the exception occurs during marshalling (true),
+ * or unmarshalling (false)
* @return the corresponding XmlMappingException
*/
public static XmlMappingException convertXStreamException(Exception ex, boolean marshalling) {
- if (ex instanceof StreamException) {
+ if (ex instanceof StreamException || ex instanceof CannotResolveClassException ||
+ ex instanceof ConversionException) {
if (marshalling) {
- return new XStreamMarshallingFailureException((StreamException) ex);
+ return new MarshallingFailureException("XStream marshalling exception", ex);
}
else {
- return new XStreamUnmarshallingFailureException((StreamException) ex);
+ return new UnmarshallingFailureException("XStream unmarshalling exception", ex);
}
}
- else if (ex instanceof CannotResolveClassException) {
- if (marshalling) {
- return new XStreamMarshallingFailureException((CannotResolveClassException) ex);
- }
- else {
- return new XStreamUnmarshallingFailureException((CannotResolveClassException) ex);
- }
- }
- else if (ex instanceof ConversionException) {
- if (marshalling) {
- return new XStreamMarshallingFailureException((ConversionException) ex);
- }
- else {
- return new XStreamUnmarshallingFailureException((ConversionException) ex);
- }
+ else {
+ // fallback
+ return new UncategorizedMappingException("Unknown XStream exception", ex);
}
- // fallback
- return new XStreamSystemException("Unknown XStream exception: " + ex.getMessage(), ex);
}
}
diff --git a/org.springframework.oxm/src/test/java/org/springframework/oxm/AbstractMarshallerTestCase.java b/org.springframework.oxm/src/test/java/org/springframework/oxm/AbstractMarshallerTests.java
similarity index 97%
rename from org.springframework.oxm/src/test/java/org/springframework/oxm/AbstractMarshallerTestCase.java
rename to org.springframework.oxm/src/test/java/org/springframework/oxm/AbstractMarshallerTests.java
index 15c83191488..f69e71def9d 100644
--- a/org.springframework.oxm/src/test/java/org/springframework/oxm/AbstractMarshallerTestCase.java
+++ b/org.springframework.oxm/src/test/java/org/springframework/oxm/AbstractMarshallerTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.oxm;
import java.io.ByteArrayOutputStream;
@@ -38,7 +39,10 @@ import org.w3c.dom.Text;
import org.springframework.util.xml.StaxUtils;
-public abstract class AbstractMarshallerTestCase {
+/**
+ * @author Arjen Poutsma
+ */
+public abstract class AbstractMarshallerTests {
protected Marshaller marshaller;
diff --git a/org.springframework.oxm/src/test/java/org/springframework/oxm/AbstractUnmarshallerTestCase.java b/org.springframework.oxm/src/test/java/org/springframework/oxm/AbstractUnmarshallerTests.java
similarity index 97%
rename from org.springframework.oxm/src/test/java/org/springframework/oxm/AbstractUnmarshallerTestCase.java
rename to org.springframework.oxm/src/test/java/org/springframework/oxm/AbstractUnmarshallerTests.java
index d2158f415a8..d92510e4554 100644
--- a/org.springframework.oxm/src/test/java/org/springframework/oxm/AbstractUnmarshallerTestCase.java
+++ b/org.springframework.oxm/src/test/java/org/springframework/oxm/AbstractUnmarshallerTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.oxm;
import java.io.ByteArrayInputStream;
@@ -41,7 +42,10 @@ import org.xml.sax.helpers.XMLReaderFactory;
import org.springframework.util.xml.StaxUtils;
-public abstract class AbstractUnmarshallerTestCase {
+/**
+ * @author Arjen Poutsma
+ */
+public abstract class AbstractUnmarshallerTests {
protected Unmarshaller unmarshaller;
diff --git a/org.springframework.oxm/src/test/java/org/springframework/oxm/castor/CastorMarshallerTest.java b/org.springframework.oxm/src/test/java/org/springframework/oxm/castor/CastorMarshallerTests.java
similarity index 93%
rename from org.springframework.oxm/src/test/java/org/springframework/oxm/castor/CastorMarshallerTest.java
rename to org.springframework.oxm/src/test/java/org/springframework/oxm/castor/CastorMarshallerTests.java
index 870d56b5f48..74ff29b371d 100644
--- a/org.springframework.oxm/src/test/java/org/springframework/oxm/castor/CastorMarshallerTest.java
+++ b/org.springframework.oxm/src/test/java/org/springframework/oxm/castor/CastorMarshallerTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.oxm.castor;
import javax.xml.transform.sax.SAXResult;
@@ -24,10 +25,13 @@ import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.springframework.core.io.ClassPathResource;
-import org.springframework.oxm.AbstractMarshallerTestCase;
+import org.springframework.oxm.AbstractMarshallerTests;
import org.springframework.oxm.Marshaller;
-public class CastorMarshallerTest extends AbstractMarshallerTestCase {
+/**
+ * @author Arjen Poutsma
+ */
+public class CastorMarshallerTests extends AbstractMarshallerTests {
@Override
protected Marshaller createMarshaller() throws Exception {
@@ -77,5 +81,4 @@ public class CastorMarshallerTest extends AbstractMarshallerTestCase {
assertTrue("CastorMarshaller does not support Flight", marshaller.supports(Flight.class));
}
-
}
diff --git a/org.springframework.oxm/src/test/java/org/springframework/oxm/castor/CastorUnmarshallerTest.java b/org.springframework.oxm/src/test/java/org/springframework/oxm/castor/CastorUnmarshallerTests.java
similarity index 91%
rename from org.springframework.oxm/src/test/java/org/springframework/oxm/castor/CastorUnmarshallerTest.java
rename to org.springframework.oxm/src/test/java/org/springframework/oxm/castor/CastorUnmarshallerTests.java
index 4789bf03af5..c9a9c44f40e 100644
--- a/org.springframework.oxm/src/test/java/org/springframework/oxm/castor/CastorUnmarshallerTest.java
+++ b/org.springframework.oxm/src/test/java/org/springframework/oxm/castor/CastorUnmarshallerTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.springframework.oxm.castor;
import java.io.ByteArrayInputStream;
@@ -24,10 +25,13 @@ import static org.junit.Assert.assertNotNull;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
-import org.springframework.oxm.AbstractUnmarshallerTestCase;
+import org.springframework.oxm.AbstractUnmarshallerTests;
import org.springframework.oxm.Unmarshaller;
-public class CastorUnmarshallerTest extends AbstractUnmarshallerTestCase {
+/**
+ * @author Arjen Poutsma
+ */
+public class CastorUnmarshallerTests extends AbstractUnmarshallerTests {
@Override
protected void testFlights(Object o) {
diff --git a/org.springframework.oxm/src/test/java/org/springframework/oxm/castor/CastorUtilsTest.java b/org.springframework.oxm/src/test/java/org/springframework/oxm/castor/CastorUtilsTest.java
deleted file mode 100644
index 8f663d0d132..00000000000
--- a/org.springframework.oxm/src/test/java/org/springframework/oxm/castor/CastorUtilsTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2005 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.oxm.castor;
-
-import junit.framework.TestCase;
-import org.exolab.castor.xml.MarshalException;
-import org.exolab.castor.xml.ValidationException;
-import org.exolab.castor.xml.XMLException;
-
-public class CastorUtilsTest extends TestCase {
-
- public void testConvertMarshalException() {
- assertTrue("Invalid exception conversion", CastorUtils
- .convertXmlException(new MarshalException(""), true) instanceof CastorMarshallingFailureException);
- assertTrue("Invalid exception conversion", CastorUtils
- .convertXmlException(new MarshalException(""), false) instanceof CastorUnmarshallingFailureException);
- }
-
- public void testConvertValidationException() {
- assertTrue("Invalid exception conversion", CastorUtils
- .convertXmlException(new ValidationException(""), false) instanceof CastorValidationFailureException);
- }
-
- public void testConvertXMLException() {
- assertTrue("Invalid exception conversion",
- CastorUtils.convertXmlException(new XMLException(""), false) instanceof CastorSystemException);
- }
-
-}
diff --git a/org.springframework.oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2MarshallerTest.java b/org.springframework.oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2MarshallerTests.java
similarity index 95%
rename from org.springframework.oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2MarshallerTest.java
rename to org.springframework.oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2MarshallerTests.java
index 6b3624426b5..7a262afacbb 100644
--- a/org.springframework.oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2MarshallerTest.java
+++ b/org.springframework.oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2MarshallerTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -21,12 +21,13 @@ import java.lang.reflect.Method;
import java.util.Collections;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
+import javax.xml.bind.JAXBException;
import javax.xml.transform.Result;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamResult;
import static org.easymock.EasyMock.*;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
import org.junit.Test;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
@@ -34,13 +35,13 @@ import org.xml.sax.Locator;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
-import org.springframework.oxm.AbstractMarshallerTestCase;
+import org.springframework.oxm.AbstractMarshallerTests;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.XmlMappingException;
import org.springframework.oxm.mime.MimeContainer;
import org.springframework.util.FileCopyUtils;
-public class Jaxb2MarshallerTest extends AbstractMarshallerTestCase {
+public class Jaxb2MarshallerTests extends AbstractMarshallerTests {
private static final String CONTEXT_PATH = "org.springframework.oxm.jaxb";
@@ -106,7 +107,7 @@ public class Jaxb2MarshallerTest extends AbstractMarshallerTestCase {
marshaller.afterPropertiesSet();
}
- @Test(expected = XmlMappingException.class)
+ @Test(expected = JAXBException.class)
public void testInvalidContextPath() throws Exception {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("ab");
diff --git a/org.springframework.oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTest.java b/org.springframework.oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTests.java
similarity index 96%
rename from org.springframework.oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTest.java
rename to org.springframework.oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTests.java
index 2c83ece02a1..a0468483e09 100644
--- a/org.springframework.oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTest.java
+++ b/org.springframework.oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2006 the original author or authors.
+ * Copyright 2002-2009 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.
@@ -31,12 +31,12 @@ import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
-import org.springframework.oxm.AbstractUnmarshallerTestCase;
+import org.springframework.oxm.AbstractUnmarshallerTests;
import org.springframework.oxm.Unmarshaller;
import org.springframework.oxm.mime.MimeContainer;
import org.springframework.util.xml.StaxUtils;
-public class Jaxb2UnmarshallerTest extends AbstractUnmarshallerTestCase {
+public class Jaxb2UnmarshallerTests extends AbstractUnmarshallerTests {
private static final String INPUT_STRING = "