[CXF-6217] Make sure we use XMLStreamReader for unmarshalling
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/5f5be21a Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/5f5be21a Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/5f5be21a Branch: refs/heads/2.7.x-fixes Commit: 5f5be21a69c01848d9772ea6a477ee3e6079fe39 Parents: 3589f95 Author: Daniel Kulp <dk...@apache.org> Authored: Fri Jan 23 12:46:31 2015 -0500 Committer: Daniel Kulp <dk...@apache.org> Committed: Fri Jan 23 12:55:22 2015 -0500 ---------------------------------------------------------------------- .../cxf/jaxrs/provider/atom/AtomPojoProvider.java | 14 +++++++++++++- .../java/org/apache/cxf/wsn/jms/JmsPullPoint.java | 6 +++++- .../java/org/apache/cxf/wsn/jms/JmsSubscription.java | 6 +++++- 3 files changed, 23 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/5f5be21a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProvider.java ---------------------------------------------------------------------- diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProvider.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProvider.java index 4e670f6..c1c7237 100644 --- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProvider.java +++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProvider.java @@ -47,6 +47,8 @@ import javax.ws.rs.ext.MessageBodyWriter; import javax.ws.rs.ext.Provider; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; import org.apache.abdera.Abdera; import org.apache.abdera.factory.Factory; @@ -63,6 +65,7 @@ import org.apache.cxf.jaxrs.provider.JAXBElementProvider; import org.apache.cxf.jaxrs.utils.ExceptionUtils; import org.apache.cxf.jaxrs.utils.InjectionUtils; import org.apache.cxf.jaxrs.utils.JAXRSUtils; +import org.apache.cxf.staxutils.StaxUtils; @Produces({"application/atom+xml", "application/atom+xml;type=feed", "application/atom+xml;type=entry" }) @Consumes({"application/atom+xml", "application/atom+xml;type=feed", "application/atom+xml;type=entry" }) @@ -658,12 +661,21 @@ public class AtomPojoProvider extends AbstractConfigurableProvider } String entryContent = entry.getContent(); if (entryContent != null) { + XMLStreamReader xreader = StaxUtils.createXMLStreamReader(new StringReader(entryContent)); try { Unmarshaller um = jaxbProvider.getJAXBContext(cls, cls).createUnmarshaller(); - return cls.cast(um.unmarshal(new StringReader(entryContent))); + return cls.cast(um.unmarshal(xreader)); } catch (Exception ex) { reportError("Object of type " + cls.getName() + " can not be deserialized from Entry", ex, 400); + } finally { + try { + if (xreader != null) { + StaxUtils.close(xreader); + } + } catch (XMLStreamException e) { + //ignore + } } } return null; http://git-wip-us.apache.org/repos/asf/cxf/blob/5f5be21a/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsPullPoint.java ---------------------------------------------------------------------- diff --git a/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsPullPoint.java b/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsPullPoint.java index 4dc25c7..1ac5c00 100644 --- a/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsPullPoint.java +++ b/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsPullPoint.java @@ -35,8 +35,10 @@ import javax.jms.Session; import javax.jms.TextMessage; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; +import javax.xml.stream.XMLStreamReader; import org.apache.cxf.common.logging.LogUtils; +import org.apache.cxf.staxutils.StaxUtils; import org.apache.cxf.wsn.AbstractPullPoint; import org.oasis_open.docs.wsn.b_2.NotificationMessageHolderType; import org.oasis_open.docs.wsn.b_2.Notify; @@ -120,7 +122,9 @@ public class JmsPullPoint extends AbstractPullPoint { } TextMessage txtMsg = (TextMessage) msg; StringReader reader = new StringReader(txtMsg.getText()); - Notify notify = (Notify) jaxbContext.createUnmarshaller().unmarshal(reader); + XMLStreamReader xreader = StaxUtils.createXMLStreamReader(reader); + Notify notify = (Notify) jaxbContext.createUnmarshaller().unmarshal(xreader); + reader.close(); messages.addAll(notify.getNotificationMessage()); } return messages; http://git-wip-us.apache.org/repos/asf/cxf/blob/5f5be21a/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsSubscription.java ---------------------------------------------------------------------- diff --git a/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsSubscription.java b/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsSubscription.java index f8b542f..a7e539e 100644 --- a/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsSubscription.java +++ b/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsSubscription.java @@ -35,6 +35,7 @@ import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.datatype.XMLGregorianCalendar; import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.stream.XMLStreamReader; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; @@ -45,6 +46,7 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import org.apache.cxf.common.logging.LogUtils; +import org.apache.cxf.staxutils.StaxUtils; import org.apache.cxf.wsn.AbstractSubscription; import org.oasis_open.docs.wsn.b_2.InvalidTopicExpressionFaultType; import org.oasis_open.docs.wsn.b_2.NotificationMessageHolderType; @@ -189,8 +191,10 @@ public abstract class JmsSubscription extends AbstractSubscription implements Me public void onMessage(Message jmsMessage) { try { TextMessage text = (TextMessage) jmsMessage; + XMLStreamReader reader = StaxUtils.createXMLStreamReader(new StringReader(text.getText())); Notify notify = (Notify) jaxbContext.createUnmarshaller() - .unmarshal(new StringReader(text.getText())); + .unmarshal(reader); + reader.close(); for (Iterator<NotificationMessageHolderType> ith = notify.getNotificationMessage().iterator(); ith.hasNext();) { NotificationMessageHolderType h = ith.next();