Parsing a Character Stream and a Byte Stream

001 package org.gxml.book.parsing; 
002  
003 import java.io.InputStream; 
004 import java.io.Reader; 
005 import java.io.StringReader; 
006 import java.net.URI; 
007  
008 import org.gxml.book.common.SampleApp; 
009 import org.gxml.sa.GxModel; 
010 import org.gxml.sa.GxNameBridge; 
011 import org.gxml.sa.GxProcessingContext; 
012 import org.gxml.xdm.NodeKind; 
013 import org.gxml.xdm.Resolved; 
014 import org.gxml.xdm.Resolver; 
015  
016 import com.tibco.gxml.sa.common.helpers.DocumentBuilderFactory; 
017 import com.tibco.gxml.sa.common.helpers.GxDocumentBuilder; 
018 import com.tibco.gxml.sa.common.helpers.GxDocumentBuilderFactory; 
019  
020 public abstract class BookIntroParsingSample<I, U, N extends I, A extends I, S, T, 
X> extends SampleApp<I, U, N, A, S, T, X> 
021 { 
022     public void testCharacterStreamParse() throws Exception 
023     { 
024         final GxProcessingContext<I, U, N, A, S, T, X> pcx = newProcessingContext(); 
025  
026         final GxDocumentBuilderFactory<N, S> factory = new DocumentBuilderFactory<I, U, N, 
A, S, T, X>(pcx); 
027  
028         final GxDocumentBuilder<N> builder = factory.newDocumentBuilder(); 
029  
030         final String xmlString = "<e>123</e>"; 
031         final URI systemId = new URI("e.xml"); 
032         final Reader characterStream = new StringReader(xmlString); 
033         final N doc = builder.parse(characterStream, systemId); 
034  
035         final GxModel<N, A, S, T> model = pcx.getModel(); 
036  
037         assertEquals(NodeKind.DOCUMENT, model.getNodeKind(doc)); 
038  
039         final N e = model.getFirstChildElement(doc); 
040         assertEquals(NodeKind.ELEMENT, model.getNodeKind(e)); 
041         assertEquals("e", model.getLocalNameAsString(e)); 
042         assertEquals("123", model.getStringValue(e)); 
043     } 
044  
045     public void testByteStreamParse() throws Exception 
046     { 
047         final Resolver resolver = getResolver(); 
048  
049         final GxProcessingContext<I, U, N, A, S, T, X> pcx = newProcessingContext(); 
050  
051         final URI systemId = new URI("email.xml"); 
052         final Resolved<InputStream> source = resolver.resolveInputStream(systemId); 
053  
054         final GxDocumentBuilderFactory<N, S> factory = new DocumentBuilderFactory<I, U, N, 
A, S, T, X>(pcx); 
055  
056         final GxDocumentBuilder<N> builder = factory.newDocumentBuilder(); 
057  
058         final N document = builder.parse(source.getResource(), source.getSystemId()); 
059  
060         final GxModel<N, A, S, T> model = pcx.getModel(); 
061  
062         assertEquals(NodeKind.DOCUMENT, model.getNodeKind(document)); 
063  
064         final N email = model.getFirstChildElement(document); 
065         assertEquals(NodeKind.ELEMENT, model.getNodeKind(email)); 
066         assertEquals("email", model.getLocalNameAsString(email)); 
067         final GxNameBridge<S> nameBridge = pcx.getNameBridge(); 
068         final S namespaceURI = nameBridge.symbolize("http://www.example.com"); 
069         final S localName = nameBridge.symbolize("from"); 
070         final N from = model.getFirstChildElementByName(email, namespaceURI, localName); 
071         assertEquals("Julie", model.getStringValue(from)); 
072          
073         for (final N node : model.getDescendantOrSelfAxis(document)) 
074         { 
075             assertNodeSymbolSemantics(node, pcx); 
076         } 
077     } 
078 }