业务场景:给一家公司的两个系统之间做部分数据做同步,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自动插件一般用注解。
第三步:浏览器测试是否发布成功:
打开soapUI工具,新建测试工程,右键Projects新建一个SOAP项目,project name随意填写,WSDL写上述图所示浏览器中测试的带有"?wsdl"结尾的地址。
填写参数后就可以测试了:启动后WebService实现类就可以接到测试额参数,至此,WebService服务端搭建成功。
/**
* 发送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) {
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更加灵活。减少了不少传统的接口开销,开发便捷。