本节讲述了用户发送数据查询请求给APIGateway,APIGateway中介根据用户的请求对数据库进行操作,查询用户所需数据,并返回给用户。

# 数据库准备

本示例数据库操作对象为Oracle,表名USERINFO,数据如下所示。
image2017-5-15 14:19:58.png

# APIGateway Studio配置数据库连接

打开APIGateway Studio目录\server\EOS_srv\config下user-config.xml,修改<group name = “default">下内容为如下所示。
image2017-5-15 14:20:9.png

本示例要求APIGateway访问oracle数据库,配置数据源为oracle,用户根据实际需要配置,参考帮助文档数据源配置。

# 创建ESB项目

  1. 新建ESB项目。
    image2017-5-15 14:20:19.png

  2. 单击“下一步”,选择添加系统引用库。
    image2017-5-15 14:20:26.png

  3. 将富页面框架和基础构件库加入项目。
    image2017-5-15 14:20:36.png

  4. 右键项目,创建公共Module和业务Module,操作完成如下所示。
    image2017-5-15 14:20:51.png

  5. 创建HTTP类型Transport,如下图所示。
    image2017-5-15 14:20:58.png

  6. 创建中介服务。
    image2017-5-15 14:21:11.png

  7. 创建HTTP代理服务。
    image2017-5-15 14:21:26.png

  8. HTTP代理服务编辑页面如下所示。
    image2017-5-15 14:21:33.png

  9. 添加数据库连接。在数据库资源管理器界面,右键“连接”—新建数据库连接。操作完成如下所示。
    image2017-5-15 14:21:42.png

  10. 创建数据集。在业务Module—数据集菜单上,右键新建数据集。
    image2017-5-15 14:21:51.png
    image2017-5-15 14:21:59.png

Transport选择公共module里面的Transport,URL是最后访问ESB服务的路径,关联服务选择中介服务,服务名称选择前面创建的中介。
  1. 导入数据实体。从数据库资源管理器中将所要访问的数据表直接拖到数据集页面。
    image2017-5-15 14:22:7.png

  2. 显示构件库视图。选择“窗口 > 显示视图 > 其他 > ESB开发 > 构件库”,显示构件视图,如下图所示。
    image2017-5-15 14:22:15.png

  3. 构件详情查看构件库,或者鼠标停留响应构件上查看相关信息。
    image2017-5-15 14:22:22.png

  4. 编排中介。中介实现逻辑:中介解析xml请求,根据请求中的where节点数据查询数据库,然后把查询结果返回。打开中介服务,单击面板上的“服务编排”,从构件库选择添加以下图元。
    image2017-5-15 14:22:31.png

parseWhere图元解析ESB消息体中的where节点,将Where节点内容解析转换成DataObject。

queryEntitiesByTemplate图元根据SDO数据模板查询条件(也就是parseWhere获得查询条件)查询所有记录。

createXMLToITipMessagePayload图元将查询结果DataObject[]数组中的数据转换成ITipMessagePayload消息。
  1. 双击编辑区空白处,查看中介的输入输出参数,如下图所示。
    image2017-5-15 14:22:41.png

  2. 双击parseWhere图元,编辑参数。
    image2017-5-15 14:22:48.png

  3. 双击queryEntitiesByTemplate图元,编辑参数。
    image2017-5-15 14:22:55.png

  4. 双击createXMLToITipMessagePayload图元,编辑参数。
    image2017-5-15 14:23:3.png

  5. 中介编排完成,点击保存。项目如下所示。
    image2017-5-15 14:23:11.png

# 运行测试

  1. 启动APIGateway ESBServer。
    image2017-5-15 14:23:20.png

  2. 服务启动成功如下所示。
    image2017-5-15 14:23:28.png

  3. 启动SOAPUI,新建请求,编辑访问地址(此处访问地址为代理服务设置的URL),设置xml请求如下:(查询数据库中id=1001的字段)
    image2017-5-15 14:23:39.png

  4. 运行结果如下所示。
    image2017-5-15 14:23:48.png

# 消息格式

# XML格式规定

# XML输入格式

根据构件库中的几个操作数据库的类DataObjectUtil、DatabaseUtil、DataContextUtil、DatabaseExt、CriteriaUtil几个类,从中抽取出比较常用的输入参数形成统一的格式。

<?xml version="1.0" encoding="UTF-8"?>
<data name="" nameSqlId="" datasource="">
   <xpath> </xpath>
   <property> </property>
       <index> </index>
       <isCheckEntityType> </isCheckEntityType>
       <parameterObject style = "base/map">
          <row>
          <key> </key>
           <value> </value>
          </row>
       </parameterObject>
   <table name="">
       <th>
          <columnName> </columnName>
       </th>
       <row>
          <column> </column>
       </row>
       ......
   </table>
   <begin> </begin>
       <length> </length>
       <pagecond> </pagecond>
   <where>
       <column><name> </name><value> </value></column>
       .....
   </where>
