ETL第二篇 调用webservice
前言
这里使用ETL [Java代码] 实现
代码中使用axis调用webservice
在ETL提供了 Processor类中直接写业务代码, 而且是每次读取一行数据

jar包准备
将需要用到的jar包提前放到data-integration/lib 或 data-integration/libswt/对应的目录下
我这里为了方便, 将需要的包发到了data-integration/libswt/win64/下

用到的相关包: 链接: https://pan.baidu.com/s/1vpUppn-57sc9z3tFGux3uA 密码: 3phi
代码示例
这里提供一个简单的示例供参考
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代码

自定义字段

ETL第二篇 调用webservice的更多相关文章
- ETL第一篇(Kettle Spoon) 初遇
ETL第一篇(Kettle Spoon) 初遇 ETL第二篇 调用webservice 简介 Kettle 是一款国外开源的 ETL 工具,纯 Java 编写,绿色无需安装,数据抽取高效稳定(数据迁移 ...
- C#调用webservice(二)
第二篇调用webservice,web服务是http://webservice.webxml.com.cn/webservices/DomesticAirline.asmx,航班查询服务 添加web服 ...
- [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so
0:前言 1:本文主要作为丙方android公司的身份来写 2:作者有不对的地方,请指出,谢谢 [第一篇:android利用jni调用第三方库——编写库libhello.so] [第二篇:androi ...
- javascript立即调用的函数表达式N种写法(第二篇)
原文:javascript立即调用的函数表达式N种写法(第二篇) 上一篇博客我谈到将函数声明转换为函数表达式最常见的一种写法是:通过括号()将匿名函数声明转换为函数表达式即(function(){}) ...
- android调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so (转载)
转自:http://blog.csdn.net/jiuyueguang/article/details/9449737 版权声明:本文为博主原创文章,未经博主允许不得转载. 0:前言 1:本文主要作为 ...
- 【学习篇:他山之石,把玉攻】jquery实现调用webservice
1.webservice端 using System; using System.Collections.Generic; using System.Web; using System.Web.Ser ...
- webservice第二篇【自定义webservice服务、soa、uddi概念、soap协议】
自定义webservice服务 我们在上一章节中已经使用wsimport生成本地代理来调用webservice的服务了,其实我们自己写的web应用程序也是可以发布webservice的 我们发布了we ...
- php中创建和调用webservice接口示例
php中创建和调用webservice接口示例 这篇文章主要介绍了php中创建和调用webservice接口示例,包括webservice基本知识.webservice服务端例子.webservi ...
- Axis2 webservice 之使用java调用webservice
在上一篇中写了一个简单了webservice,实现了一个sayHello功能.那么webservice写好之后我们如何使用Java程序来调用webservice呢? 一.java调用的webservi ...
随机推荐
- luncene 查询字符串的解析-QueryParser类
搜索流程中的第二步就是构建一个Query.下面就来介绍Query及其构建. 当用户输入一个关键字,搜索引擎接收到后,并不是立刻就将它放入后台开始进行关键字的检索,而应当首先对这个关键字进行一定的分析和 ...
- Jmeter Plugins----- Transactions per Second 配置项
Jmeter Plugins---version 0.5.5 官方解释: Transactions per Second since 0.3.0 This graph shows the number ...
- (转)Javascript模块化编程(三):Require.js的用法
转自 ruanyifeng 系列目录: Javascript模块化编程(一):模块的写法 Javascript模块化编程(二):AMD规范 Javascript模块化编程(三):Require.js的 ...
- C语言奇淫技巧,字符串的三种表示方法,不会用不是合格的程序员
1.在C语言中,是将字符串作为字符数组来处理的,字符串是逐个存放到数组元素中的 例如用一个一维的字符数组存放字符串"I am a boy.",如下代码: char c[12] = ...
- iOS开发~制作同时支持armv7,armv7s,arm64,i386,x86_64的静态库.a以及 FrameWork 的创建
armv7,armv7s,arm64,i386,x86_64 详解 一.概要 平时项目开发中,可能使用第三方提供的静态库.a,如果.a提供方技术不成熟,使用的时候就会出现问题,例如: 在真机上编译报错 ...
- c/c++ int,float,short 大小端转换函数
unsigned int(uint32_t)大小端转换函数 unsigned int BLEndianUint32(unsigned int value) { return ((value & ...
- Servlet+JSP+JDBC设计实现图书系统——管理功能实现
写在前面,之前由于种种原因博客好久没有更新.最近打算重拾JavaWeb,所以从头开始,先用servlet+jdbc+bootstrap最基础的代码实现一个图书系统.考虑有管理员端+用户端,项目完成后会 ...
- Visual Studio 2019 Key
Visual Studio 2019 Enterprise:BF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 Professional:NYWVH-HT ...
- MySQL 创建schema
create schema zzz default character set utf8 collate utf8_general_ci;--创建数据库 grant select,insert,upd ...
- gradle 打包 jar (一波三折)
第一次尝试,打包成功,运行失败 build.gradle 打包 jar { baseName 'testJar' from { //添加依懒到打包文件 //configurations.compile ...