Author: dkuleshov
Date: 2010-12-07 08:51:45 -0500 (Tue, 07 Dec 2010)
New Revision: 3610
Added:
ws/trunk/exo.ws.rest.ext/src/test/java/org/exoplatform/services/rest/ext/filter/HierarchicalPropertyEntityProviderTest.java
Modified:
ws/trunk/exo.ws.rest.ext/src/main/java/org/exoplatform/services/rest/ext/provider/HierarchicalPropertyEntityProvider.java
Log:
EXOJCR-1095: from now filteredReader is used instead of reader while parsing request XML
body
Modified:
ws/trunk/exo.ws.rest.ext/src/main/java/org/exoplatform/services/rest/ext/provider/HierarchicalPropertyEntityProvider.java
===================================================================
---
ws/trunk/exo.ws.rest.ext/src/main/java/org/exoplatform/services/rest/ext/provider/HierarchicalPropertyEntityProvider.java 2010-12-07
13:33:22 UTC (rev 3609)
+++
ws/trunk/exo.ws.rest.ext/src/main/java/org/exoplatform/services/rest/ext/provider/HierarchicalPropertyEntityProvider.java 2010-12-07
13:51:45 UTC (rev 3610)
@@ -29,16 +29,18 @@
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
-import java.util.Stack;
+import java.util.LinkedList;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.xml.namespace.QName;
+import javax.xml.stream.EventFilter;
import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.Characters;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import javax.xml.transform.TransformerException;
@@ -77,33 +79,41 @@
WebApplicationException
{
HierarchicalProperty rootProperty = null;
- Stack<HierarchicalProperty> curProperty = new
Stack<HierarchicalProperty>();
+ LinkedList<HierarchicalProperty> curProperty = new
LinkedList<HierarchicalProperty>();
try
{
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader reader = factory.createXMLEventReader(entityStream);
- while (reader.hasNext())
+ XMLEventReader fReader = factory.createFilteredReader(reader, new EventFilter()
{
- XMLEvent event = reader.nextEvent();
+
+ public boolean accept(XMLEvent event)
+ {
+ return !(event.isCharacters() &&
((Characters)event).isWhiteSpace());
+ }
+ });
+ while (fReader.hasNext())
+ {
+ XMLEvent event = fReader.nextEvent();
switch (event.getEventType())
{
case XMLEvent.START_ELEMENT :
StartElement element = event.asStartElement();
QName name = element.getName();
HierarchicalProperty prop = new HierarchicalProperty(name);
- if (!curProperty.empty())
- curProperty.peek().addChild(prop);
+ if (!curProperty.isEmpty())
+ curProperty.getLast().addChild(prop);
else
rootProperty = prop;
- curProperty.push(prop);
+ curProperty.addLast(prop);
break;
case XMLEvent.END_ELEMENT :
- curProperty.pop();
+ curProperty.removeLast();
break;
case XMLEvent.CHARACTERS :
String chars = event.asCharacters().getData();
- curProperty.peek().setValue(chars);
+ curProperty.getLast().setValue(chars);
break;
default :
break;
@@ -119,9 +129,23 @@
catch (XMLStreamException e)
{
if (LOG.isDebugEnabled())
- e.printStackTrace();
+ LOG.debug("An XMLStreamException occurs", e);
return null;
}
+ catch (RuntimeException re)
+ {
+ String reName = re.getClass().getName();
+ if (reName.equals("com.ctc.wstx.exc.WstxLazyException"))
+ {
+ if (LOG.isDebugEnabled())
+ LOG.error(re.getMessage(), re);
+ return null;
+ }
+ else
+ {
+ throw re;
+ }
+ }
}
/**
Added:
ws/trunk/exo.ws.rest.ext/src/test/java/org/exoplatform/services/rest/ext/filter/HierarchicalPropertyEntityProviderTest.java
===================================================================
---
ws/trunk/exo.ws.rest.ext/src/test/java/org/exoplatform/services/rest/ext/filter/HierarchicalPropertyEntityProviderTest.java
(rev 0)
+++
ws/trunk/exo.ws.rest.ext/src/test/java/org/exoplatform/services/rest/ext/filter/HierarchicalPropertyEntityProviderTest.java 2010-12-07
13:51:45 UTC (rev 3610)
@@ -0,0 +1,21 @@
+package org.exoplatform.services.rest.ext.filter;
+
+import junit.framework.TestCase;
+
+import org.exoplatform.common.util.HierarchicalProperty;
+import org.exoplatform.services.rest.ext.provider.HierarchicalPropertyEntityProvider;
+
+import java.io.ByteArrayInputStream;
+
+public class HierarchicalPropertyEntityProviderTest extends TestCase
+{
+ public void testRequestBodyXMLParsing() throws Exception
+ {
+ String s = "\n<root>\n <l1>\n\t<l2>hel\nlo</l2>\n
</l1> \n</root>\n";
+ System.out.println(s);
+ HierarchicalProperty hp =
+ new HierarchicalPropertyEntityProvider().readFrom(HierarchicalProperty.class,
null, null, null, null,
+ new ByteArrayInputStream(s.getBytes()));
+ assertTrue(hp.getChild(0).getChild(0).getValue().equals("hel\nlo"));
+ }
+}
\ No newline at end of file
Property changes on:
ws/trunk/exo.ws.rest.ext/src/test/java/org/exoplatform/services/rest/ext/filter/HierarchicalPropertyEntityProviderTest.java
___________________________________________________________________
Name: svn:eol-style
+ native
Show replies by date