</data>
节点 说明
data 文档的根节点。name:数据集中所引用的实体全名称nameSqlId :命名SQL的唯一标识datasource :数据源名称
table 用于形成DataObjcet中的数据,由于可能有多个DataObjet数据形成数组这里使用row标记来分隔各个DataObject的数据。row节点有多个column节点,这个节点表示数据表中每一列的数据。
where 形成用于作为条件的DataObjet。一般条件只有一个DataObjcet,所以这里只有一个column节点。
xpath 代表SDO数组或者list所在xpath例如criteria/expr[1]/id
property 代表SDO的属性名。
parameterObject 作为一些基本参数可以是一个HashMap,或者基本类型的值,这个节点在DatabaseExt的countByNamedSql中用到。
index 代表需要插入的位置,这个节点在DataContextUtil的insertObject中用到。
isCheckEntityType 代表缺省false:不检查将要添加的SDO对象实体名称和SDO数组或者list中的已有元素的实体名称是否匹配; true:检查是否匹配。如果是向SDO数组或list添加第一个元素,则自动忽略检查。这个节点在DataContextUtil的appendObject中用到
begin 代表开始记录编号(从0开始)。在DatabaseUtil的queryEntitiesByTemplate中用到。
length 代表length查询记录数量。在DatabaseUtil的queryEntitiesByTemplate中用到。
pagecond 代表分页条件,这个节点在DatabaseExt的commonQueryWithPage中用到,用户设置分页PageCond对象的属性,包括从第几条记录开始(begin)、查询多少条记录(length)、是否统计总记录数(isCount),传入分页查询逻辑。

# XML输出格式

返回的数据主要有两种。

  1. DataObject数组使用table节点来表示。
  2. out节点表示各种基本数据返回值。
<?xml version="1.0" encoding="UTF-8"?>
<data name="">
   <table>
       <row>
          <column><name> </name><value> </value></column>
       </row>
       ......
   </table>
       <out> </out>
</data>

# xml数据示例

# xml数据体示例

<?xml version="1.0" encoding="UTF-8"?>
<data name="com.primeton.esb.project.restaurant.data.newdataset.Eostable">
   <table name="com.primeton.esb.project.restaurant.data.newdataset.Eostable">
       <th>
          <columnName>tableid</columnName>
          <columnName>tablename</columnName>
          <columnName>age</columnName>
          <columnName>sex</columnName>
       </th>
       <row>
          <column>1</column>
          <column>zhangsan</column>
          <column>34</column>
          <column>n</column>
       </row>
       <row>
          <column>2</column>
          <column>lisi</column>
          <column>22</column>
          <column>y</column>
       </row>
       <row>
          <column>3</column>
          <column>wangwu</column>
          <column>45</column>
          <column>n</column>
       </row>
   </table>
</data>

# xml条件示例

<?xml version="1.0" encoding="UTF-8"?>
<data name="com.primeton.esb.project.restaurant.data.newdataset.Eostable">
   <table name="com.primeton.esb.project.restaurant.data.newdataset.Eostable">
       <th>
          <columnName>tableid</columnName>
          <columnName>tablename</columnName>
          <columnName>age</columnName>
          <columnName>sex</columnName>
       </th>
       <row>
          <column>1</column>
          <column>zhangsan</column>
          <column>34</column>
          <column>n</column>
       </row>
   </table>
   <where>
       <column><name>tableid</name><value>5</value></column>
   </where>
</data>

# xmlparameter参数示例

<?xml version="1.0" encoding="UTF-8"?>
<data name="com.primeton.esb.project.restaurant.data.newdataset.Eostable">
   <parameterObject style="map">
          <row>
              <key>tableid</key><value>1</value>
          </row>
          <row>
              <key>tablename</key><value>zhangsan</value>
          </row>
       </parameterObject>
</data>
<?xml version="1.0" encoding="UTF-8"?>
<data name="com.primeton.esb.project.restaurant.data.newdataset.Eostable">
  <parameterObject style="base">
      hello
      </parameterObject>
</data>

# JSON格式规定

# JSON输入格式

{"@name":"","@nameSqlId":"","@datasource":"","xpath":"","property":"","index":"","isCheckEntityType":"","parameterObject":{"@style":"","row":{"key":"","value":""}},"table":{"th":{"columnName":""},"row":{"column":""}},"begin":"","length":"","pagecond":"","where":{"column":{"name":"","value":""}}}

# JSON输出格式

{"@name":"","table":{"th":{"columnName":[]},"row":{"column":[]}},"out":[]}

# json数据示例

# json数据体示例

{"@name":"com.primeton.esb.project.restaurant.data.newdataset.Eostable","table":{"@name":"com.primeton.esb.project.restaurant.data.newdataset.Eostable","th":["tableid","tablename","age","sex"],"row":["1","zhangsan","34","n"]}}
 
 
{"@name":"com.primeton.esb.project.restaurant.data.newdataset.Eostable","table":{"@name":"com.primeton.esb.project.restaurant.data.newdataset.Eostable","th":["tableid","tablename","age","sex"],"row":[["1","zhangsan","22","n"],["2","lisi","23","y"],["3","wangwu","32","n"]]}}

# JSON条件示例

{"@name":"com.primeton.esb.project.restaurant.data.newdataset.Eostable","where":{"column":{"name":"tableid","value":"1"}},"table":{"@name":"com.primeton.esb.project.restaurant.data.newdataset.Eostable","th":["tableid","tablename","age","sex"],"row":["1","ssss","55","n"]}}}

# parameter参数示例

{"@name":"com.primeton.esb.project.restaurant.data.newdataset.Eostable","parameterObject":{"@style":"map","row":{"tableid":"1","tablename":"json"}}}}
 
 
{"@name":"com.primeton.esb.project.restaurant.data.newdataset.Eostable","parameterObject":{"@style":"base","row":"zhangsan"}}}