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 ...
随机推荐
- 老调重弹-access注入过主机卫
本文作者:i春秋签约作家——非主流 大家好,我是来自农村的非主流,今天就给在座的各位表演个绝活. 首先打开服务器上安装了主机卫士的网站. 尝试在变量id的值后面插入万恶的单引号,根据报错,我们可以分析 ...
- 基于openresty配置https访问
安装方法:http://openresty.org/cn/linux-packages.html 1. openssl的版本信息 [root@localhost conf]# openssl vers ...
- javascript举例介绍事件委托的典型使用场景
在了解什么是DOM事件以及给DOM事件绑定监听器的几种方法后,我们来谈谈事件委托. 1. e.target 和 e.currentTarget 当我们给目标元素target 绑定一个事件监听器targ ...
- shell-005:备份。
# 这个案例感觉有点绕,如果是本地机器备份完全没必要.下面带颜色的写法值得我们借鉴,所以还是做下笔记吧 #!/bin/bash # 找出//目录下所有txt结尾的文件,且形成一个列表清单的文件 fi ...
- js 的概念和声明-js 的变量-js 的运算符和逻辑结构-js 的数组
js 的概念和声明Js的概念和声明:问题:在网页的发展历程中,发现网页不能对用户的数据进行自动校验,和提供一些特效造成用户体验极差解决:使用JavaScript作用:可以让网页和用户之间进行直接简单的 ...
- npm install 报错: WARN checkPermissions Missing write access to 解决方案
经过各种百度搜索,发现这个问题的出现并不是管理员权限的问题,而是之前安装失败了,这个文件已经存在了,再次安装无法覆盖写入的问题. 解决方法: 1.找到node的全局安装路径,一般在nodejs文件夹的 ...
- 自定义 mapper
1. 定义一个接口 public interface ItemMapper { List<Item> getItemList(); } 2. 编写 xml 文件 , 将sql 语句填 ...
- win10 下springcloud打包docker镜像部署。
1:建一个最简单的springcloud应用. 2:在根目录下新建dockerfile,文件如下: FROM openjdk:8-jdk-alpine VOLUME /tmp ARG JAR_FILE ...
- (转)如何在CentOS / RHEL 7上安装Elasticsearch,Logstash和Kibana(ELK)
原文:https://www.howtoing.com/install-elasticsearch-logstash-and-kibana-elk-stack-on-centos-rhel-7 如果你 ...
- android studio2.3.3 模拟器 Jni函数调用C++对象,lldb调试this指针和相关变量显示无效的原因
android studio2.3.3 的版本中 Jni函数调用C++对象,对象调用相关的成员函数, lldb调试,变量跟踪窗口,this指针和相关变量显示无效的原因,但这些参数实际是有效的,只是de ...