WebService客户端和服务端(CXF)

用java的CXF提供的服务端

https://pan.baidu.com/s/1gDiWKGLX3j464W4cSNHbQA  提取码:my39

注意:(代码里接口为俩个参数,有对象和字符串,其中字符串再解析成本地对象)

客户端调用服务端的方式

1.用流的方式调用

package com.cnbg.client;

import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EsbTestStream {

    //服务端wsdl
    private static String wsdl = "http://172.25.201.203:7800/sap/binding?wsdl";

    //流的方式调用
    public static void main(String[] args) throws Exception {

        InputStream soapInputStream = getSoapInputStream();

        byte[] bytes = new byte[1024];
        soapInputStream.read(bytes);

        String string1 = new String(bytes);
        System.out.println("返回的值1为:" + string1);

        String string2 = "<STATUS>(.*?)</STATUS><MESSAGE>(.*?)</MESSAGE>";

        //用正则的方式获取返回的字符串
        Pattern pattern = Pattern.compile(string2);
        Matcher matcher = pattern.matcher(string1);

        matcher.find();
        System.out.println("第一个值为:" + matcher.group(1));
        System.out.println("第二个值为:" + matcher.group(2));
    }


    private static InputStream getSoapInputStream() throws Exception {
        try {
            //获取请求规范
            String soap = getSoapRequest();
            if (soap == null) {
                return null;
            }
            //调用的天气预报webserviceURL
            URL url = new URL(wsdl);
            URLConnection conn = url.openConnection();
            conn.setUseCaches(false);
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setRequestProperty("Content-Length", Integer.toString(soap.length()));
            conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
            //调用的接口方法是“test” 这个参数取决于服务端 @WebMethod(action = "test") 这个注解
            //conn.setRequestProperty("SOAPAction", "test");
            OutputStream os = conn.getOutputStream();
            OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");
            osw.write(soap);
            osw.flush();
            osw.close();
            //获取webserivce返回的流
            InputStream is = conn.getInputStream();
            return is;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    private static String getSoapRequest() {
        StringBuilder sb = new StringBuilder();
        String aaa = "2";
        String bbb = "2020-02-02";
        sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:sap-com:document:sap:rfc:functions\">\n" +
                "   <soapenv:Header/>\n" +
                "   <soapenv:Body>\n" +
                "      <urn:Z007ESB_PP004>\n" +
                "        <I_DATA>\n" +
                "            <RUECK>" +
                aaa + "</RUECK>\n" +
                "            <RMZHL>2</RMZHL>\n" +
                "            <ERSDA>" +
                bbb + "</ERSDA>\n" +
                "            <ERZET>01:01:01</ERZET>\n" +
                "            <ERNAM>2</ERNAM>\n" +
                "            <BUDAT>2020-02-02</BUDAT>\n" +
                "            <WERKS>2</WERKS>\n" +
                "            <ISM01>2</ISM01>\n" +
                "            <ISM02>2</ISM02>\n" +
                "            <ISM03>2</ISM03>\n" +
                "            <ISM04>2</ISM04>\n" +
                "            <ISM05>2</ISM05>\n" +
                "            <ISM06>2</ISM06>\n" +
                "            <AUERU>2</AUERU>\n" +
                "            <AUSOR>2</AUSOR>\n" +
                "            <AUFNR>2</AUFNR>\n" +
                "            <VORNR>2</VORNR>\n" +
                "            <LMNGA>2</LMNGA>\n" +
                "            <MEINH>2</MEINH>\n" +
                "            <SATZA>2</SATZA>\n" +
                "            <PLNBEZ>2</PLNBEZ>\n" +
                "            <KTEXT>2</KTEXT>\n" +
                "            <LGORT>2</LGORT>\n" +
                "            <ZZPH>2</ZZPH>\n" +
                "            <XFIELD00>2</XFIELD00>\n" +
                "            <XFIELD01>2</XFIELD01>\n" +
                "            <XFIELD02>2</XFIELD02>\n" +
                "            <XFIELD03>2</XFIELD03>\n" +
                "            <XFIELD04>2</XFIELD04>\n" +
                "         </I_DATA>\n" +
                "      </urn:Z007ESB_PP004>\n" +
                "   </soapenv:Body>\n" +
                "</soapenv:Envelope>");
        return sb.toString();
    }
}

2.通过工具生成客户端

https://pan.baidu.com/s/1-amigqyIkakrla7xe5oItQ  提取码:9hb4

3.动态调用(对namespace有要求,且对soapUi的格式有要求

注意:服务端把对象作为接口的请求参数和返回参数时,客户端的请求参数的包名必须为服务端的namespace

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值