前言

这里使用ETL [Java代码] 实现

代码中使用axis调用webservice

在ETL提供了 Processor类中直接写业务代码, 而且是每次读取一行数据

jar包准备

将需要用到的jar包提前放到data-integration/lib 或 data-integration/libswt/对应的目录下

我这里为了方便, 将需要的包发到了data-integration/libswt/win64/下

代码示例

这里提供一个简单的示例供参考

import java.net.URL;

import javax.xml.namespace.QName;

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

public boolean processRow(StepMetaInterface smi,StepDataInterface sdi) throws KettleException{

Object[] r = getRow(); // 获取输入, 这里获取流中的一行数据

if (r == null) {

setOutputDone(); // 结束输出, 说明流中没有数据了

return false;

}

// 获取字段, 从r中获取需要的字段

String pk_corp = get(Fields.In, "pk_corp").getString(r);

// 因为我这里需要给WS接口发送的数据是[{"pk_corp":pk_corp},{}...]

JSONArray syncDatas = new JSONArray();

JSONObject syncData = new JSONObject();

syncData.put("pk_corp",pk_corp);

syncDatas.add(syncData);

// 输出数组, 会输出到输出流

Object[] outputRow = createOutputRow(r, data.outputRowMeta.size());

JSONObject result = null;

try {

// 输出日志,也是ETL提供的方法

logBasic("【请求数据】" + syncDatas.toString());

// 调用ws接口

result = syncToNC(syncDatas.toString());

logBasic("【结果】" + result.toString());

} catch (Exception e) {

logError("【捕获异常】" + e.getMessage());

// 这里获取流中的字段并赋值, syncSign和errorLog是我在ETL[字段]中自定义的

get(Fields.Out, "syncSign").setValue( outputRow, '0' );

get(Fields.Out, "errorLog").setValue( outputRow, e.getMessage());

// 输出数据传输到下一步, 下一步接收的数据就会有我在[字段中]添加的字段

putRow(data.outputRowMeta, outputRow);

return true;

}

if( result.containsKey("code") && result.getInt("code") == 0) {

JSONArray resultDatas = result.getJSONArray("data");

JSONObject resultData = resultDatas.getJSONObject(0);

// 输出字段

get(Fields.Out, "syncSign").setValue( outputRow, '1' );

get(Fields.Out, "newNCPK").setValue( outputRow, resultData.getString("ncPK"));

} else {

// 输出字段

get(Fields.Out, "syncSign").setValue( outputRow, '2' );

get(Fields.Out, "errorLog").setValue( outputRow, result.getString("msg"));

}

putRow(data.outputRowMeta, outputRow);

return true;

}

// 调用webservice

private static JSONObject syncToNC(String str) throws Exception {

JSONObject jsonResult = null;

// 接口地址 ( 这里后面不加"?wsdl"

String endpoint = "http://localhost:8090/uapws/service/nc.ift.hs.ydrs.IAddStapplybService";

// targetNamespace

String targetNamespace = "http://ydrs.hs.ift.nc/IAddStapplybService";

// 调用接口中的方法

String operationName = "addStapplyb";

String result = null;

String message = null;

// 接口方法名

Service service = new Service();

Call call = (Call) service.createCall();

// 设置webservice地址

call.setTargetEndpointAddress(new URL(endpoint));

// 发布的方法名

call.setOperationName(new QName(targetNamespace, operationName));

// 设置参数

call.addParameter("string", org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);

// 返回类型

call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);

call.setEncodingStyle("utf-8");

call.setUseSOAPAction(true);

call.setSOAPActionURI(targetNamespace + operationName);

// 设置参数组

Object[] params = new Object[] { str };

// 调用接口

result = (String) call.invoke(params);

// 处理结果

if (result != null && ! "".equals(result)) {

jsonResult = JSONObject.fromObject(result);

}

return jsonResult;

}

ETL中使用Java代码

自定义字段

