浙商ESB调用规范

ESB开发环境地址:

http://10.15.22.120:8018

ESB要求各系统提供的传输报文规范


客户端


服务端


节点名


中文意思


进一步说明


请求


SERVICENAME


ESB服务名


请求


FLOWID


ESB流ID


UUID.randomUUID();即可生成


请求


SERVICE_NO


ESB服务号


请求


USERID


ESB用户编号


请求


PASSWORD


ESB密码


返回


ERROR_CODE


ESB错误代码


0000在ESB代表成功


返回


ERROR_MESSAGE


ESB错误信息

ESB各系统测试环境系统名及用户帐号密码

各系统测试环境 Head协议头系统名 用户帐号 开发环境用户密码 生产环境预设密码
  appName <USERID> <PASSWORD> <PASSWORD>
电销 telesales 50000001 123456 预设为: 123456789
网销 echannel 50000002 123456 预设为: 123456789
ecargo ecargo 50000003 123456 预设为: 123456789
代理平台 platformproxy 50000004 123456 预设为: 123456789
ilog ilog 50000005 123456 预设为: 123456789
微信 weixin 50000009 123456 预设为: 123456789
销管 salemanage 50000010 123456 预设为: 123456789
联合保险经纪 unionpolicy 50000011 123456 预设为: 123456789
山东意外险风险预警系统 sdaccident 50000012 123456 预设为: 123456789
支付平台 paystation 50000013 123456 预设为: 123456789
道客 dk 60000001   预设为: 123456789
汽车超人 carsuper 60000002 123456 预设为: 123456789
移动查勘 Movesurvey 50000014 123456 预设为: 123456789
移动查勘 movesurvey 60000003 123456 预设为: 123456789
v7车承保 policyvhl 70000001 123456 预设为: 123456789
v7非车承保 novhlpolicy 70000002 123456 预设为: 123456789
v7车理赔 vhlclaim 70000003 123456 预设为: 123456789
v7收付系统 finarp 70000004 123456 预设为: 123456789
接口系统 thirdinterface 80808080 123456 预设为: 123456789
营销系统 marketing 70000005 123456 预设为: 123456789
核心系统 v5core 70000006 123456 预设为: 123456789

客户端请求报文样例:

<?xml version="1.0" encoding="utf-8"?>

<PACKET>
  <HEAD>
    <SERVICENAME>policyquery</SERVICENAME>
    <SYSNAME>电销</SYSNAME>
    <USERCDE>1006751</USERCDE>
    <DPTCDE>37</DPTCDE>
    <SYSCODE>02</SYSCODE>
    <FLOWID>68123ff5-eb74-4f67-b078-52bf437d4650</FLOWID>
    <SERVICE_NO>0101020101</SERVICE_NO>
    <BUSFLOWID/>
    <REQUEST_TYPE>0355-01</REQUEST_TYPE>
    <DATA>A</DATA>
    <TYPE>I</TYPE>
    <USERID>50000001</USERID>
    <PASSWORD>123456</PASSWORD>
  </HEAD>
  <BODY>
    <VHL>
      <VEHICLE_CATEGORY>345039001</VEHICLE_CATEGORY>
      <EXTENDED_AREA_RADIUS/>
      <CAR_MARK>*</CAR_MARK>
      <USE_TYPE>345038001</USE_TYPE>
      <CHK_CDE/>
    </VHL>
    <BASE>
      <DPT_CDE>33</DPT_CDE>
      <INSURED_NAME>A君</INSURED_NAME>
    </BASE>
  </BODY>
</PACKET>

服务端返回报文样例:

