/** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.tuscany.sdo.test; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.io.StringWriter; import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.namespace.QName; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; import junit.framework.Assert; import junit.framework.TestCase; import org.apache.tuscany.sdo.api.SDOUtil; import org.apache.tuscany.sdo.api.XMLStreamHelper; import commonj.sdo.DataObject; import commonj.sdo.helper.HelperContext; import commonj.sdo.helper.XMLDocument; public class XMLStreamHelperTestCase extends TestCase { private HelperContext hc; private XMLStreamHelper streamHelper; private XMLInputFactory inputFactory; private XMLOutputFactory outputFactory; private final QName module = new QName("http://foo", "module"); private final QName name = new QName("http://bar", "implementation.mock"); private final String testName = "foo-ext"; // private String testName = "complex"; private String xml; // = "1Dummy2"; protected void setUp() throws Exception { super.setUp(); hc = SDOUtil.createHelperContext(); streamHelper = SDOUtil.createXMLStreamHelper(hc); URL url = getClass().getClassLoader().getResource(testName + ".xsd"); hc.getXSDHelper().define(url.openStream(), url.toExternalForm()); url = getClass().getResource("/mixed.xsd"); hc.getXSDHelper().define(url.openStream(), url.toString()); inputFactory = XMLInputFactory.newInstance(); outputFactory = XMLOutputFactory.newInstance(); url = getClass().getClassLoader().getResource(testName + ".xml"); final InputStreamReader reader = new InputStreamReader(url.openStream()); final StringBuffer stringBuffer = new StringBuffer(); final char buf[] = new char[1024]; int size; while ((size = reader.read(buf)) != -1) { stringBuffer.append(buf, 0, size); } xml = stringBuffer.toString(); reader.close(); } public void testLoadObject() throws Exception { final XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(xml)); int event = reader.getEventType(); while (!((event == XMLStreamConstants.START_ELEMENT) && reader.getName().equals(name)) && reader.hasNext()) { event = reader.next(); } final DataObject dataObject = streamHelper.loadObject(reader); Assert.assertNotNull(dataObject); Assert.assertTrue(dataObject.getString("myAttr").equals("helloworld.HelloWorldImpl")); } public void testLoadUnqualifiedObject() throws Exception { final XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(xml.replaceAll("bar:", ""))); int event = reader.getEventType(); while (!((event == XMLStreamConstants.START_ELEMENT) && reader.getName().getLocalPart().equals(name.getLocalPart())) && reader.hasNext()) { event = reader.next(); } final Map options = new HashMap(); options.put(XMLStreamHelper.OPTION_DEFAULT_ROOT_TYPE, hc.getTypeHelper().getType(name.getNamespaceURI(), "MockImplementation")); final DataObject dataObject = streamHelper.loadObject(reader, options); Assert.assertNotNull(dataObject); Assert.assertTrue(dataObject.getString("myAttr").equals("helloworld.HelloWorldImpl")); } public void testLoad() throws Exception { final XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(xml)); final XMLDocument document = streamHelper.load(reader); Assert.assertNotNull(document); Assert.assertEquals(document.getRootElementURI(), module.getNamespaceURI()); Assert.assertEquals(document.getRootElementName(), module.getLocalPart()); final DataObject moduleObject = document.getRootObject(); final List components = moduleObject.getList("component"); final DataObject componentObject = (DataObject) components.get(0); final DataObject implObject = componentObject.getDataObject("implementation.mock"); Assert.assertTrue(implObject.getString("myAttr").equals("helloworld.HelloWorldImpl")); } public void testSave() throws XMLStreamException { final XMLDocument document = hc.getXMLHelper().load(xml); final StringWriter writer = new StringWriter(); final XMLStreamWriter streamWriter = outputFactory.createXMLStreamWriter(writer); streamHelper.save(document, streamWriter); streamWriter.flush(); final String xmlStr = writer.toString(); //System.out.println(xmlStr); Assert.assertTrue(xmlStr.indexOf("myAttr=\"helloworld.HelloWorldImpl\"")!=-1); } public void testSaveObject() throws XMLStreamException { final XMLDocument document = hc.getXMLHelper().load(xml); final DataObject moduleObject = document.getRootObject(); final List components = moduleObject.getList("component"); final DataObject componentObject = (DataObject) components.get(0); final StringWriter writer = new StringWriter(); final XMLStreamWriter streamWriter = outputFactory.createXMLStreamWriter(writer); streamHelper.saveObject(componentObject, streamWriter); streamWriter.flush(); Assert.assertTrue(writer.toString().indexOf("myAttr=\"helloworld.HelloWorldImpl\"")!=-1); } public void testSaveSequence() throws IOException, XMLStreamException { final DataObject quote = hc.getDataFactory().create("http://www.example.com/mixed", "MixedQuote"); quote.setString("symbol", "fbnt"); quote.getSequence().addText(0, "testing"); quote.getSequence().addText("more testing"); final StringWriter writer = new StringWriter(); final XMLStreamWriter streamWriter = outputFactory.createXMLStreamWriter(writer); streamHelper.saveObject(quote, streamWriter); streamWriter.flush(); //System.out.println(writer); assertTrue(writer.toString().indexOf("fbnt") != -1); } // Test case for TUSCANY-1788 public void testXSIType() throws Exception { URL ipo = getClass().getResource("/ipo.xsd"); hc.getXSDHelper().define(ipo.openStream(), ipo.toString()); DataObject d = hc.getDataFactory().create("http://www.example.com/IPO", "PurchaseOrderType"); DataObject billTo = hc.getDataFactory().create("http://www.example.com/IPO", "USAddress"); billTo.setString("city", "San Jose"); billTo.setString("state", "CA"); d.setDataObject("billTo", billTo); XMLDocument ipoDoc = hc.getXMLHelper().createDocument(d, "http://www.example.com/IPO", "purchaseOrder"); final StringWriter writer = new StringWriter(); final XMLStreamWriter xmlWriter = outputFactory.createXMLStreamWriter(writer); streamHelper.save(ipoDoc, xmlWriter, null); xmlWriter.close(); String xml = writer.toString(); assertTrue(xml.indexOf("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"") != -1); assertTrue(xml.indexOf("xsi:type") != -1); } protected void tearDown() throws Exception { super.tearDown(); } }