zoukankan      html  css  js  c++  java
  • Talend Restful

    目的:用Talend实现用Restful形式发布webservice

    实现:该示例实现了三个功能:通过查询获取数据;通过调用存储过程获取数据;新增数据。

    总体图:

    各个组件的主要配置如下:

    tRESTRequest_1是Job的主入口,我们这里实现了三个方法,使用不同形式传输。

    另外注意的是,因为我们是打算部署到karaf container中,所以REST的Endpoint相同的不能部署在一起,会有冲突,所以我们一般建议在port后面追加模块或系统的标示一起做endpoint,这样就不用耗费很多port来部署了!

    下面分三个方法来列出Sample,

    getUser:使用GET的传输方法,只传输一个id,URI Pattern:"/{id}/",调用示例就是http://localhost:8088/user/1/

    获取参数并映射

    使用tMSSqlRow组件来实现传参查询 

    通过tParseRecordSet组件将结果集转换为Set集合 

    如果有记录,将记录打包成要输出的XML

    然后通过组件返回结果!

    另外,如果查询没有结果的话,加入判断,并包装返回的xml返回!

    注意:在这个Job中,因为我有两个判断,虽然是从不同节点if的,但可能是由于组流程在一个main job中,所以如果只用(Integer)globalMap.get("tParseRecordSet_2_NB_LINE") == 0一个条件判断的话,在运行是,另外一个if也会执行,所以在此加上了URI的一些判断!

    这样getUser基本完成!

    其他两个操作基本类似,在此就不累述!不过在此对调用存储过程的稍加截图说明一下!

    使用tMSSqlSp组件,Parameters,一个是输入参数,一个是输出记录集RECORD SET 

    在tParseRecordSet时选择输出记录集RECORD SET的users,并添加需要输出的栏位!

    注意事项:

    以前没留意,近期发现一个问题,就是tRESTRequest的REST Endpoint好像不能使用变量,例如不能使用context.endpointurl,而只能直接输入字符串"http://localhost:8088/user"之类的,具体为什么会这样,没具体查找原因!

    但是如果用了类似变量context.endpointurl的话,在designer里面测试是没问题的,但是部署到container中后就有问题,虽然状态显示是Active,但是访问不了,可能会出现如下提示:

  • 相关阅读:
    20200116
    20200115
    20191214数组之四:数字不相同的完全平方数(关于数位上数字判断与sprintf)
    结构体与C++sort()函数的用法
    字符串常用函数
    sscanf用法
    螺旋矩阵
    模m的k次根
    梅森素数与完全数
    bit_reverse_swap
  • 原文地址:https://www.cnblogs.com/angusyang/p/6667600.html
Copyright © 2011-2022 走看看