<PACKET>
                   <HEAD>
                            <ERROR_CODE>0000</ERROR_CODE>
                            <ERROR_MESSAGE>【保监平台】成功</ERROR_MESSAGE>
                            <REQUEST_TYPE>0355-01</REQUEST_TYPE>
                            <RESPONSE_CODE>1</RESPONSE_CODE>
                   </HEAD>
                   <BODY>
                            <BASE>
                                     <CLAIM_SIZE>0</CLAIM_SIZE>
                                     <LAST_EFFECTIVE_DATE></LAST_EFFECTIVE_DATE>
                                     <LAST_EXPIRE_DATE></LAST_EXPIRE_DATE>
                                     <LAST_PRODUCER_CODE></LAST_PRODUCER_CODE>
                            </BASE>
                            <CAR>
                                     <BRAND>比亚迪</BRAND>
                                     <BRAND_CODE>BYD</BRAND_CODE>
                                     <CAR_NAME>西安奥拓QCJ7080B 实用款</CAR_NAME>
                                     <CATEGORY_CODE>7</CATEGORY_CODE>
                                     <CATEGORY_NAME>轿车</CATEGORY_NAME>
                                     <CONFIG_TYPE>UA</CONFIG_TYPE>
                                     <DEPT_CODE>0</DEPT_CODE>
                                     <DEPT_NAME>国产</DEPT_NAME>
                                     <MODEL_CODE>BBYDXBUA0003</MODEL_CODE>
                                     <MODEL_ID_CODE>BBYDXBUA000370A1</MODEL_ID_CODE>
                                     <NOTICE_TYPE>QCJ7080B</NOTICE_TYPE>
                                     <SERIES>西安奥拓</SERIES>
                                     <SERIES_CODE>BYDXB</SERIES_CODE>
                                     <TRADE_CODE>M0080</TRADE_CODE>
                                     <TRADE_NAME>比亚迪汽车有限公司</TRADE_NAME>
                            </CAR>
                            <VHL>
                                     <QUERY_CDE>V0101ZSIC340016001458127415676</QUERY_CDE>
                            </VHL>
                   </BODY>
</PACKET>

但有的强势第三方系统的报文不可能按我们的要求来,所以也有可能返回时是不规范的.

如支付宝/道客/增值税管理 ... 等系统,将可能直接返回不带<HEAD>和<BODY>体的报文:

<SOAP-ENV>
  <resultHeader>
    <resultFLag>N</resultFLag>
    <resultMsg>出错信息</resultMsg>
    <recordTotal>记录总数</recordTotal>
    <pageTotal>总页数</pageTotal>
    <pageSize>页大小</pageSize>
    <currentPage>请求页</currentPage>
  </resultHeader>
</SOAP-ENV>

调用java样板http post代码(纯java,不依赖第三方jar包)

package king.client.delete;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
/**
 * http post发送工具
 * @author King
 *
 */
public class HttpTool {
    public static void main(String[] args) throws Exception {
        String requestUrl = "http://10.15.22.120:8866/4200000001/QueryInputBillAuthenInfo/V1";
//        String reqUrl = "http://10.15.22.120:8866/4200000001/CancelInputBillAuthenInfo/V1";
        String requestData = readStringFromFile("C:\\Users\\King\\Desktop\\connectANSI.xml","GBK");//有乱码,请修改指定编码
        String returnData=sendRequestData("telesales",requestData, requestUrl, 3000,3000);
    }

