文档章节

Apache Tuscany SDO 用法

刘小菜
 刘小菜
发布于 2013/06/21 10:34
字数 466
阅读 272
收藏 2

Altova XMLSpy 工具,方便xml 转schema

package org.test;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

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

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

public class Demo {
	
	String test="<?xml version=\"1.0\" encoding=\"UTF-8\"?> "+
				"	<SERVICE xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" >"+
				"		<SYS_HEAD>"+
				"			<TRAN_CODE id=\"TRAN_TEST\">TBUT0001</TRAN_CODE>"+
				"			<CHNL_ID>05</CHNL_ID>"+
				"			<USER_NAME/>"+
				"			<CHNL_DATE>20130308</CHNL_DATE>"+
				"			<CHNL_TIME>120911</CHNL_TIME>"+
				"			<CHNL_SEQ/>"+
				"			<IP_ADDR>127.0.0.1</IP_ADDR>"+
				"			<MAC_DATA/>"+
				"		</SYS_HEAD>"+
				"		<APP_HEAD>"+
				"			<PAGE_NO/>"+
				"			<PAGE_SIZE/>"+
				"		</APP_HEAD>"+
				"		<BODY>"+
				"			<OUT_ACCT>66660000000001182</OUT_ACCT>"+
				"			<PWD>234</PWD>"+
				"			<IN_ACCT>66660000000001802</IN_ACCT>"+
				"			<IN_ACCT_NAME/>"+
				"			<TXN_AMT>100</TXN_AMT>"+
				"			<REL_INPUT_FLAG>6</REL_INPUT_FLAG>"+
				"			<LOGIN_NAME/>"+
				"			<CARD_NO/>"+
				"		</BODY>"+
				"	</SERVICE>";

