网站地图
  
  高级搜索
  首页   技术论坛   博客 派计划   产品中心   资源中心   银弹在线   商城  





SDO之创建DataObject    
#1楼
给作者发送短消息 给作者发送短消息 实名会员 商务会员 
查看用户其他信息
总分 2915 分
财富 3234 goCom币
威望 60
排名 第 79 名
段位 新手必读

初学SDO ,在网上下载SDO的Sample就调试,结果走了不少弯路,就是出现IllegalArgumentException,不知是出现什么问题,心想我也是照着例子搞的怎么就是通不过呢?于是乎跟踪tuscany的源码,发现Type为空。为什么呢?可能是在运行这前要把你想要创建的DataObject的命名空间与类型的名字在文件中得注册。于是又仔细跟踪看到了这么一段:

    XSDHelper xsdHelper = scope.getXSDHelper();
    InputStream is = null;
    try {
         URL url = getClass().getResource("/"+fileName);
          is = url.openStream();
          xsdHelper.define(is, url.toString());
     } catch (Exception e) {
           somethingUnexpectedHasHappened(e);
     } finally {
       try {
         is.close();
       } catch (Exception e) {
         somethingUnexpectedHasHappened(e);
       }
   }

猛然明白了。所以把例子中的xsd文件拷到项目下。再运行通过,高兴呀,哈哈。下面我把例子贴出,可能也有网友跟我一样吧,也希望其它初学SDO的网友别走我弯路。


public class SdoDataObject {
    private static final String COMPANY_GENERATED_XML = "companyGenerated.xml";

    /**
     * 创建类型范围的上下文
     *
     * @return
     */
    private HelperContext createScopeForType() {

        return SDOUtil.createHelperContext();
    }

    /**
     * 从XML计划文件中加载类型。
     *
     * @param filename
     */
    private void loadTypesFromXMLSchemaFile(HelperContext scope, String filename) {
        XSDHelper xsdHelper = scope.getXSDHelper();

        URL url = getClass().getResource("/" + filename);
        InputStream is = null;
        try {
            is = url.openStream();
            xsdHelper.define(is, url.toString());
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 组装数据图
     *
     * @param company
     */
    private void populateDataGraph(DataObject company) {
        company.setString("name", "aaaa");
        company.setString("employeeOfTheMonth", "D001");

        DataObject depts = company.createDataObject("departments");

        depts.setString("name", "Advanced Technologies");
        depts.setString("location", "NY");
        depts.setString("number", "123");

        System.out.println("Creating an employee: John Jones");
        DataObject johnJones = depts.createDataObject("employees");
        johnJones.setString("name", "John Jones");

        johnJones.setString("SN", "E0001");

        System.out.println("Creating an employee: Jane Doe");
        DataObject janeDoe = depts.createDataObject("employees");
        janeDoe.setString("name", "Jane Doe");
        janeDoe.setString("SN", "E0003");

        System.out.println("Creating a manager: Fred Bloggs");
        DataObject fVarone = depts.createDataObject("employees");
        fVarone.setString("name", "Fred Bloggs");
        fVarone.setString("SN", "E0004");
        fVarone.setString("manager", "true");
        System.out.println("DataObject creation completed");
        System.out.println();
        System.out.println("create DataObject susseccfully");
    }

    public void run() {
        HelperContext scope = createScopeForType();
        loadTypesFromXMLSchemaFile(scope, "company.xsd");
       
        DataObject company = scope.getDataFactory().create("company.xsd",
                "CompanyType");
        populateDataGraph(company);

        try {
            FileOutputStream fos = new FileOutputStream(COMPANY_GENERATED_XML);
            try {
                scope.getXMLHelper().save(company, "company.xsd", "company",
                        fos);
            } catch (IOException e) {
                e.printStackTrace();
            }
            String xml = scope.getXMLHelper().save(company, "company.xsd",
                    "company");
            System.out.println(xml);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        SdoDataObject sdoDataObject = new SdoDataObject();
        sdoDataObject.run();
    }

}

 

 
 

Re: SDO之创建DataObject    
#2楼
给作者发送短消息 给作者发送短消息  
查看用户其他信息
总分 42 分
财富 -1 goCom币
威望 1
排名 :(
段位 新手必读
 




发表回复
账号用户名   密码   登录
内容:url email imgsrc image code quote
范例 Example
bold italic underline linethrough   


 [更多...]