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 {Overridepublic 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; charsetutf-8); conn.setRequestMethod(POST); conn.setUseCaches(false); conn.setDoInput(true); conn.setDoOutput(true); conn.setConnectTimeout(30*1000); conn.setReadTimeout(30*1000); DataOutputStream dos newDataOutputStream(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) { strBuf.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更加灵活。减少了不少传统的接口开销开发便捷。