    /**
     * 发送报文
     *
     * @param appName 应用系统英文名
     * @param requestData 请求报文
     * @param urlStr    请求地址
     * @param connectionTimeout 链接超时时间  1000代表 1秒
     * @param readTimeout 读取超时时间 1000代表1秒
     * @return
     * @throws IOException
     * @author King
     */
    private static String sendRequestData(String appName,String requestData, String urlStr, int connectionTimeout,int readTimeout) throws IOException{
        URL url = null;
        HttpURLConnection conn = null;
        ByteArrayOutputStream byteOut = null;
        BufferedReader readInfo = null;
        StringBuffer strBuilder=new StringBuffer();
        OutputStream out = null;
        try {
            System.out.println("请求时间:【"+new Date()+"】");
            System.out.println("请求地址:【"+urlStr+"】");
            System.out.println("请求报文:【"+requestData+"】");
            url = new URL(urlStr);
            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("SOAPAction", "\"\"");
            conn.setRequestProperty("Accept", "application/soap+xml, application/dime, multipart/related, text/*");
            conn.setRequestProperty("content-type", "text/xml;charset=GBK");
            conn.setRequestProperty("User-Agent", "Axis/1.4");
            conn.setRequestProperty("Cache-Control", "no-cache");
            conn.setRequestProperty("appName", "appName");//各系统需要设置应用系统名 appName,如电销为telesales
            conn.setUseCaches(false); //忽略缓存
            conn.setDoOutput(true); //使用 URL 连接进行输出
            conn.setDoInput(true); //使用 URL 连接进行输入
            conn.setConnectTimeout(connectionTimeout);//链接超时
            conn.setReadTimeout(readTimeout);//读取超时
            conn.connect();//建立链接
            byteOut = new ByteArrayOutputStream();
            byteOut.write(requestData.getBytes("GBK"));//以指定编码发送,如果有乱码,修改之
            byte[] buf = byteOut.toByteArray();
            out = conn.getOutputStream();
            out.write(buf);
            out.flush();
            if (HttpURLConnection.HTTP_OK == conn.getResponseCode()) {//正确返回
                readInfo = new BufferedReader(new java.io.InputStreamReader(conn.getInputStream(),"GBK"));//以指定编码读取返回信息,如果有乱码,修改之
                String line = null;
                while ((line = readInfo.readLine()) != null) {
                    strBuilder.append(line);
                }
            } else {//没有正确返回
                throw new IOException("url请求出现问题,返回编码:" + conn.getResponseCode());
            }
            System.out.println("返回时间:【"+new Date()+"】");
            System.out.println("返回报文:【"+strBuilder.toString()+"】");
        } catch (UnsupportedEncodingException e) {
            throw e;
        } catch (MalformedURLException e) {
            throw e;
        } catch (IOException e) {
            throw e;
        }finally {
            try{
                if (readInfo != null) {
                    readInfo.close();
                }
                if (byteOut != null) {
                    byteOut.close();
                }
                if (out != null) {
                    out.close();
                }
                if (conn != null) {
                    conn.disconnect();
                }
            }catch(Exception e){
                System.out.println("关闭链接出错!"+e.getMessage());
            }

        }
        return strBuilder.toString();
    }

