TIPTOP 调用其他系统的webservice案例
本案例主要是解决TIPTOP ERP调用其他系统的接口进行的集成开发,也就是当ERP作为客户端时候,它如何去调用其他系统的Webservice地址进行ERP操作过程与其他系统的数据交互操作;
1、目前常见的是调用方式是通过以下方式进行实现:
1.1. 取得对方的WSDL地址信息;
1.2. 使用工具程序:fglwsdl
1.3 生成*.inc及*.4gl 以便导入程序进行调用程序实现
这种方式的调用,对方的接口新增或者调整,都需要使用fglwsdl工具去重新产生*.inc及*.4gl导入到程序去更新调用,不能实现动态的webservice调用,鉴于这点,我们接下来将介绍另一种TIPTOP GP调用其他系统的Webservice方法:
2、通过java开发作为桥梁(jar包)导入去实现TIPTOP调用其他系统的Webservice集成
记下来我们将重点介绍jar里面程序代码:
整体程序结构:
1、测试类:主要是测试我们的程序调用对方接口是否成功及正常返回的信息
2、服务类:这个也是我们重点的类,主要是撰写调用对方webservice的实现方法
3、组装发送给对方的XML报文模板类:
4、解析对方返回XML的解析方法类:
下面提供实现的具体代码:
package com.erp.service;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
public class ErpService {
/**
* 返回营运中心接口规格
* @param erpinterface 调用的接口名称
* @param body 报文信息
*/
public static String Interface(String erpinterface,String body) {
// url是wsdl地址
String url="http://IP/ws/r/aws_ttsrv2?wsdl";
StringBuilder sb = new StringBuilder("");
sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tip=\"http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay\">");
sb.append("<soapenv:Header/>");
sb.append("<soapenv:Body>");
sb.append("<tip:"+erpinterface+">");
sb.append("<tip:request>");
sb.append(body);
sb.append("</tip:request>");
sb.append("</tip:"+erpinterface+">");
sb.append("</soapenv:Body>");
sb.append("</soapenv:Envelope>");
sb.toString();
String result=HttpSendSoapPost(url,sb.toString());
if (result == null) {
result = "返回失败";
}
String resultbk = result.replaceAll("<", "<").replaceAll(">",">");
return resultbk.toString();
}
public static String HttpSendSoapPost(String strurl,String xml){
HttpURLConnection connection = null;
InputStream is = null;
BufferedReader br = null;
String result = null;// 返回结果字符串
OutputStream out = null;
Date d1 = new Date();
try {
// 创建远程url连接对象
URL url = new URL(strurl);
// 通过远程url连接对象打开一个连接,强转成httpURLConnection类
connection = (HttpURLConnection) url.openConnection();
// 设置连接方式:GET,POST
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "text/xml;charset=utf-8");
//这里必须要写,否则出错
connection.setRequestProperty("SOAPAction", "");
// 设置连接主机服务器的超时时间:15000毫秒
connection.setConnectTimeout(15000);
// 设置读取远程返回的数据时间:60000毫秒
connection.setReadTimeout(60000);
// 发送请求
connection.connect();
out = connection.getOutputStream(); // 获取输出流对象
connection.getOutputStream().write(xml.getBytes("UTF-8")); // 将要提交服务器的SOAP请求字符流写入输出流
out.flush();
out.close();
System.out.println(connection.getResponseCode());
// 通过connection连接,获取输入流
if (connection.getResponseCode() == 200) {
is = connection.getInputStream();
// 封装输入流is,并指定字符集
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
// 存放数据
StringBuffer sbf = new StringBuffer();
String temp = null;
while ((temp = br.readLine()) != null) {
sbf.append(temp);
sbf.append("\r\n");
}
result = sbf.toString();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭资源
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != is) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
connection.disconnect();// 关闭远程连接
}
Date d2 = new Date();
System.out.println(d2.getTime() - d1.getTime());
System.out.println("****** END ********");
return result;
}
}
TIPTOP 4GL 调用jar方法代码:
IMPORT os
IMPORT com
IMPORT JAVA net.sf.json.JSON
IMPORT JAVA net.sf.json.JSONArray
IMPORT JAVA net.sf.json.JSONObject
IMPORT JAVA com.lifesense.common.HttpUtils
IMPORT util
IMPORT xml
IMPORT JAVA com.erp.service.SetEcxml
IMPORT JAVA com.erp.service.BpmService
#IMPORT JAVA com.erp.service.ReadBpmxml
DATABASE ds
MAIN
DEFINE x STRING;
DEFINE y STRING;
DEFINE z STRING;
DEFINE a STRING;
DEFINE jkmc STRING;
DEFINE ecres STRING;
DEFINE ecrepose STRING;
DEFINE ecread STRING;
DEFINE cont INTEGER
DEFINE node om.DomNode
DEFINE nodexml om.DomDocument
DEFINE nl_record om.NodeList
#LET x = '01000146%dkf%20224534%25%001'
#LET EC = SetXml.Set_ima01_xml(x);
LET jkmc = 'getEcnStausSimple'
LET x ='01006076'
LET y ='0300002'
LET z ='0300069'
LET a ='A001'
LET ecres = SetEcxml.Set_bpmec_xml(x,y,z,a); //组装XML报文格式
LET ecrepose = ErpService.Interface(jkmc,ecres); //先jar包里面的方法传入webservice注册接口名称及XML报文内容,并接收接口返回的结果
DISPLAY ecrepose;
END MAIN