webService接口开发

  业务场景:给一家公司的两个系统之间做部分数据做同步,A系统中进行业务操作后同步到B系统中,这样就不需要B系统再次进行操作了。

        开发方案:B系统搭建WebService服务器,A系统业务操作后通过发送请求将参数传入B系统中自动执行业务操作。

第一步,搭建WebService服务,建立WebService接口及实现类:

    /**
     * WebService接口
     * @date 2018年5月25日09:09:24
     * @author 拽拽很乖
     */
    public interface IOrderPluginWebService {
         /**
         * webService接口
         * @author 拽拽很乖
         * @date 2018年5月25日09:15:18
         * @param type 类型
         * @param pk_order 主键
         * @return 是否同步成功 :
         * true 同步成功
         * false 同步失败
         */
         public boolean sendDataToOrderPlugin(String type,String[] pk_order);
    }

    /**
     * webService接口实现类
     * @author 拽拽很乖
     * @date 2018年5月25日09:27:18
     */
    public class OrderReportWebServiceImpl implements IOrderPluginWebService {
        @Override
        public boolean sendDataToOrderPlugin (String type,String[] pk_order) {
            //业务操作,逻辑处理
        }
    }

因为本次主要说明WebService服务搭建以及连接,业务逻辑处理就不贴上来了。

第二步、创建wsdl文件及upm文件:

        右键接口选择Generate WSDL以及Publish Web Service,创建好wsdl文件以及upm文件。当然也可以在接口上添加@WebService注解,没有upm自动插件一般用注解。

第三步:浏览器测试是否发布成功:

        启动服务端代码,打开IE浏览器输入地址测试,成功后就可以看到刚才发布的接口,点开后或看到如下图所示的xml格式网页,表示WebService接口发布成功。

第四步:SOAPUI测试接口:

        打开soapUI工具,新建测试工程,右键Projects新建一个SOAP项目,project name随意填写,WSDL写上述图所示浏览器中测试的带有"?wsdl"结尾的地址。

 


        填写参数后就可以测试了:启动后WebService实现类就可以接到测试额参数,至此,WebService服务端搭建成功。

第五步:发送soap请求:

    /**
     * 发送SOAP请求
     * @param xmlString XML文件
     * @return webService返回结果
     * @throws Exception
     * @author 拽拽很乖
     * @date 2018年5月30日10:30:21
     */
    private String sendPost(String xmlString)throws Exception {
        //HttpURLConnection 发送SOAP请求
        URL url = new URL(URL);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestProperty("Content-Type","text/xml; charset=utf-8");
    ‍    conn.setRequestMethod("POST");
    ‍    conn.setUseCaches(false);
    ‍    conn.setDoInput(true);
    ‍    conn.setDoOutput(true);
    ‍    conn.setConnectTimeout(30*1000);
    ‍    conn.setReadTimeout(30*1000);
    ‍    DataOutputStream dos = new
        DataOutputStream(conn.getOutputStream());
    ‍    dos.write(xmlString.getBytes("utf-8"));
    ‍    dos.flush();
    ‍    BufferedReader reader = new BufferedReader(new InputStreamReader(
        conn.getInputStream(), "utf-8"));
    ‍    String line = null;
    ‍    StringBuffer strBuf = new StringBuffer();
    ‍    while ((line = reader.readLine()) != null) {
    ‍‍        s‍trBuf.append(line);
    ‍    }
    ‍    dos.close();
    ‍    reader.close();
    ‍    return strBuf.toString();
    }

        其中参数XML就按照soapUI测试时的xml格式配置即可,需要传入的参数写入对应的位置即可,URL就是soapUI测试时的URL。

    /**
     * webService URL
     * @author 拽拽很乖
     * @date 2018年5月30日10:36:13
     */
    private static final String URL ="http://10.31.0.67:88/uapws/service/IOrderPluginWebService";
    /**
     * @author 拽拽很乖
     * @date 2018年5月29日17:17:21
     * @param type
     * 打开或关闭类型
     * @param pk_order
     * 采购订单主键
     * @return soap请求XML
     * @throws Exception
     */
    private String CreateOrder(String type,String pk_order) throws Exception {
    ‍    StringBuffer xmlString = new StringBuffer();
    ‍    DocumentBuilderFactory fct = DocumentBuilderFactory.newInstance();
    ‍    DocumentBuilder buil = fct.newDocumentBuilder();
    ‍    Document doc = buil.newDocument();
    ‍    Element ps = doc.createElement("soapenv:Envelope");
       ‍ Element billHeader = doc.createElement("soapenv:Header");
    ‍    Element billBody = doc.createElement("soapenv:Body");
    ‍    Element itemIor = doc.createElement("ior:sendDataToOrderPlugin");
        Attr soapenv = doc.createAttribute("xmlns:soapenv");
    ‍    ‍Attr ior = doc.createAttribute("xmlns:ior");
    ‍‍    doc.appendChild(ps);
    ‍‍    ps.appendChild(billHeader);
    ‍    ps.appendChild(billBody);
    ‍    ps.setAttributeNode(soapenv);
    ‍    ps.setAttributeNode(ior);
    ‍    billBody.appendChild(itemIor);
    ‍    Text soapenv_v = doc.createTextNode("http://schemas.xmlsoap.org/soap/envelope/");
    ‍    Text ior_v = doc.createTextNode("http://orderreport.pu.itf.nc/IOrderPluginWebService");
    ‍    soapenv.appendChild(soapenv_v);
    ‍    Element str_v = doc.createElement("string");
    ‍    Text code_v = doc.createTextNode(type);
    ‍    toXML(itemIor, str_v, code_v);
    ‍    Element strItem_v = doc.createElement(
        "stringItem");
    ‍    Text pk_order_v = doc.createTextNode(
        pk_order.toString());
    ‍    toXML(itemIor, strItem_v, pk_order_v);
    ‍    XML_VoucherTranslator.
        writeXMLFormatString(xmlString, doc, -2);
    ‍    return xmlString.toString();
    }
    private static void toXML(Element e, Element e1, Text text) {
    ‍    e.appendChild(e1);
    ‍    e1.appendChild(text);
    }

第六步:测试:

        开启两端的代码,先运行WebService服务端代码,再运行客户端(请求)代码进行测试。

总结:

        WebService是是独立的、可跨平台、跨语言、低耦合的非常强大的web应用程序,通过XML和SOAP更加灵活。减少了不少传统的接口开销,开发便捷
---------------------
作者:zhuaizhuaihenguai
来源:CSDN
原文:https://blog.csdn.net/zhuaizhuaihenguai/article/details/80512501
版权声明:本文为博主原创文章,转载请附上博文链接!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值