(源码)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文件:

(源码)WebService接口开发详解_第1张图片
(源码)WebService接口开发详解_第2张图片

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

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

(源码)WebService接口开发详解_第3张图片

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

(源码)WebService接口开发详解_第4张图片

第四步:SOAPUI测试接口:

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

(源码)WebService接口开发详解_第5张图片


(源码)WebService接口开发详解_第6张图片


(源码)WebService接口开发详解_第7张图片


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

(源码)WebService接口开发详解_第8张图片

第五步:发送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接口开发详解_第9张图片

总结:

        WebService是是独立的、可跨平台、跨语言、低耦合的非常强大的web应用程序,通过XML和SOAP更加灵活。减少了不少传统的接口开销,开发便捷。

你可能感兴趣的:((源码)WebService接口开发详解)