mysql 调用webservice_ETL第二篇 调用webservice相关推荐

  1. 第二部分 Mysql数据库管理_第二篇 数据库MySql

    <1> 在数据库系统中,SQL语句不区分大小写(建议用大写) .但字符串常量区分大小写.建议命令大写,表名库名小写: <2> SQL语句可单行或多行书写,以";&qu ...

  2. koa2 mysql 中间件_Koa2第二篇:中间件

    第一篇介绍了生成器目录设计.xyzcoding:Koa2第一篇:详解生成器​zhuanlan.zhihu.com 接下来学习Koa2的中间件. Koa2本身只能算一个极简的HTTP服务器,自身不内置中 ...

  3. 二战MySQL数据库【升华篇】

    MYSQL入门系列--第二篇 每篇前言: 1.筛选条件: (1)比较运算符: (2)逻辑运算符: (3)其他操作: 1.排序: 2.限制: 拓展: 3.去重: 4.模糊查询: (like '%') 5 ...

  4. JDBC第二篇 【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】...

    tags: JDBC 1.PreparedStatement对象 PreparedStatement对象继承Statement对象,它比Statement对象更强大,使用起来更简单 Statement ...

  5. mysql c语言教程,C语言调用mysql快速教程(精华篇).pdf

    C语言调用mysql快速教程(精华篇).pdf ,使用 语言操作 之前,先在 里头创建一个数据库,一个表,在表里头添加 1 c mysql mysql 数据如下: 创建数据库,库名为 cusemysq ...

  6. android webview 重定向 多次load问题,解决webview 第二次调用loadUrl页面不刷新的问题...

    一个需求,当点击button按钮时,希望加载另一个url. 以下方法可以成功! @override public void onclick(view view) { webview.loadurl(u ...

  7. java跨库调用存储_存储库仅在第二个调用数据时发送回ViewModel

    问题: My Fragment仅在第二次调用时获取数据(例如,当我旋转屏幕时) . 在我看来,这些代码行是repo类中的问题: public class UserRepository { privat ...

  8. 织梦dedecms调用上一篇下一篇以及样式修改

    不管是仿模板还是设计模板,内容页中肯定需要用到"上一篇,"下一篇"标签调用.不需要记住,但需要能够随时找出来.刚才使用到,顺带记录一下. 第一种,直接调用"上一 ...

  9. MySQL存储过程的创建及调用

    阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的"脚本" 1.创建存储过程 2.调用存储过程 3.存储过程体 4.语句块标签 存储过程的参数 1.in:向过程里 ...

最新文章

  1. android权限控制泄露,Android应用的权限泄露分析
  2. html里面onclick属性是什么,html中onclick事件属性定义与用法
  3. 红茶一杯话Binder
  4. Flutter图像绘制原理深入分析
  5. html + css实现油画商场页面
  6. Win-MASM64汇编语言-PTR运算符
  7. CentOS-6.5-x86_64 最小化安装,已安装包的总数,这些包?
  8. C#版-百度网盘API的实现(二)
  9. 深圳40K都招不到嵌入式开发人员?
  10. paip.编程语言方法重载实现的原理及python,php,js中实现方法重载
  11. 高等数学求导公式复习
  12. HSB”、lab、CMYK、RGB有什么区别
  13. 2022.6.28 JCR最新发布(期刊影响因子)
  14. XTU 1148 三角形
  15. Oracle数据库:子查询、单行子查询,多行子查询,in,any,all语句,子查询的练习案例
  16. 《设计模式入门》 19.命令模式
  17. ubuntu中无法安装vim
  18. 58同城一面【前端】
  19. 手机游戏真的那么好赚钱吗?
  20. nyoj_42 一笔画问题

热门文章

  1. Oracle 归档开启切换和归档日志删除(单实例和RAC)
  2. 【USACO 2.3.4】Cow Tours 牛的旅行
  3. java中如何将string 转化成long
  4. 全心加入web前端开发,向上吧!
  5. ArcGIS API for Silverlight/WPF/Windows Phone/Android 插件下载地址
  6. 音频特征-梅尔频率倒谱系数(MFCC)详解
  7. Java匹马行天下之学编程的起点——走进编程的殿堂
  8. 没有编辑器时,使用echo更换源
  9. PMP学习系列5:PMBOK(5th)第三章-项目管理过程
  10. Python第十课(函数3)