1   package org.codehaus.xfire.util;
2   
3   import java.io.ByteArrayOutputStream;
4   
5   import javax.xml.parsers.DocumentBuilder;
6   import javax.xml.parsers.DocumentBuilderFactory;
7   import javax.xml.stream.FactoryConfigurationError;
8   import javax.xml.stream.XMLInputFactory;
9   import javax.xml.stream.XMLOutputFactory;
10  import javax.xml.stream.XMLStreamException;
11  import javax.xml.stream.XMLStreamReader;
12  import javax.xml.stream.XMLStreamWriter;
13  
14  import org.codehaus.xfire.test.AbstractXFireTest;
15  import org.dom4j.Document;
16  import org.dom4j.io.DOMReader;
17  import org.w3c.dom.Element;
18  
19  /***
20   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
21   * @since Oct 26, 2004
22   */
23  public class STAXUtilsTest
24      extends AbstractXFireTest
25  {
26      public void testAmazonDoc() throws Exception
27      {
28          String outS = doCopy("amazon.xml");
29          
30          Document doc = readDocument(outS);
31          
32          addNamespace("a", "http://xml.amazon.com/AWSECommerceService/2004-08-01");
33          assertValid("/a:ItemLookup", doc);
34          assertValid("/a:ItemLookup/a:Request/a:IdType", doc);
35      }
36  
37      public void testEbayDoc() throws Exception
38      {
39          String outS = doCopy("ebay.xml");
40          
41          Document doc = readDocument(outS);
42          
43          addNamespace("e", "urn:ebay:api:eBayAPI");
44          addNamespace("ebase", "urn:ebay:apis:eBLBaseComponents");
45          assertValid("//ebase:Version", doc);
46          assertValid("//ebase:ErrorLanguage", doc);
47          assertValid("//e:UserID", doc);
48      }
49      
50      public void testAmazonDoc2() throws Exception
51      {
52          String outS = doCopy("amazon2.xml");
53          
54          Document doc = readDocument(outS);
55          
56          addNamespace("a", "http://webservices.amazon.com/AWSECommerceService/2004-10-19");
57          assertValid("//a:ItemLookupResponse", doc);
58          assertValid("//a:ItemLookupResponse/a:Items", doc);
59      }
60  
61      /***
62       * @return
63       * @throws FactoryConfigurationError
64       * @throws XMLStreamException
65       */
66      private String doCopy(String resource) throws FactoryConfigurationError, XMLStreamException
67      {
68          XMLInputFactory ifactory = XMLInputFactory.newInstance();
69          XMLStreamReader reader = ifactory.createXMLStreamReader(getClass().getResourceAsStream(resource));
70          
71          ByteArrayOutputStream out = new ByteArrayOutputStream();
72          XMLOutputFactory factory = XMLOutputFactory.newInstance();
73          XMLStreamWriter writer = factory.createXMLStreamWriter(out);
74          
75          writer.writeStartDocument();
76          STAXUtils.copy(reader, writer);
77          writer.writeEndDocument();
78          
79          writer.close();
80          String outS = out.toString();
81          
82          return outS;
83      }
84      
85  
86      public void testDOMWrite() throws Exception
87      {
88          org.w3c.dom.Document doc = DOMUtils.readXml(getResourceAsStream("amazon.xml"));
89  
90          ByteArrayOutputStream bos = new ByteArrayOutputStream();
91          XMLOutputFactory ofactory = XMLOutputFactory.newInstance();
92          XMLStreamWriter writer = ofactory.createXMLStreamWriter(bos);
93          
94          STAXUtils.writeElement(doc.getDocumentElement(), writer);
95          
96          writer.close();
97          
98          Document testDoc = readDocument(bos.toString());
99          addNamespace("a", "http://xml.amazon.com/AWSECommerceService/2004-08-01");
100         assertValid("//a:ItemLookup", testDoc);
101         assertValid("//a:ItemLookup/a:Request", testDoc);
102     }
103     
104     public void testDOMRead() throws Exception
105     {
106         XMLInputFactory ifactory = XMLInputFactory.newInstance();
107         XMLStreamReader reader = ifactory.createXMLStreamReader(getResourceAsStream("amazon2.xml"));
108         
109         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
110         DocumentBuilder builder = factory.newDocumentBuilder();
111         org.w3c.dom.Document doc = builder.newDocument();
112         Element root = doc.createElement("root");
113         doc.appendChild(root);
114         
115         STAXUtils.readElements(root, reader);
116         
117         DOMReader domReader = new DOMReader();
118         Document testDoc = domReader.read(doc);
119 
120         addNamespace("a", "http://webservices.amazon.com/AWSECommerceService/2004-10-19");
121         assertValid("//a:ItemLookupResponse", testDoc);
122         assertValid("//a:ItemLookupResponse/a:Items", testDoc);
123         assertValid("//a:OperationRequest/a:HTTPHeaders/a:Header[@Name='UserAgent']", testDoc);
124     }
125 }