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 }