=== modified file 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/xml/XMLPreConverter.java' --- dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/xml/XMLPreConverter.java 2010-07-14 14:36:43 +0000 +++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/xml/XMLPreConverter.java 2010-07-16 13:08:20 +0000 @@ -41,12 +41,12 @@ import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; +import org.amplecode.staxwax.factory.XMLFactory; +import org.amplecode.staxwax.reader.XMLReader; import org.amplecode.staxwax.transformer.TransformerTask; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.codehaus.stax2.XMLInputFactory2; -import org.codehaus.stax2.XMLStreamReader2; import org.hisp.dhis.importexport.ImportException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -96,12 +96,10 @@ // buffer enough space to read root elemen xmlDataStream.mark( BUFFER_SIZE ); - XMLInputFactory2 factory = (XMLInputFactory2) XMLInputFactory.newInstance(); - XMLStreamReader2 streamReader = (XMLStreamReader2) factory.createXMLStreamReader( xmlDataStream ); + XMLReader reader = XMLFactory.getXMLReader( xmlDataStream ); - // move to document root - streamReader.nextTag(); - rootName = streamReader.getName(); + reader.moveToStartElement(); + rootName = reader.getElementQName(); xmlDataStream.reset(); } catch (Exception ex) { === modified file 'dhis-2/dhis-services/dhis-service-xml/pom.xml' --- dhis-2/dhis-services/dhis-service-xml/pom.xml 2010-04-21 19:45:12 +0000 +++ dhis-2/dhis-services/dhis-service-xml/pom.xml 2010-07-16 13:04:51 +0000 @@ -25,13 +25,6 @@ org.codehaus.woodstox stax2-api - org.codehaus.woodstox woodstox-core-asl @@ -41,11 +34,6 @@ junit test - - javax.xml.stream - stax-api - test - === modified file 'dhis-2/dhis-services/dhis-service-xml/src/main/java/org/amplecode/staxwax/reader/DefaultXMLEventReader.java' --- dhis-2/dhis-services/dhis-service-xml/src/main/java/org/amplecode/staxwax/reader/DefaultXMLEventReader.java 2010-06-24 14:38:23 +0000 +++ dhis-2/dhis-services/dhis-service-xml/src/main/java/org/amplecode/staxwax/reader/DefaultXMLEventReader.java 2010-07-16 13:04:51 +0000 @@ -103,8 +103,7 @@ { if ( reader.peek().isCharacters() ) { - currentEvent = reader.nextEvent(); - return currentEvent.asCharacters().getData(); + return this.getText(); } else { @@ -139,6 +138,26 @@ } @Override + public void moveToStartElement( ) + { + try + { + while ( reader.hasNext() ) + { + currentEvent = reader.nextEvent(); + if ( currentEvent.isStartElement()) + { + break; + } + } + } + catch ( XMLStreamException ex ) + { + throw new RuntimeException( "Failed to move to start element", ex ); + } + } + + @Override public boolean moveToStartElement( String startElementName, String endElementName ) { try @@ -334,4 +353,20 @@ throw new RuntimeException( "Failed to close reader", ex ); } } + + protected String getText() throws XMLStreamException + { + StringBuffer sb = new StringBuffer(); + while (reader.peek().isCharacters()) { + sb.append( reader.nextEvent().asCharacters().getData()); + } + if (sb.length() == 0) + { + return null; + } + else + { + return sb.toString(); + } + } } === modified file 'dhis-2/dhis-services/dhis-service-xml/src/main/java/org/amplecode/staxwax/reader/DefaultXMLStreamReader.java' --- dhis-2/dhis-services/dhis-service-xml/src/main/java/org/amplecode/staxwax/reader/DefaultXMLStreamReader.java 2010-07-02 12:37:38 +0000 +++ dhis-2/dhis-services/dhis-service-xml/src/main/java/org/amplecode/staxwax/reader/DefaultXMLStreamReader.java 2010-07-16 13:04:51 +0000 @@ -100,7 +100,7 @@ { reader.next(); - return reader.getEventType() == CHARACTERS ? reader.getText() : null; + return this.getText(); } catch ( XMLStreamException ex ) { throw new RuntimeException( "Failed to get element value", ex ); @@ -108,6 +108,26 @@ } @Override + public void moveToStartElement( ) + { + try + { + while (reader.hasNext()) + { + reader.next(); + if( reader.isStartElement()) + { + break; + } + } + } + catch ( XMLStreamException ex ) + { + throw new RuntimeException( "Failed to get element value", ex ); + } + } + + @Override public void moveToStartElement( String name ) { try @@ -174,7 +194,7 @@ return reader.next() != END_DOCUMENT; } catch ( XMLStreamException ex ) { - throw new RuntimeException( "Failed to move cursor to next element", ex ); + throw new RuntimeException( "Failed to move cursor to next event", ex ); } } @@ -186,7 +206,7 @@ return !( reader.next() == END_ELEMENT && reader.getLocalName().equals( endElementName ) ); } catch ( XMLStreamException ex ) { - throw new RuntimeException( "Failed to move cursor to next element", ex ); + throw new RuntimeException( "Failed to move cursor to end element", ex ); } } @@ -232,12 +252,13 @@ reader.next(); // Read text if any - - elements.put( currentElementName, reader.getEventType() == CHARACTERS ? reader.getText() : null ); - } else + elements.put( currentElementName, this.getText() ); + } + else { reader.next(); } + } return elements; @@ -321,4 +342,21 @@ throw new RuntimeException( "Failed to create XML Event reader", ex ); } } + + protected String getText() throws XMLStreamException + { + StringBuffer sb = new StringBuffer(); + while (reader.isCharacters()) { + sb.append( reader.getText()); + reader.next(); + } + if (sb.length() == 0) + { + return null; + } + else + { + return sb.toString(); + } + } } === modified file 'dhis-2/dhis-services/dhis-service-xml/src/main/java/org/amplecode/staxwax/reader/XMLReader.java' --- dhis-2/dhis-services/dhis-service-xml/src/main/java/org/amplecode/staxwax/reader/XMLReader.java 2010-06-24 14:38:23 +0000 +++ dhis-2/dhis-services/dhis-service-xml/src/main/java/org/amplecode/staxwax/reader/XMLReader.java 2010-07-16 13:04:51 +0000 @@ -64,6 +64,12 @@ String getElementValue(); /** + * Moves the cursor to the next XML start element in the document. + * + */ + void moveToStartElement( ); + + /** * Moves the cursor to the first XML start element with the given name in the document. * * @param name The name of the XML element to move to. @@ -78,7 +84,7 @@ * @param endElementName The name of the XML end element to stop moving forward at. */ boolean moveToStartElement( String startElementName, String endElementName ); - + /** * Checks whether the current XML element is a start element with the given name. * @@ -96,7 +102,7 @@ boolean isEndElement( String name ); /** - * Moves the cursor to the next XML element in the document. Returns true until the cursor points + * Moves the cursor to the next XML event in the document. Returns true until the cursor points * at the XML document end. * * @return False if the cursor points at the XML document end, true otherwise. @@ -104,7 +110,7 @@ boolean next(); /** - * Moves the cursor to the next XML element in the document. Returns true until the cursor points + * Moves the cursor to the next XML event in the document. Returns true until the cursor points * at an XML end element with the given name. * * @param endElementName The name of the end element. === modified file 'dhis-2/dhis-services/dhis-service-xml/src/test/java/org/amplecode/staxwax/reader/XMLReaderTest.java' --- dhis-2/dhis-services/dhis-service-xml/src/test/java/org/amplecode/staxwax/reader/XMLReaderTest.java 2010-07-15 12:10:45 +0000 +++ dhis-2/dhis-services/dhis-service-xml/src/test/java/org/amplecode/staxwax/reader/XMLReaderTest.java 2010-07-16 13:04:51 +0000 @@ -69,7 +69,7 @@ private String[] specialChars = {"&", "<", ">", "\"", "'"}; - private static int BIGTEXTSIZE = 1987; // fails when set to 1988 + private static int BIGTEXTSIZE = 5000; // ------------------------------------------------------------------------- // Fixture // ------------------------------------------------------------------------- @@ -122,6 +122,22 @@ } @Test + public void testMoveToStartElement() { + XMLReader reader = XMLFactory.getXMLReader(inputStreamA); + reader.moveToStartElement(); + assertEquals(COLLECTION_NAME,reader.getElementName()); + reader.closeReader(); + } + + @Test + public void testEventMoveToStartElement() { + XMLReader evReader = XMLFactory.getXMLEventReader( inputStreamA ); + evReader.moveToStartElement(); + assertEquals(COLLECTION_NAME,evReader.getElementName()); + evReader.closeReader(); + } + + @Test public void testEventReadElements() { XMLReader reader = XMLFactory.getXMLEventReader(inputStreamA);