GWT中如何将EMF对象存储为XMI/从XMI反序列化为对象

由于GWT对XML解析的支持并不够,以及并没有提供java对象的反射,因此EMF对象的序列化/反序列化是一个世界难题。

幸运的是,gwt-html5-graph项目(http://code.google.com/p/gwt-html5-graph/)成功的解决了此问题。

我们来首先看一下gwt-html5-graph中是如何将EMF对象存储为XMI的:

1、假设我们以及创建了一个EMF对象company。

2、首先我们先按照EMF通常的步骤将其存储到Resoure中:

        XMIResourceImpl resource = new XMIResourceImpl();
        resource.getContents().add(company);
       GWTOutputStream bs = new GWTOutputStream();
        try {
            HashMap options = new HashMap();
            options.put(XMIResource.OPTION_ENCODING, "UTF-8");
            resource.save(bs, options);
        } catch (IOException e) {
            e.printStackTrace();
        }

 

3、事实上GWT并不支持客户端的OutputStream。但是gwt-html5-graph提供了一个新的类GWTOutputStream()用以支持输出流。

4、转换输出流为字符串:String xmi = new String(bs.toString())。此时我们完成了EMF对象的序列化。

下面我们从这个字符串中反序列化,解析出EMF对象:

1、按照EMF通常的步骤加载XML:

ResourceSetImpl rs = new ResourceSetImpl();
XMIResourceImpl r = new XMIResourceImpl();
rs.getResources().add(r);
r.getResourceSet().getPackageRegistry()
        .put(companyPackage.getNsURI(), companyPackage);
ByteArrayInputStream is = new ByteArrayInputStream(bs.toString()
        .getBytes());
r.load(is, null);

2、从资源中获取EMF对象:resource.getContents().get(0)

 

gwt-html5-graph项目(http://code.google.com/p/gwt-html5-graph/)提供了两个案例,有兴趣的可以参考一下。

Demo1(EMF Sample): http://euml.trufun.net/drawx/emf-sample/Testemf.html

Demo2(UML2 Sample): http://euml.trufun.net/drawx/uml2-sample/Testemf.html

转载于:https://www.cnblogs.com/trufun1006/archive/2011/10/28/2227250.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值