您的位置:首页 > 运维架构 > Apache

Apache sdo学习笔记(二)——通过Shema创建DataObject对象

2012-12-13 15:22 417 查看
1:schema文件po.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://www.example.com/PO" targetNamespace="http://www.example.com/PO">

    <xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
    <xsd:element name="comment" type="xsd:string"/>

    <xsd:complexType name="PurchaseOrderType">
        <xsd:sequence>
            <xsd:element name="shipTo" type="USAddress"/>
            <xsd:element name="billTo" type="USAddress"/>
            <xsd:element ref="comment" minOccurs="0"/>
            <xsd:element name="items"  type="Items"/>
        </xsd:sequence>
        <xsd:attribute name="orderDate" type="xsd:date"/>
    </xsd:complexType>

    <xsd:complexType name="USAddress">
        <xsd:sequence>
            <xsd:element name="name"   type="xsd:string"/>
            <xsd:element name="street" type="xsd:string"/>
            <xsd:element name="city"   type="xsd:string"/>
            <xsd:element name="state"  type="xsd:string"/>
            <xsd:element name="zip"    type="xsd:decimal"/>
        </xsd:sequence>
        <xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
    </xsd:complexType>

    <xsd:complexType name="Items">
        <xsd:sequence>
            <xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="productName" type="xsd:string"/>
                        <xsd:element name="price"  type="xsd:decimal"/>
                        <xsd:element name="quantity">
                            <xsd:simpleType>
                                <xsd:restriction base="xsd:positiveInteger">
                                    <xsd:maxExclusive value="100"/>
                                </xsd:restriction>
                            </xsd:simpleType>
                        </xsd:element>
                        <xsd:element ref="comment"   minOccurs="0"/>
                        <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
                    </xsd:sequence>
                    <xsd:attribute name="partNum" type="SKU" use="required"/>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    
    <xsd:simpleType name="SKU">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="\d{3}-[A-Z]{2}"/>
        </xsd:restriction>
    </xsd:simpleType>
    
 </xsd:schema>


2:java代码

package com.waysoft.intergration.dao;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import org.apache.tuscany.sdo.api.SDOUtil;

import commonj.sdo.DataObject;
import commonj.sdo.helper.HelperContext;
import commonj.sdo.helper.XSDHelper;

public class Test1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			// create HelperContext
			HelperContext scope = SDOUtil.createHelperContext();
			// load .xsd document
			loadTypesFromXMLSchemaFile(scope, Test1.class.getResource("/").getPath().substring(1)+"po.xsd");
			// create DataObject
			DataObject po = scope.getDataFactory().create("http://www.example.com/PO","PurchaseOrderType");
			// 设置属性值
			po.setString("orderDate", "2010-07-07");
			
		
			
			DataObject shipTo = po.createDataObject("shipTo");
             // 设置属性值
			shipTo.setString("country", "中国");
            // 设置简易子元素的值 [与设置属性值的方式相同,二者的区别由类型决定]
			shipTo.setString("name", "张三");
			shipTo.setString("street", "东岳大街");
			shipTo.setString("city", "泰安市");
			shipTo.setString("state", "山东省");
			shipTo.setString("zip", "27100");
			
			DataObject billTo = po.createDataObject("billTo");
			billTo.setString("country", "中国");
			billTo.setString("name", "李四");
			billTo.setString("street", "长乐街");
			billTo.setString("city", "杭州");
			billTo.setString("state", "浙江省");
			billTo.setString("zip", "310000");
			
			po.set("comment", "This is a test comment.");
			
			DataObject items = po.createDataObject("items");
			
			DataObject item1 = items.createDataObject("item");
			item1.setString("partNum", "123-AB");
			item1.setString("productName", "apple");
			item1.setString("price","1.2");
			item1.setString("quantity", "12");
			item1.setString("comment", "empty comment.");
			item1.setString("shipDate", "2010-06-30");
			
			DataObject item2 = items.createDataObject("item");
			item2.setString("partNum", "456-CD");
			item2.setString("productName", "pear");
			item2.setString("price","2.1");
			item2.setString("quantity", "21");
			item2.set("comment", "empty comment.");
			
			
			// -- save
			scope.getXMLHelper().save(po, "http://www.example.com/PO", "purchaseOrder",System.out);
		} catch(Exception e){
			e.printStackTrace();
		}

	}
	

	
	public static void loadTypesFromXMLSchemaFile(HelperContext helperContext,String filename)throws IOException{
		XSDHelper xsdHelper = helperContext.getXSDHelper();
		InputStream in = null;
		try {
			URL url = new File(filename).toURI().toURL();
			in = url.openStream();
			xsdHelper.define(in, url.toString());
		} catch (IOException e){
			System.err.print("[错误]:");
			System.out.println("无法加载 " + filename + " .");
			throw e;
		} finally {
			try { if (in != null) in.close();} catch (Exception e){}
		}
	}

}


3:运行结果

<?xml version="1.0" encoding="UTF-8"?>
<po:purchaseOrder xmlns:po="http://www.example.com/PO" orderDate="2010-07-07">
  <shipTo country="中国">
    <name>张三</name>
    <street>东岳大街</street>
    <city>泰安市</city>
    <state>山东省</state>
    <zip>27100</zip>
  </shipTo>
  <billTo country="中国">
    <name>李四</name>
    <street>长乐街</street>
    <city>杭州</city>
    <state>浙江省</state>
    <zip>310000</zip>
  </billTo>
  <po:comment>This is a test comment.</po:comment>
  <items>
    <item partNum="123-AB">
      <productName>apple</productName>
      <price>1.2</price>
      <quantity>12</quantity>
      <po:comment>empty comment.</po:comment>
      <shipDate>2010-06-30</shipDate>
    </item>
    <item partNum="456-CD">
      <productName>pear</productName>
      <price>2.1</price>
      <quantity>21</quantity>
      <po:comment>empty comment.</po:comment>
    </item>
  </items>
</po:purchaseOrder>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