前言

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

代码中使用axis调用webservice

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

jar包准备

将需要用到的jar包提前放到data-integration/libdata-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的更多相关文章

  1. ETL第一篇(Kettle Spoon) 初遇

    ETL第一篇(Kettle Spoon) 初遇 ETL第二篇 调用webservice 简介 Kettle 是一款国外开源的 ETL 工具,纯 Java 编写,绿色无需安装,数据抽取高效稳定(数据迁移 ...

  2. C#调用webservice(二)

    第二篇调用webservice,web服务是http://webservice.webxml.com.cn/webservices/DomesticAirline.asmx,航班查询服务 添加web服 ...

  3. [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so

    0:前言 1:本文主要作为丙方android公司的身份来写 2:作者有不对的地方,请指出,谢谢 [第一篇:android利用jni调用第三方库——编写库libhello.so] [第二篇:androi ...

  4. javascript立即调用的函数表达式N种写法(第二篇)

    原文:javascript立即调用的函数表达式N种写法(第二篇) 上一篇博客我谈到将函数声明转换为函数表达式最常见的一种写法是:通过括号()将匿名函数声明转换为函数表达式即(function(){}) ...

  5. android调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so (转载)

    转自:http://blog.csdn.net/jiuyueguang/article/details/9449737 版权声明:本文为博主原创文章,未经博主允许不得转载. 0:前言 1:本文主要作为 ...

  6. 【学习篇:他山之石,把玉攻】jquery实现调用webservice

    1.webservice端 using System; using System.Collections.Generic; using System.Web; using System.Web.Ser ...

  7. webservice第二篇【自定义webservice服务、soa、uddi概念、soap协议】

    自定义webservice服务 我们在上一章节中已经使用wsimport生成本地代理来调用webservice的服务了,其实我们自己写的web应用程序也是可以发布webservice的 我们发布了we ...

  8. php中创建和调用webservice接口示例

    php中创建和调用webservice接口示例   这篇文章主要介绍了php中创建和调用webservice接口示例,包括webservice基本知识.webservice服务端例子.webservi ...

  9. Axis2 webservice 之使用java调用webservice

    在上一篇中写了一个简单了webservice,实现了一个sayHello功能.那么webservice写好之后我们如何使用Java程序来调用webservice呢? 一.java调用的webservi ...

随机推荐

  1. iterrows() 函数对dataframe进行遍历

    for循环遍历dataframe,返回有一个元祖类型,第一个是行的索引,第二个是series,是每一行的内容.

  2. Javascript对象的几种创建方式

    (1) 工厂模式 Function(){ Var child = new object() Child.name = “欲泪成雪” Child.age=”20” Return child; } Var ...

  3. loadrunner代理录制

    loadrunner在使用过程中会受到浏览器版本的限制,有些web服务在低版本的浏览器上不能兼容,可通过代理录制的方式解决此问题. 注: (1)本文中的ip仅作示例,要按实际测试情况填写ip. (2) ...

  4. grunt 常用插件

    grunt-contrib-uglify:代码压缩 grunt-contrib-jshint:检查js拼写错误 csslint:检查css语法错误

  5. 【vim】插入模式与常用编辑操作

    vim不像很多编辑器那样一启动便可以直接编辑文本,需要在普通模式按下i, a等键才会进入插入模式进行文本编辑. 如何进入插入模式 以下的命令都会让vim从普通模式切换到插入模式,但命令执行后的字符插入 ...

  6. Postgres中的SpinLock锁

    我们知道,在数据库中为了并发控制,少不了要使用各种各样的锁(lock).PostgreSQL中也不例外. 在PostgreSQL中有三种级别的锁,他们的关系如下: |上层 RegularLock | ...

  7. string、char *的转换

    string转char* 主要有三种方法可以将str转换为char*类型,分别是:data(); c_str(); copy(); data()方法 string str = "hello& ...

  8. Sequential Minimal Optimization(SMO,序列最小优化算法)初探

    什么是SVM SVM是Support Vector Machine(支持向量机)的英文缩写,是上世纪九十年代兴起的一种机器学习算法,在目前神经网络大行其道的情况下依然保持着生命力.有人说现在是神经网络 ...

  9. Access network

    1       State transfering A•Mobility:开机-搜寻PLMN/CELL来发现自己在网络中的位置•Attach request•Auth request•Auth res ...

  10. 认识CSS3新增选择器和样式

    前端之HTML5,CSS3(二) CSS3新增选择器和样式 CSS3新增选择器 结构伪类选择器 :first-child:选取父元素中的第一个子元素的指定选择器 :last-child:选取父元素中的 ...