	public static void main(String[] args) {
		Demo demo = new Demo();
		try {
//			demo.runSample();
			demo.runInsertMapToDataObject();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 取值
	 * @throws IOException
	 */
	public void runSample() throws IOException{
		HelperContext scope = SDOUtil.createHelperContext();
		loadTypesFromXMLSchemaFile(scope, "test.xsd");
		//也可以使用getXMLDocumentFromFile ,从文件中取得
		XMLDocument xmlDoc = getXMLDocumentFromString(scope, test);
		//取得根节点
		DataObject purchaseOrder = xmlDoc.getRootObject();
		//根节点必须取得为对象.
		DataObject dataObject = purchaseOrder.getDataObject("SYS_HEAD");
		//删除根节点
//		dataObject.delete();
		String id = dataObject.getString("CHNL_ID");
		System.out.println(id);
		//取根节点下的子节点,可使用xPath语法
		String chnlId = purchaseOrder.getString("SYS_HEAD/CHNL_ID");
		System.out.println(chnlId);
	}
	/**
	 * 插入map到标准的DataObject作为附加信息
	 * @throws Exception 
	 */
	public void runInsertMapToDataObject() throws Exception{
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("test", "test");
		map.put("test1", "test1");
		map.put("test2", "test2");
		map.put("test3", "test3");
		map.put("test4", "test44");
		HelperContext helperContext = SDOUtil.createHelperContext();
		loadTypesFromXMLSchemaFile(helperContext, "test.xsd");
		XMLDocument xmlDocument  = getXMLDocumentFromFile(helperContext, "test.xml");
		//类型转换为DynamicDataObjectImpl
		DynamicDataObjectImpl dataObject = (DynamicDataObjectImpl) xmlDocument.getRootObject();
		//赋值,理论上只要是对象就可以放进去。
		dataObject.dynamicSet(1, map);
		//取根据定义的map的key 取value
		Map<String,Object> map2 = (Map<String, Object>) dataObject.dynamicGet(1);
		System.out.println("-----------------------------"+map2.get("test1"));
		//根据key删除value
		dataObject.dynamicUnset(1);
		String xml = helperContext.getXMLHelper().save(dataObject, "", "");
		System.out.println(xml);
	}
	
	 public void loadTypesFromXMLSchemaFile(HelperContext scope, String fileName) {
	    XSDHelper xsdHelper = scope.getXSDHelper();
	    InputStream is = null;
	    try {
	    	
	        URL url = getClass().getResource("/"+fileName);
	        is = url.openStream();
	        xsdHelper.define(is, url.toString()); 
	    } catch (Exception e) {
	    	e.printStackTrace();
	    } finally {
	       try {
	         is.close();
	       } catch (Exception e) {
	    	   e.printStackTrace();
	       }
	   }
	 }
	 
	 public XMLDocument getXMLDocumentFromFile(HelperContext scope,String filename) throws Exception {
	    XMLDocument result = null;
	    InputStream is = null;
	    try {
	      is = ClassLoader.getSystemResourceAsStream(filename);
	      result = scope.getXMLHelper().load(is);
	    } catch (Exception e) {
	    	e.printStackTrace();
	    } finally {
	      try {
	        is.close();
	      } catch (Exception e) {
	    	  e.printStackTrace();
	      }
	    }
	    return result;
	  }
	 
	 protected XMLDocument getXMLDocumentFromString(HelperContext scope, String xmlDoc) throws IOException {
	    XMLDocument result = null;
	    InputStream is = null;
	    is = new ByteArrayInputStream(xmlDoc.getBytes());
	    result = scope.getXMLHelper().load(is);
	    return result;
	  }
}

tuscany 官网:http://tuscany.apache.org/

tuscany sdo 地址:http://tuscany.apache.org/sdo-overview.html

tuscany sdo 最后一个版本为2008年,貌似已经停止更新了。

© 著作权归作者所有

刘小菜
粉丝 7
博文 23
码字总数 6408
作品 0
北京
后端工程师
私信 提问
Apache Tuscany SCA Java 1.6.2 发布

Apache Tuscany提供一个面向服务的核心架构以支持简单快速地开发和运行面向服务的应用程序。其轻巧的运行环境为嵌入或加载到不同的平台而设计。 Apache Tuscany实现服务组件架构(SCA)标准,...

红薯
2011/04/17
990
1
面向服务的核心架构--Tuscany

Apache Tuscany提供一个面向服务的核心架构以支持简单快速地开发和运行面向服务的应用程序。其轻巧的运行环境为嵌入或加载到不同的平台而设计。Apache Tuscany实现服务组件架构(SCA)标准,...

匿名
2008/09/25
4.6K
0
java.lang.illegalargumentexception:resolve against

一、Tuscany 是什么? Apache Tuscany 提供全方位的开源SOA基础架构以利于开发, 组装, 发布, 管理构件式应用服务(Composite Applications)及数据处理. 该项目实现服务构件体系(SCA: Service...

Oscarfff
2015/12/21
43
0
Apache Tuscany 2.0-M5.1发布

Apache Tuscany遵循 SCA 和 SDO 标准的规范实现,并包括一个支持 SDO 的Data Access Service (DAS)。 SCA 源于 IBM 的 WSIF ,SCA 的目的是使用户在构建企业应用时有一个不再直接面对具体的技...

太TM帅了
2010/10/19
509
0
Eclipse 和那些用过的plugins

又见Tuscany,这要写的不是意大利的那个区,而是可以在Eclipse里下载并安装的那个插件。百度中找到的解释是:tuscany是Apache组织关于SOA实现的一个开放源码的工程项目 Apache组织关于SOA实现...

LitStone
2017/01/06
14
0

没有更多内容

加载失败,请刷新页面

加载更多

基于Prometheus和Grafana的监控平台 - 环境搭建

相关概念 微服务中的监控分根据作用领域分为三大类,Logging,Tracing,Metrics。 Logging - 用于记录离散的事件。例如,应用程序的调试信息或错误信息。它是我们诊断问题的依据。比如我们说...

JAVA日知录
50分钟前
5
0
PHP运行时全局构造体

struct _php_core_globals { zend_bool magic_quotes_gpc; // 是否对输入的GET/POST/Cookie数据使用自动字符串转义。 zend_bool magic_quotes_runtime; //是否对运行时从外部资源产生的数据使...

冻结not
51分钟前
4
0
webpack插件html-webpack-plugin

本文转载于:专业的前端网站→webpack插件html-webpack-plugin 1、插件安装 npm install html-webpack-plugin --save-dev 2、插件使用 webpack.config.js配置文件为: var htmlWebpackPlugin=...

前端老手
今天
6
0
数据挖掘

zhengchen1996
今天
4
0
nginx配置反向代理

文章来源 运维公会:nginx配置反向代理 1、简介 Nginx最为常见的一种功能就是配置反向代理。配置也是十分的简单,只需要用到proxy模块即可。 怎么查看nginx默认的安装模块? 在nginx的安装目...

运维团
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部