/** * * 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.samples.sdo.specCodeSnippets; import java.util.List; import commonj.sdo.DataObject; import commonj.sdo.Sequence; import commonj.sdo.helper.XMLHelper; /** * Demonstrates creating a DataObject from a String of XML. * * The following sample is from the Apache Tuscany project. It was written to help users * understand and experiment with SDO. It is based upon code snippets contained * within, and is meant for use with, and reference to the SDO Specification. Specifically this sample is based upon section titled "Creating DataObjects from XML documents"
*
* Usage:
* This sample can easily be run from within Eclipse as a Java Application if Tuscany or * the sample-sdo project is imported into Eclipse as an existing project. *

* If executing as a standalone application please do the following: *
* */ public class CreateDataObjectFromXmlString { /** * String representing a PurchaseOrder in XML format */ public static final String XML_STRING = "" + " " + " Alice Smith" + " 123 Maple Street" + " Mill Valley" + " PA" + " 90952" + "" + ""; /** * Creates a DataObject from an Xml String * * @return */ public static DataObject createDataObjectFromXmlString() { // TODO: do this with and without defining the schema DataObject po = XMLHelper.INSTANCE.load(XML_STRING).getRootObject(); System.out.println("DataObject has been created : " + po.toString()); return po; } /** * @param args * None required */ public static void main(String[] args) { // information System.out.println("***************************************"); System.out.println("SDO Sample CreateDataObjectFromXmlString"); System.out.println("***************************************"); System.out.println("Demonstrates creating a DataObject from a String of XML, based upon section titled 'Creating DataObjects from XML documents'"); System.out.println("***************************************"); // sample try { System.out.println("Use the following XML String: " + XML_STRING); System.out.println("Creating DataObject"); DataObject po = createDataObjectFromXmlString(); System.out.println("The following DataObject was sucessfully created from the XML String"); System.out.println(XMLHelper.INSTANCE.save(po, "http://example.com/purchaseOrder", "purchaseOrder")); /* * Without a Type definition accessing a DataObject is slightly more * difficult. This is because without a Type definition SDO does not know * the intended multiplicity of properties. Currently the Tuscany * implementation assumes that elements and attributes are lists. There * is some discussion (SDO-3, also mentioned in SDO Specification JIRA SDO-22) about adding * annotations to the XML (sdo:many="false") to control the indended * multiplicity of DataObjects created without a model. * * The following code will not work when a model/schema is not defined * shipTo = purchaseOrder.getDataObject("shipTo"); assertEquals("testing * ship to name", shipTo.getString("name"), "Alice Smith"); * assertEquals("testing ship to zip", shipTo.getString("zip"), "90952"); */ System.out.println("Programatically access content of DataObject - getting name of the person this is getting shipped to"); // access the shipTo DataObject List shipToList = po.getList("shipTo"); DataObject shipTo = (DataObject) shipToList.get(0); // access the name DataObject /* * This is currently quite cumbersome. In future specifications accessing * the name element will be simplier and the user could simply execute: * List nameList = shipTo.getList("name"); String actualName = (String) * nameList.get(0); * * Or if name is an attribute ("") simply: String actualName = shipTo.getString("name"); * * There are currently more elegant means to perform this task using the xPath support */ List nameList = shipTo.getList("name"); DataObject name = (DataObject) nameList.get(0); // access the contents of the name DataObject Sequence s = name.getSequence(); String actualName = (String) s.getValue(0); System.out.println("Name being shipped to: " + actualName); } catch (Exception e) { System.out.println("Sorry, exception caught when creating DataObject : " + e.toString()); e.printStackTrace(); } // end of sample System.out.println("GoodBye"); } }