diff --git a/org.springframework.oxm/oxm.iml b/org.springframework.oxm/oxm.iml
index e4111f1520..d533066117 100644
--- a/org.springframework.oxm/oxm.iml
+++ b/org.springframework.oxm/oxm.iml
@@ -33,7 +33,6 @@
- true
if this marshaller can indeed marshal instances of the supplied type; false
- * otherwise
- */
- boolean supports(Type type);
-}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/GenericUnmarshaller.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/GenericUnmarshaller.java
deleted file mode 100644
index e98f14b3d7..0000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/GenericUnmarshaller.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2007 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;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-
-/**
- * Extension of the {@link Unmarshaller} interface that supports Java 5 generics. More specifically, this unmarshaller
- * adds support for the new {@link Type} hierarchy, returned by methods such as {@link
- * Method#getGenericParameterTypes()} and {@link Method#getGenericReturnType()}.
- *
- * @author Arjen Poutsma
- * @since 3.0
- */
-public interface GenericUnmarshaller extends Unmarshaller {
-
- /**
- * Indicates whether this unmarshaller can unmarshal instances of the supplied type.
- *
- * @param type the type that this unmarshaller is being asked if it can marshal
- * @return true
if this unmarshaller can indeed unmarshal to the supplied type; false
- * otherwise
- */
- boolean supports(Type type);
-}
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 60ea799485..d8b60aa121 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
@@ -46,6 +46,6 @@ public interface Marshaller {
* @return true
if this marshaller can indeed marshal instances of the supplied class; false
* otherwise
*/
- boolean supports(Class clazz);
+ boolean supports(Class> clazz);
}
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 c346c16bd7..156ee9f7ad 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
@@ -44,6 +44,6 @@ public interface Unmarshaller {
* @return true
if this unmarshaller can indeed unmarshal to the supplied class; false
* otherwise
*/
- boolean supports(Class clazz);
+ boolean supports(Class> clazz);
}
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 8d9447b4a9..6fe76dfde9 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
@@ -75,7 +75,9 @@ 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.
+ */
public static final String DEFAULT_ENCODING = "UTF-8";
private Resource[] mappingLocations;
@@ -96,7 +98,9 @@ public class CastorMarshaller extends AbstractMarshaller implements Initializing
private Properties namespaceMappings;
- /** Returns whether the Castor {@link Unmarshaller} should ignore attributes that do not match a specific field. */
+ /**
+ * Returns whether the Castor {@link Unmarshaller} should ignore attributes that do not match a specific field.
+ */
public boolean getIgnoreExtraAttributes() {
return ignoreExtraAttributes;
}
@@ -111,7 +115,9 @@ public class CastorMarshaller extends AbstractMarshaller implements Initializing
this.ignoreExtraAttributes = ignoreExtraAttributes;
}
- /** Returns whether the Castor {@link Unmarshaller} should ignore elements that do not match a specific field. */
+ /**
+ * Returns whether the Castor {@link Unmarshaller} should ignore elements that do not match a specific field.
+ */
public boolean getIgnoreExtraElements() {
return ignoreExtraElements;
}
@@ -126,7 +132,9 @@ public class CastorMarshaller extends AbstractMarshaller implements Initializing
this.ignoreExtraElements = ignoreExtraElements;
}
- /** Returns whether the Castor {@link Unmarshaller} should preserve "ignorable" whitespace. */
+ /**
+ * Returns whether the Castor {@link Unmarshaller} should preserve "ignorable" whitespace.
+ */
public boolean getWhitespacePreserve() {
return whitespacePreserve;
}
@@ -140,7 +148,9 @@ public class CastorMarshaller extends AbstractMarshaller implements Initializing
this.whitespacePreserve = whitespacePreserve;
}
- /** Returns whether this marshaller should validate in- and outgoing documents. */
+ /**
+ * Returns whether this marshaller should validate in- and outgoing documents.
+ */
public boolean isValidating() {
return validating;
}
@@ -154,7 +164,9 @@ public class CastorMarshaller extends AbstractMarshaller implements Initializing
this.validating = validating;
}
- /** Returns the namespace mappings. Property names are interpreted as namespace prefixes; values are namespace URIs. */
+ /**
+ * Returns the namespace mappings. Property names are interpreted as namespace prefixes; values are namespace URIs.
+ */
public Properties getNamespaceMappings() {
return namespaceMappings;
}
@@ -177,12 +189,16 @@ public class CastorMarshaller extends AbstractMarshaller implements Initializing
this.encoding = encoding;
}
- /** Sets the locations of the Castor XML Mapping files. */
+ /**
+ * Sets the locations of the Castor XML Mapping files.
+ */
public void setMappingLocation(Resource mappingLocation) {
mappingLocations = new Resource[]{mappingLocation};
}
- /** Sets the locations of the Castor XML Mapping files. */
+ /**
+ * Sets the locations of the Castor XML Mapping files.
+ */
public void setMappingLocations(Resource[] mappingLocations) {
this.mappingLocations = mappingLocations;
}
@@ -223,8 +239,10 @@ public class CastorMarshaller extends AbstractMarshaller implements Initializing
}
}
- /** Returns true
for all classes, i.e. Castor supports arbitrary classes. */
- public boolean supports(Class clazz) {
+ /**
+ * Returns true
for all classes, i.e. Castor supports arbitrary classes.
+ */
+ public boolean supports(Class> clazz) {
return true;
}
diff --git a/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/AbstractJaxbMarshaller.java b/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/AbstractJaxbMarshaller.java
deleted file mode 100644
index 5b3f18f229..0000000000
--- a/org.springframework.oxm/src/main/java/org/springframework/oxm/jaxb/AbstractJaxbMarshaller.java
+++ /dev/null
@@ -1,204 +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.jaxb;
-
-import java.util.Iterator;
-import java.util.Map;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.bind.ValidationEventHandler;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.oxm.XmlMappingException;
-import org.springframework.util.Assert;
-import org.springframework.util.StringUtils;
-
-/**
- * Abstract base class for implementations of the Marshaller
and Unmarshaller
interfaces that
- * use JAXB. This base class is responsible for creating JAXB marshallers from a JAXBContext
.
Jaxb1Marshaller
- * and Jaxb2Marshaller
respectivaly).
- *
- * @author Arjen Poutsma
- * @see Jaxb2Marshaller
- * @since 3.0
- */
-public abstract class AbstractJaxbMarshaller
- implements org.springframework.oxm.Marshaller, org.springframework.oxm.Unmarshaller, InitializingBean {
-
- /** Logger available to subclasses. */
- protected final Log logger = LogFactory.getLog(getClass());
-
- private String contextPath;
-
- private Map marshallerProperties;
-
- private Map unmarshallerProperties;
-
- private JAXBContext jaxbContext;
-
- private ValidationEventHandler validationEventHandler;
-
- /** Returns the JAXB Context path. */
- protected String getContextPath() {
- return contextPath;
- }
-
- /** Sets the JAXB Context path. */
- public void setContextPath(String contextPath) {
- Assert.notNull(contextPath, "'contextPath' must not be null");
- this.contextPath = contextPath;
- }
-
- /**
- * Sets 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");
- this.contextPath = StringUtils.arrayToDelimitedString(contextPaths, ":");
- }
-
- /**
- * 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 javax.xml.bind.Marshaller#setProperty(String,Object)
- * @see javax.xml.bind.Marshaller#JAXB_ENCODING
- * @see javax.xml.bind.Marshaller#JAXB_FORMATTED_OUTPUT
- * @see javax.xml.bind.Marshaller#JAXB_NO_NAMESPACE_SCHEMA_LOCATION
- * @see javax.xml.bind.Marshaller#JAXB_SCHEMA_LOCATION
- */
- public void setMarshallerProperties(Map properties) {
- this.marshallerProperties = properties;
- }
-
- /**
- * Sets 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 setUnmarshallerProperties(Map properties) {
- this.unmarshallerProperties = properties;
- }
-
- /**
- * Sets 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 API's.
- *
- * @param validationEventHandler the event handler
- */
- public void setValidationEventHandler(ValidationEventHandler validationEventHandler) {
- this.validationEventHandler = validationEventHandler;
- }
-
- /** Returns the {@link JAXBContext} created in {@link #afterPropertiesSet()}. */
- public JAXBContext getJaxbContext() {
- return jaxbContext;
- }
-
- public final void afterPropertiesSet() throws Exception {
- try {
- jaxbContext = createJaxbContext();
- }
- catch (JAXBException ex) {
- throw convertJaxbException(ex);
- }
- }
-
- /**
- * Convert the given JAXBException
to an appropriate exception from the
- * org.springframework.oxm
hierarchy. The default implementation delegates to JaxbUtils
.
- * Can be overridden in subclasses.
- *
- * @param ex JAXBException
that occured
- * @return the corresponding XmlMappingException
instance
- * @see JaxbUtils#convertJaxbException
- */
- protected XmlMappingException convertJaxbException(JAXBException ex) {
- return JaxbUtils.convertJaxbException(ex);
- }
-
- /** Returns a newly created JAXB marshaller. JAXB marshallers are not necessarily thread safe. */
- protected Marshaller createMarshaller() {
- try {
- Marshaller marshaller = jaxbContext.createMarshaller();
- if (marshallerProperties != null) {
- for (Iterator iterator = marshallerProperties.keySet().iterator(); iterator.hasNext();) {
- String name = (String) iterator.next();
- marshaller.setProperty(name, marshallerProperties.get(name));
- }
- }
- if (validationEventHandler != null) {
- marshaller.setEventHandler(validationEventHandler);
- }
- initJaxbMarshaller(marshaller);
- return marshaller;
- }
- catch (JAXBException ex) {
- throw convertJaxbException(ex);
- }
- }
-
- /** Returns a newly created JAXB unmarshaller. JAXB unmarshallers are not necessarily thread safe. */
- protected Unmarshaller createUnmarshaller() {
- try {
- Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
- if (unmarshallerProperties != null) {
- for (Iterator iterator = unmarshallerProperties.keySet().iterator(); iterator.hasNext();) {
- String name = (String) iterator.next();
- unmarshaller.setProperty(name, unmarshallerProperties.get(name));
- }
- }
- if (validationEventHandler != null) {
- unmarshaller.setEventHandler(validationEventHandler);
- }
- 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 Marshaller
, and after the respective properties have been set. Default
- * implementation does nothing.
- */
- protected void initJaxbMarshaller(Marshaller marshaller) throws JAXBException {
- }
-
- /**
- * Template method that can overridden by concrete JAXB marshallers for custom initialization behavior. Gets called
- * after creation of JAXB Unmarshaller
, and after the respective properties have been set. Default
- * implementation does nothing.
- */
- protected void initJaxbUnmarshaller(Unmarshaller unmarshaller) throws JAXBException {
- }
-
- /** Template method that returns a newly created JAXB context. Called from afterPropertiesSet()
. */
- protected abstract JAXBContext createJaxbContext() throws Exception;
-}
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 6b7565b48f..73a4e1093b 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
@@ -16,24 +16,16 @@
package org.springframework.oxm.jaxb;
-import java.awt.*;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.math.BigDecimal;
-import java.math.BigInteger;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Date;
import java.util.Map;
import java.util.UUID;
import javax.activation.DataHandler;
@@ -44,14 +36,11 @@ import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.ValidationEventHandler;
import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.attachment.AttachmentMarshaller;
import javax.xml.bind.attachment.AttachmentUnmarshaller;
-import javax.xml.datatype.Duration;
-import javax.xml.datatype.XMLGregorianCalendar;
-import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLStreamReader;
@@ -62,15 +51,16 @@ import javax.xml.transform.sax.SAXSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
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.GenericMarshaller;
-import org.springframework.oxm.GenericUnmarshaller;
import org.springframework.oxm.XmlMappingException;
import org.springframework.oxm.mime.MimeContainer;
import org.springframework.oxm.mime.MimeMarshaller;
@@ -84,25 +74,43 @@ import org.springframework.util.xml.SaxUtils;
import org.springframework.util.xml.StaxUtils;
/**
- * Implementation of the Marshaller
interface for JAXB 2.0. The typical usage will be to set either
- * the contextPath
or the classesToBeBound
property on this bean, possibly customize the
- * marshaller and unmarshaller by setting properties, schemas, adapters, and listeners, and to refer to it.
+ * Implementation of the Marshaller
interface for JAXB 2.0.
+ *
+ * The typical usage will be to set either the 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);
}
@@ -366,25 +419,6 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller
}
}
- @Override
- protected void initJaxbUnmarshaller(Unmarshaller unmarshaller) throws JAXBException {
- if (schema != null) {
- unmarshaller.setSchema(schema);
- }
- if (unmarshallerListener != null) {
- unmarshaller.setListener(unmarshallerListener);
- }
- if (adapters != null) {
- for (XmlAdapter adapter : adapters) {
- unmarshaller.setAdapter(adapter);
- }
- }
- }
-
- /*
- * Marshalling
- */
-
public void marshal(Object graph, Result result) throws XmlMappingException {
marshal(graph, result, null);
}
@@ -424,8 +458,53 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller
}
/*
- * Unmarshalling
- */
+ * Unmarshalling
+ */
+
+ /**
+ * Returns a newly created JAXB unmarshaller. JAXB unmarshallers are not necessarily thread safe.
+ */
+ private Unmarshaller createUnmarshaller() {
+ try {
+ Unmarshaller unmarshaller = 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 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 (unmarshallerProperties != null) {
+ for (String name : unmarshallerProperties.keySet()) {
+ unmarshaller.setProperty(name, unmarshallerProperties.get(name));
+ }
+ }
+ if (validationEventHandler != null) {
+ unmarshaller.setEventHandler(validationEventHandler);
+ }
+ if (schema != null) {
+ unmarshaller.setSchema(schema);
+ }
+ if (unmarshallerListener != null) {
+ unmarshaller.setListener(unmarshallerListener);
+ }
+ if (adapters != null) {
+ for (XmlAdapter adapter : adapters) {
+ unmarshaller.setAdapter(adapter);
+ }
+ }
+ }
public Object unmarshal(Source source) throws XmlMappingException {
return unmarshal(source, null);
@@ -465,9 +544,22 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller
}
}
+ /**
+ * Convert the given contextPath
or the classesToBeBound
property
+ * on this bean, possibly customize the marshaller and unmarshaller by setting properties, schemas, adapters, and
+ * listeners, and to refer to it.
*
* @author Arjen Poutsma
* @see #setContextPath(String)
* @see #setClassesToBeBound(Class[])
- * @see #setJaxbContextProperties(java.util.Map)
- * @see #setMarshallerProperties(java.util.Map)
- * @see #setUnmarshallerProperties(java.util.Map)
- * @see #setSchema(org.springframework.core.io.Resource)
- * @see #setSchemas(org.springframework.core.io.Resource[])
- * @see #setMarshallerListener(javax.xml.bind.Marshaller.Listener)
+ * @see #setJaxbContextProperties(Map)
+ * @see #setMarshallerProperties(Map)
+ * @see #setUnmarshallerProperties(Map)
+ * @see #setSchema(Resource)
+ * @see #setSchemas(Resource[])
+ * @see #setMarshallerListener(Marshaller.Listener)
* @see #setUnmarshallerListener(javax.xml.bind.Unmarshaller.Listener)
- * @see #setAdapters(javax.xml.bind.annotation.adapters.XmlAdapter[])
+ * @see #setAdapters(XmlAdapter[])
* @since 3.0
*/
-public class Jaxb2Marshaller extends AbstractJaxbMarshaller
- implements MimeMarshaller, MimeUnmarshaller, GenericMarshaller, GenericUnmarshaller, BeanClassLoaderAware {
+public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, BeanClassLoaderAware, InitializingBean {
+
+ private static final String CID = "cid:";
+
+ /**
+ * Logger available to subclasses.
+ */
+ private static final Log logger = LogFactory.getLog(Jaxb2Marshaller.class);
+
+ private String contextPath;
+
+ private MapcontextPath
is required.
@@ -154,7 +179,9 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller
this.jaxbContextProperties = jaxbContextProperties;
}
- /** Sets the Marshaller.Listener
to be registered with the JAXB Marshaller
. */
+ /**
+ * Sets the Marshaller.Listener
to be registered with the JAXB Marshaller
.
+ */
public void setMarshallerListener(Marshaller.Listener marshallerListener) {
this.marshallerListener = marshallerListener;
}
@@ -177,110 +204,80 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller
this.schemaLanguage = schemaLanguage;
}
- /** Sets the schema resource to use for validation. */
+ /**
+ * Sets the schema resource to use for validation.
+ */
public void setSchema(Resource schemaResource) {
schemaResources = new Resource[]{schemaResource};
}
- /** Sets the schema resources to use for validation. */
+ /**
+ * Sets the schema resources to use for validation.
+ */
public void setSchemas(Resource[] schemaResources) {
this.schemaResources = schemaResources;
}
- /** Sets the Unmarshaller.Listener
to be registered with the JAXB Unmarshaller
. */
+ /**
+ * Sets the Unmarshaller.Listener
to be registered with the JAXB Unmarshaller
.
+ */
public void setUnmarshallerListener(Unmarshaller.Listener unmarshallerListener) {
this.unmarshallerListener = unmarshallerListener;
}
- public boolean supports(Type type) {
- if (type instanceof Class) {
- return supportsInternal((Class) type, true);
- }
- else if (type instanceof ParameterizedType) {
- ParameterizedType parameterizedType = (ParameterizedType) type;
- if (JAXBElement.class.equals(parameterizedType.getRawType())) {
- Assert.isTrue(parameterizedType.getActualTypeArguments().length == 1,
- "Invalid amount of parameterized types in JAXBElement");
- Type typeArgument = parameterizedType.getActualTypeArguments()[0];
- if (typeArgument instanceof Class) {
- Class clazz = (Class) typeArgument;
- if (!isPrimitiveType(clazz) && !isStandardType(clazz) && !supportsInternal(clazz, false)) {
- return false;
- }
- }
- else if (typeArgument instanceof GenericArrayType) {
- GenericArrayType genericArrayType = (GenericArrayType) typeArgument;
- return genericArrayType.getGenericComponentType().equals(Byte.TYPE);
- }
- else if (!supports(typeArgument)) {
- return false;
- }
- return true;
- }
- }
- return false;
+ /**
+ * 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
+ */
+ 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)
+ */
+ public void setUnmarshallerProperties(MapMarshaller
, 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.
+ *
+ * @param ex JAXBException
that occured
+ * @return the corresponding XmlMappingException
instance
+ * @see org.springframework.oxm.jaxb.JaxbUtils#convertJaxbException
+ */
+ protected XmlMappingException convertJaxbException(JAXBException ex) {
+ return JaxbUtils.convertJaxbException(ex);
+ }
+
/*
- * Inner classes
- */
+ * Inner classes
+ */
private static class Jaxb2AttachmentMarshaller extends AttachmentMarshaller {
@@ -499,7 +591,7 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller
catch (UnsupportedEncodingException e) {
// ignore
}
- return "cid:" + contentId;
+ return CID + contentId;
}
private String getHost(String elementNamespace, DataHandler dataHandler) {
@@ -547,8 +639,8 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller
@Override
public DataHandler getAttachmentAsDataHandler(String contentId) {
- if (contentId.startsWith("cid:")) {
- contentId = contentId.substring("cid:".length());
+ if (contentId.startsWith(CID)) {
+ contentId = contentId.substring(CID.length());
try {
contentId = URLDecoder.decode(contentId, "UTF-8");
}
@@ -566,9 +658,9 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller
}
}
- /*
- * DataSource that wraps around a byte array
- */
+ /**
+ * DataSource that wraps around a byte array.
+ */
private static class ByteArrayDataSource implements DataSource {
private byte[] data;
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
index 9946a73d45..902be90db0 100644
--- 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
@@ -21,7 +21,6 @@ import javax.xml.bind.UnmarshalException;
import javax.xml.bind.ValidationException;
import org.springframework.oxm.XmlMappingException;
-import org.springframework.util.ClassUtils;
/**
* Generic utility methods for working with JAXB. Mainly for internal use within the framework.
@@ -31,35 +30,6 @@ import org.springframework.util.ClassUtils;
*/
public abstract class JaxbUtils {
- public static final int JAXB_1 = 0;
-
- public static final int JAXB_2 = 1;
-
- private static final String JAXB_2_CLASS_NAME = "javax.xml.bind.Binder";
-
- private static int jaxbVersion = JAXB_1;
-
- static {
- try {
- ClassUtils.forName(JAXB_2_CLASS_NAME);
- jaxbVersion = JAXB_2;
- }
- catch (ClassNotFoundException ex1) {
- // leave JAXB 1 as default
- }
- }
-
- /**
- * Gets the major JAXB version. This means we can do things like if (getJaxbVersion() <= JAXB_2)
.
- *
- * @return a code comparable to the JAXP_XX codes in this class
- * @see #JAXB_1
- * @see #JAXB_2
- */
- public static int getJaxbVersion() {
- return jaxbVersion;
- }
-
/**
* Converts the given JAXBException
to an appropriate exception from the
* org.springframework.oxm
hierarchy.
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 f15bea3478..1cfcffb0ae 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
@@ -88,27 +88,37 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
private Boolean standalone;
- /** Sets the optional binding name for this instance. */
+ /**
+ * Sets the optional binding name for this instance.
+ */
public void setBindingName(String bindingName) {
this.bindingName = bindingName;
}
- /** Sets the target class for this instance. This property is required. */
+ /**
+ * Sets the target class for this instance. This property is required.
+ */
public void setTargetClass(Class targetClass) {
this.targetClass = targetClass;
}
- /** Sets the number of nesting indent spaces. Default is -1
, i.e. no indentation. */
+ /**
+ * Sets 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. */
+ /**
+ * Sets 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. */
+ /**
+ * Sets the document standalone flag for marshalling. By default, this flag is not present.
+ */
public void setStandalone(Boolean standalone) {
this.standalone = standalone;
}
@@ -136,7 +146,7 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe
}
}
- public boolean supports(Class clazz) {
+ public boolean supports(Class> clazz) {
Assert.notNull(clazz, "'clazz' must not be null");
String[] mappedClasses = bindingFactory.getMappedClasses();
String className = clazz.getName();
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 cf25a21569..05a7aecb26 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
@@ -55,7 +55,9 @@ public class XmlBeansMarshaller extends AbstractMarshaller {
private boolean validating = false;
- /** Returns the XmlOptions
. */
+ /**
+ * Returns the XmlOptions
.
+ */
public XmlOptions getXmlOptions() {
return xmlOptions;
}
@@ -69,18 +71,24 @@ public class XmlBeansMarshaller extends AbstractMarshaller {
this.xmlOptions = xmlOptions;
}
- /** Returns whether this marshaller should validate in- and outgoing documents. */
+ /**
+ * Returns whether this marshaller should validate in- and outgoing documents.
+ */
public boolean isValidating() {
return validating;
}
- /** Sets whether this marshaller should validate in- and outgoing documents. Default is false
. */
+ /**
+ * Sets 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}. */
- public boolean supports(Class clazz) {
+ /**
+ * Returns true if the given class is an implementation of {@link XmlObject}.
+ */
+ public boolean supports(Class> clazz) {
return XmlObject.class.isAssignableFrom(clazz);
}
diff --git a/org.springframework.oxm/src/test/java/org/springframework/oxm/jaxb/AbstractJaxbMarshallerTestCase.java b/org.springframework.oxm/src/test/java/org/springframework/oxm/jaxb/AbstractJaxbMarshallerTestCase.java
deleted file mode 100644
index 3e7895463f..0000000000
--- a/org.springframework.oxm/src/test/java/org/springframework/oxm/jaxb/AbstractJaxbMarshallerTestCase.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.jaxb;
-
-import javax.xml.transform.sax.SAXResult;
-
-import org.easymock.MockControl;
-import org.xml.sax.ContentHandler;
-
-import org.springframework.oxm.AbstractMarshallerTestCase;
-
-public abstract class AbstractJaxbMarshallerTestCase extends AbstractMarshallerTestCase {
-
- public void testMarshalSaxResult() throws Exception {
- MockControl handlerControl = MockControl.createStrictControl(ContentHandler.class);
- ContentHandler handlerMock = (ContentHandler) handlerControl.getMock();
- handlerMock.setDocumentLocator(null);
- handlerControl.setMatcher(MockControl.ALWAYS_MATCHER);
- handlerMock.startDocument();
- handlerMock.startPrefixMapping("", "http://samples.springframework.org/flight");
- handlerMock.startElement("http://samples.springframework.org/flight", "flights", "flights", null);
- handlerControl.setMatcher(MockControl.ALWAYS_MATCHER);
- handlerMock.startElement("http://samples.springframework.org/flight", "flight", "flight", null);
- handlerControl.setMatcher(MockControl.ALWAYS_MATCHER);
- handlerMock.startElement("http://samples.springframework.org/flight", "number", "number", null);
- handlerControl.setMatcher(MockControl.ALWAYS_MATCHER);
- handlerMock.characters(new char[]{'4', '2'}, 0, 2);
- handlerControl.setMatcher(MockControl.ALWAYS_MATCHER);
- handlerMock.endElement("http://samples.springframework.org/flight", "number", "number");
- handlerMock.endElement("http://samples.springframework.org/flight", "flight", "flight");
- handlerMock.endElement("http://samples.springframework.org/flight", "flights", "flights");
- handlerMock.endPrefixMapping("");
- handlerMock.endDocument();
-
- handlerControl.replay();
- SAXResult result = new SAXResult(handlerMock);
- marshaller.marshal(flights, result);
- handlerControl.verify();
- }
-
-
-}
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/Jaxb2MarshallerTest.java
index cccf427f3c..6b3624426b 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/Jaxb2MarshallerTest.java
@@ -16,153 +16,78 @@
package org.springframework.oxm.jaxb;
-import java.awt.*;
-import java.io.ByteArrayOutputStream;
import java.io.StringWriter;
import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.net.URI;
-import java.util.Calendar;
import java.util.Collections;
-import java.util.Date;
-import java.util.UUID;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
-import javax.xml.bind.JAXBElement;
-import javax.xml.datatype.Duration;
-import javax.xml.datatype.XMLGregorianCalendar;
-import javax.xml.namespace.QName;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.stream.XMLEventWriter;
-import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.sax.SAXResult;
-import javax.xml.transform.stax.StAXResult;
import javax.xml.transform.stream.StreamResult;
-import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
import static org.easymock.EasyMock.*;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-import org.junit.Before;
import org.junit.Test;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Text;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
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.Marshaller;
import org.springframework.oxm.XmlMappingException;
import org.springframework.oxm.mime.MimeContainer;
import org.springframework.util.FileCopyUtils;
-import org.springframework.util.xml.StaxUtils;
-public class Jaxb2MarshallerTest {
+public class Jaxb2MarshallerTest extends AbstractMarshallerTestCase {
private static final String CONTEXT_PATH = "org.springframework.oxm.jaxb";
- private static final String EXPECTED_STRING =
- "