    /**
     *
     * @param filePath 文件绝对路径
     * @param encoding 读取文件的编码
     * @return
     * @author King
     * @throws Exception
     */
    public static String readStringFromFile(String filePath,String encoding) {
        File file = new File(filePath);
        System.out.println("文件 "+filePath+"存在与否?: "+ file.exists()+"\n");
        String tempLine = null;
        String retStr = "";
        InputStreamReader isr = null;//way1:
//        FileReader fr = null;//way2
        StringBuilder sb = new StringBuilder();
        try {
            if(file.exists()){
                isr = new InputStreamReader(new FileInputStream(file),encoding);//way1:
//                fr = new FileReader(file);//way2
                BufferedReader br = new BufferedReader(isr);//way1:
//                BufferedReader br =  new BufferedReader(fr);;//way2:
                tempLine = br.readLine();
                while( tempLine != null ){
                    sb.append(tempLine);
                    tempLine = br.readLine();
                }
                retStr = sb.toString();
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try{
                if(isr!=null)
                    isr.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        System.out.println("读到的文件内容如下:");
        System.out.println(retStr+"\n");
        return retStr;
    }
}

打印结果如下:

文件 C:\Users\King\Desktop\connectANSI.xml存在与否?: true

读到的文件内容如下:
<?xml version="1.0" encoding="UTF-8"?><PACKET>         <HEAD>                   <SERVICENAME>policyquery</SERVICENAME>                   <SYSNAME>电销</SYSNAME>                   <USERCDE>1006751</USERCDE>                   <DPTCDE>37</DPTCDE>                   <SYSCODE>02</SYSCODE>                   <FLOWID>68123ff5-eb74-4f67-b078-52bf437d4650</FLOWID>                   <SERVICE_NO>0101020101</SERVICE_NO>                   <BUSFLOWID></BUSFLOWID>                   <REQUEST_TYPE>0355-01</REQUEST_TYPE>                  <DATA>A</DATA>                   <TYPE>I</TYPE>                   <USERID>50000001</USERID>        <PASSWORD>123456</PASSWORD>         </HEAD>         <BODY>         <VHL>                   <VEHICLE_CATEGORY>345039001</VEHICLE_CATEGORY>                   <EXTENDED_AREA_RADIUS></EXTENDED_AREA_RADIUS>                   <CAR_MARK>*</CAR_MARK>                   <USE_TYPE>345038001</USE_TYPE>                   <CHK_CDE></CHK_CDE>         </VHL>         <BASE>                   <DPT_CDE>33</DPT_CDE>                   <INSURED_NAME>A君</INSURED_NAME>         </BASE></PACKET>

请求时间:【Tue Jun 07 23:34:37 CST 2016】
请求地址:【http://10.15.22.120:8866/4200000001/QueryInputBillAuthenInfo/V1】
请求报文:【<?xml version="1.0" encoding="UTF-8"?><PACKET>         <HEAD>                   <SERVICENAME>policyquery</SERVICENAME>                   <SYSNAME>电销</SYSNAME>                   <USERCDE>1006751</USERCDE>                   <DPTCDE>37</DPTCDE>                   <SYSCODE>02</SYSCODE>                   <FLOWID>68123ff5-eb74-4f67-b078-52bf437d4650</FLOWID>                   <SERVICE_NO>0101020101</SERVICE_NO>                   <BUSFLOWID></BUSFLOWID>                   <REQUEST_TYPE>0355-01</REQUEST_TYPE>                  <DATA>A</DATA>                   <TYPE>I</TYPE>                   <USERID>50000001</USERID>        <PASSWORD>123456</PASSWORD>         </HEAD>         <BODY>         <VHL>                   <VEHICLE_CATEGORY>345039001</VEHICLE_CATEGORY>                   <EXTENDED_AREA_RADIUS></EXTENDED_AREA_RADIUS>                   <CAR_MARK>*</CAR_MARK>                   <USE_TYPE>345038001</USE_TYPE>                   <CHK_CDE></CHK_CDE>         </VHL>         <BASE>                   <DPT_CDE>33</DPT_CDE>                   <INSURED_NAME>A君</INSURED_NAME>         </BASE></PACKET>】
返回时间:【Tue Jun 07 23:34:38 CST 2016】
返回报文:【<SOAP-ENV><resultHeader><resultFLag>N</resultFLag><resultMsg>出错信息</resultMsg><recordTotal>记录总数</recordTotal><pageTotal>总页数</pageTotal><pageSize>页大小</pageSize><currentPage>请求页</currentPage></resultHeader></SOAP-ENV>】

时间: 2024-09-30 07:01:54

浙商ESB调用规范的相关文章

C++学习之虚函数表及调用规范

在支付工具想做社交,即时通讯工具想做app市场,英语字典想做新闻社交的今天,创造这些怪象的公司要求程序员懂得更多几乎是理所当然的,毕竟现在大家什么都想做.这不,正值招聘季,实验室的几位学长也是一直在讨论各种问题,发现对于C++语言而言,问的最多的还是虚函数表和STL. STL的考点至少是实用的,哪怕要求你读过源码,也并不过分,毕竟知根知底才能更好地应用.但要求程序员掌握对象模型着实拎不清,因为这几乎用不到,远没有在设计模式上投入时间实在,或许它们最希望的是拿批发价招语言专家... 我已经近2年没

x64参数调用规范

http://kelvinh.github.io/blog/2013/08/05/windows-x64-calling-conventions/ 假设传递的参数的个数为n,那么 当n为奇数时,调用者需要分配0x20+8+(n-1)*8的栈空间 其中,0x20=32,用来保存调用者本地变量RCX, RDX, R8, R9,8字节用来保持栈地址16字节对齐,(n-1)*8大小的空间用来保存参数,按照从右向左的顺序,虽然低0x20大小的空间不使用,这部分参数通过RCX, RDX, R8, R9传递,

架构设计:系统间通信(35)——被神化的ESB(下)

(接上文:<架构设计:系统间通信(34)--被神化的ESB(上)>) 2-4.ESB与版本控制 企业中的系统集成过程,存在很多非技术因素引起的变化.可能出现的情况是,某个一直能够正常使用的调用功能A,在某一天突然就不能使用了.技术团队和业务团队排查了许久才发现功能A中对某个业务系统的调用接口已经被私自更改(可能只是多传递了一个参数.或者减少了一个参数的传递).这种情况在现实中经常出现,可能是业务部门出于私利对外屏蔽了这个接口,也可能是技术人员在改动接口时,忘记了这个接口还有外部系统进行使用.

WebService服务调用方法介绍

1 背景概述 由于在项目中需要多次调用webservice服务,本文主要总结了一下java调用WebService常见的6种方式,即:四种框架的五种调用方法以及使用AEAI ESB进行调用的方法. 2 预期读者 数通畅联内部员工 广大计算机爱好者 3 名词解释 Web Service也叫XML Web Service: WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是通过SOAP在Web上提供的软件服务,使用WSDL

JCA——一个名不见经传却重要的JavaEE规范

JCA(Java EE Connector Architecture)规范可以说是JavaEE规范集合里最"默默无闻"的,在JavaEE1.3规范发布时就加入了,比现在重要成员JPA, CDI等都早了很多.从应用开发角度来看,开发一个很普通的Web应用程序,只有几个页面,使用Servlet就可以完成,用JDBC API保存信息到数据库中,部署这个应用到JavaEE应用服务器中时,就会用到JCA技术.这个很简单的应用程序只用了庞大的JavaEE规范集30多项中的Servlet和JCA两项

vc调用delphi的dll 参数传递 报错

可能原因: 调用方式约定不一致. 函数调用约定如下: 1. __cdecl:C 和 C++ 程序的缺省调用规范. 2. __stdcall:标准调用约定(即WINAPI调用约定),也就是pascal调用约定. 如果VC调用时,调用的约定方式和delphi的dll中函数约定方式不一致,就会出问题.

Entity Framework 6 Recipes 2nd Edition(11-9)译 -&gt; 在LINQ中使用规范函数

11-9. 在LINQ中使用规范函数 问题 想在一个LINQ查询中使用规范函数 解决方案 假设我们已经有一个影片租赁(MovieRental )实体,它保存某个影片什么时候租出及还回来,以及滞纳金等,如Figure 11-9. 所示: Figure 11-9. The MovieRental entity that has the dates for a rental period along with any late fees 我们想取得所有租期超过10天的影片 如何创建和使用查询,如Lis

java mysql自定义函数UDF之调用c函数

正如sqlite可以定义自定义函数,它是通过API定义c函数的,不像其他,如这里的mysql.sqlite提供原生接口就可以方便的调用其他语言的方法,同样的mysql也支持调用其它语言的方法. google "mysql call c function"发现一片文章 MySQL User Defined Functions  This tutorial explains what an User Defined Function (UDF) is, what it does and w

C#调用windows API的一些方法

使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2.  调用 COM 对象上的接口方法 我主要讨论从dll中导出函数,基本步骤如下: 1.使用 C# 关键字 static 和 extern 声明方法. 2.将 DllImport 属性附加到该方法.DllImport 属性允许您指定包含该方法的 DLL 的名称. 3.如果需要,为方法的参数和返回值指定