diff --git a/oxm-tiger/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java b/oxm-tiger/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java index fbc7d999..8da126f9 100644 --- a/oxm-tiger/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java +++ b/oxm-tiger/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java @@ -250,8 +250,8 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller } String packageName = className.substring(0, lastDotIndex); String[] contextPaths = StringUtils.tokenizeToStringArray(getContextPath(), ":"); - for (int i = 0; i < contextPaths.length; i++) { - if (contextPaths[i].equals(packageName)) { + for (String contextPath : contextPaths) { + if (contextPath.equals(packageName)) { return true; } } @@ -267,8 +267,9 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller * JAXBContext */ + @Override protected JAXBContext createJaxbContext() throws Exception { - if (JaxbUtils.getJaxbVersion() < JaxbUtils.JAXB_2) { + if (JaxbUtils.getJaxbVersion(classLoader) < JaxbUtils.JAXB_2) { throw new IllegalStateException( "Cannot use Jaxb2Marshaller in combination with JAXB 1.0. Use Jaxb1Marshaller instead."); } @@ -330,6 +331,7 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller * Marshaller/Unmarshaller */ + @Override protected void initJaxbMarshaller(Marshaller marshaller) throws JAXBException { if (schema != null) { marshaller.setSchema(schema); @@ -338,12 +340,13 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller marshaller.setListener(marshallerListener); } if (adapters != null) { - for (int i = 0; i < adapters.length; i++) { - marshaller.setAdapter(adapters[i]); + for (XmlAdapter adapter : adapters) { + marshaller.setAdapter(adapter); } } } + @Override protected void initJaxbUnmarshaller(Unmarshaller unmarshaller) throws JAXBException { if (schema != null) { unmarshaller.setSchema(schema); @@ -352,8 +355,8 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller unmarshaller.setListener(unmarshallerListener); } if (adapters != null) { - for (int i = 0; i < adapters.length; i++) { - unmarshaller.setAdapter(adapters[i]); + for (XmlAdapter adapter : adapters) { + unmarshaller.setAdapter(adapter); } } } @@ -450,10 +453,11 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller private final MimeContainer mimeContainer; - public Jaxb2AttachmentMarshaller(MimeContainer mimeContainer) { + private Jaxb2AttachmentMarshaller(MimeContainer mimeContainer) { this.mimeContainer = mimeContainer; } + @Override public String addMtomAttachment(byte[] data, int offset, int length, @@ -464,6 +468,7 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller return addMtomAttachment(new DataHandler(dataSource), elementNamespace, elementLocalName); } + @Override public String addMtomAttachment(DataHandler dataHandler, String elementNamespace, String elementLocalName) { String host = getHost(elementNamespace, dataHandler); String contentId = UUID.randomUUID() + "@" + host; @@ -488,6 +493,7 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller return dataHandler.getName(); } + @Override public String addSwaRefAttachment(DataHandler dataHandler) { String contentId = UUID.randomUUID() + "@" + dataHandler.getName(); mimeContainer.addAttachment(contentId, dataHandler); @@ -504,10 +510,11 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller private final MimeContainer mimeContainer; - public Jaxb2AttachmentUnmarshaller(MimeContainer mimeContainer) { + private Jaxb2AttachmentUnmarshaller(MimeContainer mimeContainer) { this.mimeContainer = mimeContainer; } + @Override public byte[] getAttachmentAsByteArray(String cid) { try { DataHandler dataHandler = getAttachmentAsDataHandler(cid); @@ -518,6 +525,7 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller } } + @Override public DataHandler getAttachmentAsDataHandler(String contentId) { if (contentId.startsWith("cid:")) { contentId = contentId.substring("cid:".length()); @@ -551,7 +559,7 @@ public class Jaxb2Marshaller extends AbstractJaxbMarshaller private int length; - public ByteArrayDataSource(String contentType, byte[] data, int offset, int length) { + private ByteArrayDataSource(String contentType, byte[] data, int offset, int length) { this.contentType = contentType; this.data = data; this.offset = offset; diff --git a/oxm/src/main/java/org/springframework/oxm/jaxb/JaxbUtils.java b/oxm/src/main/java/org/springframework/oxm/jaxb/JaxbUtils.java index 1a6ba154..ba584dd1 100644 --- a/oxm/src/main/java/org/springframework/oxm/jaxb/JaxbUtils.java +++ b/oxm/src/main/java/org/springframework/oxm/jaxb/JaxbUtils.java @@ -44,7 +44,7 @@ public abstract class JaxbUtils { ClassUtils.forName(JAXB_2_CLASS_NAME); jaxbVersion = JAXB_2; } - catch (ClassNotFoundException ex1) { + catch (ClassNotFoundException ex) { // leave JAXB 1 as default } } @@ -60,6 +60,23 @@ public abstract class JaxbUtils { return jaxbVersion; } + /** + * 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(ClassLoader classLoader) { + try { + ClassUtils.forName(JAXB_2_CLASS_NAME, classLoader); + return JAXB_2; + } + catch (ClassNotFoundException ex) { + return JAXB_1; + } + } + /** * Converts the given JAXBException to an appropriate exception from the * org.springframework.oxm hierarchy.