银行接口Socket传输XML

银行接口Socket传输XML

因为项目需要,行方不提供http接口,只提供socket接口,并且用XML格式传输(并且没有联调,所以本地创建server端和client端进行本地调试)。

请求报文:

    <?xml version="1.0" encoding="UTF-8"?>
    <packet>
        <SYS_ID>ZFB2C</SYS_ID>
        <TRANS_CODE>TOKEN</ TRANS_CODE>
    </packet>

响应报文:

    <?xml version="1.0" encoding="UTF-8"?>
    <packet>
        <SYS_ID>ZFB2C</SYS_ID>
        <TRANS_CODE>TOKEN</ TRANS_CODE>
        < ACCESS_TOKEN >skdlajtfoiewjflkdsajflkdsajlkfdsajfljdsalkf</ ACCESS_TOKEN >
        <RET_CODE>0000</ RET_CODE>
        <RET_RMK>token值</RET_RMK>
    </packet>

server端:

    /**
    * Socket通信XML
    * @author earthxuan
    *
    */
    public class SocketServerTest {
        public static void main(String[] args) throws IOException, ParserConfigurationException, TransformerException {
	    System.out.println("server.......");
        ServerSocket serverSocket=null;
        Socket sk=null;
     serverSocket=new ServerSocket(9999);
        while (true){
    	    //阻塞获取请求
            sk=serverSocket.accept();
            InputStream inputStream=sk.getInputStream();
            //读客户端传来的数据
            DataInputStream in = new DataInputStream(inputStream);
            String data = in.readUTF();
//			System.out.println("接收到的数据:" + data);
            //对客户端信息的校验,或者做其他的过滤
            if(data.length()<5){
        	//数据长度小于5,则不需要解析客户端的数据,直接回传报文,RET_CODE为1111
            OutputStream outputStream=sk.getOutputStream();
            DataOutputStream dataOutputStream=new DataOutputStream(outputStream);

            DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder=factory.newDocumentBuilder();
            Document document=documentBuilder.newDocument();
            Element parent=document.createElement("packet");
            document.appendChild(parent);

            Element SYS_ID=document.createElement("SYS_ID");
            SYS_ID.setTextContent("ZFB2C");
//          SYS_ID.appendChild(document.createTextNode("ZFB2C"));
            Element TRANS_CODE=document.createElement("TRANS_CODE");
            TRANS_CODE.setTextContent("TOKEN");
//          TRANS_CODE.appendChild(document.createTextNode("TOKEN"));
            Element ACCESS_TOKEN=document.createElement("ACCESS_TOKEN");
//          ACCESS_TOKEN.appendChild(document.createTextNode("skdlajtfoiewjflkdsajflkdsajlkfdsajfljdsalkf"));
            ACCESS_TOKEN.setTextContent("skdlajtfoiewjflkdsajflkdsajlkfdsajfljdsalkf");
            Element RET_CODE=document.createElement("RET_CODE");
//          RET_CODE.appendChild(document.createTextNode("1111"));
            RET_CODE.setTextContent("1111");
            Element RET_RMK=document.createElement("RET_RMK");
//          RET_RMK.appendChild(document.createTextNode("交易成功"));
            RET_RMK.setTextContent("交易成功");
            parent.appendChild(SYS_ID);
            parent.appendChild(TRANS_CODE);
            parent.appendChild(ACCESS_TOKEN);
            parent.appendChild(RET_CODE);
            parent.appendChild(RET_RMK);
            
            //xml转换,转为字符串
            TransformerFactory transformerFactory=TransformerFactory.newInstance();
            Transformer transformer=transformerFactory.newTransformer();

            DOMSource source=new DOMSource(document);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            transformer.transform(source, new StreamResult(bos));
            String result=bos.toString();

            //写到客户端
            dataOutputStream.writeUTF(result);
            //把dataOutputStream数据flush掉,全部传到客户端
            dataOutputStream.flush();
            //关闭流
            dataOutputStream.close();
            outputStream.close();
        }else{
        	//解析客户端的数据,回传报文,RET_CODE为0000
        	DOM(data);
            OutputStream outputStream=sk.getOutputStream();
            DataOutputStream dataOutputStream=new DataOutputStream(outputStream);

            DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder=factory.newDocumentBuilder();
            Document document=documentBuilder.newDocument();
            document.setXmlStandalone(true);
            Element parent=document.createElement("packet");
            document.appendChild(parent);

            Element SYS_ID=document.createElement("SYS_ID");
            SYS_ID.setTextContent("ZFB2C");
//          SYS_ID.appendChild(document.createTextNode("ZFB2C"));
            Element TRANS_CODE=document.createElement("TRANS_CODE");
            TRANS_CODE.setTextContent("TOKEN");
//          TRANS_CODE.appendChild(document.createTextNode("TOKEN"));
            Element ACCESS_TOKEN=document.createElement("ACCESS_TOKEN");
//          ACCESS_TOKEN.appendChild(document.createTextNode("skdlajtfoiewjflkdsajflkdsajlkfdsajfljdsalkf"));
            ACCESS_TOKEN.setTextContent("skdlajtfoiewjflkdsajflkdsajlkfdsajfljdsalkf");
            Element RET_CODE=document.createElement("RET_CODE");
//          RET_CODE.appendChild(document.createTextNode("0000"));
            RET_CODE.setTextContent("0000");
            Element RET_RMK=document.createElement("RET_RMK");
//          RET_RMK.appendChild(document.createTextNode("交易成功"));
            RET_RMK.setTextContent("交易成功");
            parent.appendChild(SYS_ID);
            parent.appendChild(TRANS_CODE);
            parent.appendChild(ACCESS_TOKEN);
            parent.appendChild(RET_CODE);
            parent.appendChild(RET_RMK);

            //xml转换,转为字符串
            TransformerFactory transformerFactory=TransformerFactory.newInstance();
            Transformer transformer=transformerFactory.newTransformer();

            DOMSource source=new DOMSource(document);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            transformer.transform(source, new StreamResult(bos));
            String result=bos.toString();

            //写到客户端
            dataOutputStream.writeUTF(result);
          //把dataOutputStream数据flush掉,全部传到客户端
            dataOutputStream.flush();
          //关闭流
            dataOutputStream.close();
            outputStream.close();
        }
        in.close();
        inputStream.close();
        sk.close();
    }
}

//DOM解析
public static void DOM(String data) {
    try {
        //遍历xml获取内容
        byte[] b = data.getBytes();
        InputStream inp = new ByteArrayInputStream(b);
        DocumentBuilderFactory factory = DocumentBuilderFactory
                .newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(inp);
        NodeList nl = doc.getElementsByTagName("persons");
        //用最外层节点数来遍历
        for (int i = 0; i < nl.getLength(); i++) {
            System.out.println("person:  "
                    + doc.getElementsByTagName("person").item(i)
                    .getFirstChild().getNodeValue());
            System.out.println("name:  "
                    + doc.getElementsByTagName("name").item(i)
                    .getFirstChild().getNodeValue());
            System.out.println("sex:  "
                    + doc.getElementsByTagName("sex").item(i)
                    .getFirstChild().getNodeValue());
            System.out.println("age:  "
                    + doc.getElementsByTagName("age").item(i)
                    .getFirstChild().getNodeValue());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

client端:

    /**
    * Socket通信XML
    * @author earthxuan
    *
    */
public class SocketClientTest {
public static void main(String[] args) throws IOException, TransformerException, ParserConfigurationException {
	System.out.println("client.........");
    Socket socket=null;
    InetAddress inetAddress=InetAddress.getByName("10.2.152.241");
    int serverPort=9999;
    //测试主机是否在线(Windows XP不适用)
    if(inetAddress.isReachable(5000)){
        socket=new Socket(inetAddress,serverPort);
        
        //封装数据写给服务器端
        OutputStream outputStream=socket.getOutputStream();
        DataOutputStream dataOutputStream=new DataOutputStream(outputStream);

        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder=factory.newDocumentBuilder();
        Document document=documentBuilder.newDocument();
        document.setXmlStandalone(true);
        Element parent=document.createElement("packet");
        document.appendChild(parent);

        Element SYS_ID=document.createElement("SYS_ID");
        SYS_ID.appendChild(document.createTextNode("ZFB2C"));
        Element TRANS_CODE=document.createElement("TRANS_CODE");
        TRANS_CODE.appendChild(document.createTextNode("TOKEN"));
        Element ACCESS_TOKEN=document.createElement("ACCESS_TOKEN");
        ACCESS_TOKEN.appendChild(document.createTextNode("skdlajtfoiewjflkdsajflkdsajlkfdsajfljdsalkf"));
        Element RET_CODE=document.createElement("RET_CODE");
        RET_CODE.appendChild(document.createTextNode("0000"));
        Element RET_RMK=document.createElement("RET_RMK");
        RET_RMK.appendChild(document.createTextNode("交易成功"));
        parent.appendChild(SYS_ID);
        parent.appendChild(TRANS_CODE);
        parent.appendChild(ACCESS_TOKEN);
        parent.appendChild(RET_CODE);
        parent.appendChild(RET_RMK);
        
        System.out.println(document.toString());
        //转换xml
        TransformerFactory transformerFactory=TransformerFactory.newInstance();
        Transformer transformer=transformerFactory.newTransformer();

        DOMSource source=new DOMSource(document);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        transformer.transform(source, new StreamResult(bos));
        String result=bos.toString();

        //写数据
        dataOutputStream.writeUTF(result);
    //  socket.shutdownOutput();
        // 4.获取输入流,并读取服务器端的响应信息
        // 4.关闭资源
        //读
        InputStream is = socket.getInputStream();
        DataInputStream in = new DataInputStream(is);
        String data = in.readUTF();
        DOM(data);
        in.close();
        is.close();
        bos.close();
        dataOutputStream.flush();
        dataOutputStream.close();
        socket.close();
    }
}
//dom解析
public static void DOM(String data) {
    try {
        //遍历xml获取内容
        byte[] b = data.getBytes();
        InputStream inp = new ByteArrayInputStream(b);
        DocumentBuilderFactory factory = DocumentBuilderFactory
                .newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(inp);
//            NodeList nl = doc.getElementsByTagName("packet");
//			System.out.println(nl.getLength());
//            for (int i = 0; i < nl.getLength(); i++) {
            System.out.println("RET_CODE:  "
                    + doc.getElementsByTagName("RET_CODE").item(0)
                    .getFirstChild().getNodeValue());
            System.out.println("RET_RMK:  "
                    + doc.getElementsByTagName("RET_RMK").item(0)
                    .getFirstChild().getNodeValue());
//            }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}
  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值