EKP jd 上传附件(四) soap+xml
一. jd Demo
package com.landray.kmss.gemdale.webservice; import java.io.IOException; import java.io.InputStream; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Paths; import java.io.FileInputStream; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.codec.binary.Base64; import org.apache.http.HttpEntity; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import org.apache.http.entity.StringEntity; public class WebServiceTest { private static String url = "http://:8080/sys/webservice/commonWorkflowService?wsdl"; private static String localUrl = "http://localhost:8080/sys/webservice/commonWorkflowService?wsdl"; private static String targetNamespace = "http:///"; public static void main(String[] args) throws IOException { ICommonWorkflowService webService = new ICommonWorkflowServiceProxy(url); // String fd_id = webService.addReview(createForm()); // System.out.println(fd_id); String result = doPostSoap(); System.out.println(result); } public static String doPostSoap() throws IOException,Exception { //为服务请求方请求服务时服务器运行时间,格式为 YYYYMMDDHHMMSS Date date = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss"); String ServiceTime = sf.format(date); //传入当前时间、 byte[] bytes = file2bytes("F:\\" + "ceshi2.txt"); String fileBase64 = Base64.encodeBase64String(bytes); String soapXml="<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<SOAP-ENV:Envelope\n" + " xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"\n" + " xmlns:web=\"http://webservice.gemdale.kmss.landray.com/\">\n" + " <SOAP-ENV:Header/>\n" + " <SOAP-ENV:Body>\n" + " <web:addReview>\n" + " <arg0>\n" + " <attachmentForms>\n" + " <fdKey>"+"fd_file"+"</fdKey>\n" + " <fdFileName>"+"ceshi2.txt"+"</fdFileName>\n" + // " <fdAttachment>"+"VGhyb3VnaCB0aGUgZGFya2VzdCBhbGxleXMgYW5kIGxvbmVsaWVzdCB2YWxsZXlz"+"</fdAttachment>\n" + " <fdAttachment>"+fileBase64+"</fdAttachment>\n" + " </attachmentForms>\n" + " <docCreator>admin</docCreator>\n"+ " <docStatus>10</docStatus>\n"+ " <docSubject>"+ServiceTime+"_add"+"</docSubject>\n"+ " <fdTemplateKeyword>SGSY-XQ</fdTemplateKeyword>\n"+ " </arg0>\n" + " </web:addReview>\n" + " </SOAP-ENV:Body>\n" + "</SOAP-ENV:Envelope>\n" + ""; int socketTimeout = 10000;// 请求超时时间 int connectTimeout = 10000;// 传输超时时间 final String soap = "text/xml;charset=UTF-8"; // 创建HttpClient HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); CloseableHttpClient closeableHttpClient = httpClientBuilder.build(); // 创建Post请求 HttpPost httpPost = new HttpPost(localUrl); // 设置请求和传输超时时间 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout) .setConnectTimeout(connectTimeout).build(); httpPost.setConfig(requestConfig); // 设置Post请求报文头部 httpPost.setHeader("Content-Type", soap); httpPost.setHeader("SOAPAction", ""); // 添加报文内容 StringEntity data = new StringEntity(soapXml, Charset.forName("UTF-8")); httpPost.setEntity(data); try { // 执行请求获取返回报文 CloseableHttpResponse response = closeableHttpClient.execute(httpPost); HttpEntity httpEntity = response.getEntity(); if (httpEntity != null) { // 打印响应内容 return EntityUtils.toString(httpEntity, "UTF-8"); } // 释放资源 closeableHttpClient.close(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } /* * 创建流程文档 */ public static ReviewHandlerParamter createForm() throws IOException { ReviewHandlerParamter reviewHandlerParamter = new ReviewHandlerParamter(); // 本地环境模板 reviewHandlerParamter.setFdTemplateKeyword("SGSY-XQ"); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); reviewHandlerParamter.setDocSubject(df.format(new Date()) + " add 附件上传"); reviewHandlerParamter.setDocCreator("admin"); AttachmentForm[] attForms = createAllAtts(); reviewHandlerParamter.setAttachmentForms(attForms); return reviewHandlerParamter; } /* * 创建附件列表 */ static AttachmentForm[] createAllAtts() throws IOException { AttachmentForm[] attForms = new AttachmentForm[3]; String fileName = "TEST1.rtf"; AttachmentForm attForm01 = createAtt(fileName); attForms[0] = attForm01; return attForms; } /* * 创建附件对象 */ static AttachmentForm createAtt(String fileName) throws IOException { AttachmentForm attForm = new AttachmentForm(); attForm.setFdFileName(fileName); // 设置附件关键字,表单模式下为附件控件的id attForm.setFdKey("fd_file"); byte[] data = file2bytes("F:\\" + "FILE-10-35-21-34-6333872054413443-1623835937850.rtf"); attForm.setFdAttachment(data); return attForm; } /* * 将文件转换为字节编码 */ static byte[] file2bytes(String fileName) throws IOException { InputStream in = new FileInputStream(fileName); byte[] data = new byte[in.available()]; try { in.read(data); } finally { try { in.close(); } catch (IOException ex) { } } return data; } }
二. ny Demo
package com.landray.kmss.sec.org.util; import java.io.IOException; import java.nio.charset.Charset; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.lang.StringEscapeUtils; import org.apache.http.HttpEntity; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import com.alibaba.fastjson.JSONObject; import com.landray.kmss.util.StringUtil; /** * 模块基础工具类 */ public class SecOrgPushUtil{ /** * 同步HttpPost请求发送SOAP格式的消息 * * @param webServiceURL * WebService接口地址 * @param soapXml * 消息体 * @param soapAction * soapAction * @param soapType * soap版本 * @return */ static int socketTimeout = 10000;// 请求超时时间 static int connectTimeout = 10000;// 传输超时时间 static final String soap = "text/xml;charset=UTF-8"; public static String doPostSoap(String webServiceURL, String soapXml,String soapAction) { // 创建HttpClient HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); CloseableHttpClient closeableHttpClient = httpClientBuilder.build(); // 创建Post请求 HttpPost httpPost = new HttpPost(webServiceURL); // 设置请求和传输超时时间 RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(socketTimeout) .setConnectTimeout(connectTimeout).build(); httpPost.setConfig(requestConfig); // 设置Post请求报文头部 httpPost.setHeader("Content-Type", soap); httpPost.setHeader("SOAPAction", soapAction); // 添加报文内容 StringEntity data = new StringEntity(soapXml, Charset.forName("UTF-8")); httpPost.setEntity(data); try { // 执行请求获取返回报文 CloseableHttpResponse response = closeableHttpClient.execute(httpPost); HttpEntity httpEntity = response.getEntity(); if (httpEntity != null) { // 打印响应内容 return EntityUtils.toString(httpEntity, "UTF-8"); } // 释放资源 closeableHttpClient.close(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } //截取<Response>(.*)</Response> public static JSONObject unResponseXml(String str) { JSONObject jsonGroup = new JSONObject(); String regex = "<Response>(.*)</Response>"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str);//匹配类 while (matcher.find()) { String group = matcher.group(1); group = StringEscapeUtils.unescapeXml(group); if(StringUtil.isNotNull(group)) { jsonGroup = JSONObject.parseObject(group); } } return jsonGroup; } //利用List的contains方法循环遍历,重新排序,只添加一次数据,避免重复: private static List<String> removeDuplicate(List<String> list) { List<String> result = new ArrayList<String>(list.size()); for (String str : list) { if (!result.contains(str)) { result.add(str); } } list.clear(); list.addAll(result); return result; } }
推送接口
/** * 调用推送接口 * @param jsonAll * @param SourceSysID * @param jsonAll * @param ServiceID * @param SerialNO * @param configLink * @return */ public String pushJsonData(JSONObject jsonAll, String SourceSysID, String ServiceID, String SerialNO, String configLink) { String result = ""; try { //为服务请求方请求服务时服务器运行时间,格式为 YYYYMMDDHHMMSS Date date = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss"); String ServiceTime = sf.format(date); //传入当前时间 String soapXml="<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<SOAP-ENV:Envelope\n" + " xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"\n" + " xmlns:impl=\"http://smile.web.com/webservice\">\n" + " <SOAP-ENV:Header/>\n" + " <SOAP-ENV:Body>\n" + " <impl:esbServiceOperation>\n" + " <arg0>\n" + " <Service>\n" + " <Route>\n" + " <ServiceID>"+ServiceID+"</ServiceID>\n" + " <SerialNO>"+SerialNO+"</SerialNO>\n" + " <ServiceTime>"+ServiceTime+"</ServiceTime>\n" + " <SourceSysID>"+SourceSysID+"</SourceSysID>\n" + " </Route>\n" + " <Data>\n" + " <Request>"+jsonAll+"</Request>\n" + " <Control/>\n" + " </Data>\n" + " </Service>\n" + " </arg0>\n" + " </impl:esbServiceOperation>\n" + " </SOAP-ENV:Body>\n" + "</SOAP-ENV:Envelope>\n" + ""; //result= doPostSoap("http://10.62.16.56:7080/ESBWS/services/RequestInPort", soapXml, "", soap); result= SecOrgPushUtil.doPostSoap(configLink, soapXml, ""); //result= "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><soapenv:Body><impl:esbServiceOperationResponse xmlns:impl=\"http://impl.webservice.eis.com/\"><return><Service><Route><ServiceID>10000000000001</ServiceID><SerialNO>202203230100000001</SerialNO><ServiceTime>20220323090756</ServiceTime><SourceSysID>0100</SourceSysID><ServiceResponse><Status>COMPLETE</Status><Code>S000M000</Code><Desc>通信正常完成</Desc></ServiceResponse></Route><Data><Request>{"sourceSysId":"0100","dataType":"40000001","data":{"f_sjzzbm_cq":"1","f_sjzzbm_xz":"1","f_zczb":"475738.99","f_clrq":"1993-08-21","f_zzzjm":"SZNYJT","f_zzyh":[{"f_bzmc":"CNY","f_yhmc":"1","f_zhmc":"zs2022","f_zhlx":"1","f_bzbm":"CNY","f_yhhh":"1234500","f_zhhm":"zs1980"}],"f_sfstdw":"1","f_tgt_sys":"","f_bmxx":[{"f_name":"信息部","f_bmcj":"01","f_code":"nyjt2022","f_bmlx":"1","f_sjbmmc":"1","f_sjbmbm":"1","f_bmjc":"XXB"}],"f_ename":"SZNYJTYSGS","f_sjzzmc_xz":"组织1","f_jyfw":"中国大陆","f_zcbzbm":"CNY","f_zzcj_cq":"1","f_code":"SE0000000","f_dqrq":"2043-08-21","f_ssywbk":"FD","f_zzjc":"深圳能源集团","f_sjzzmc_cq":"组织1","f_zzcj_xz":"01","f_gj":"CHN","f_name":"深圳能源集团股份有限公司","f_id":"17fb44b6bdfc92dcb03cb544be0a732e","f_jwzjbm":"nyjt","f_zcdz":"深圳市福田区福田街道金田路2026号能源大厦北塔楼9层、29-31层、34-41层","f_qyfr":"王平洋","f_zcbzmc":"人民币元","f_sf":"2","f_zzlx":"1","f_jthjcgbl":"20.0","f_zzxz":"1","f_tyshxydm":"91440300192241158P","f_zzzt":"1"},"msgId":"202203230100000001"}</Request><Response>{"msg":"","code":"0","data":[{"f_code":"SE0000000","f_id":"17fb44b6bdfc92dcb03cb544be0a732e","f_status":"0"}]}</Response></Data></Service></return></impl:esbServiceOperationResponse></soapenv:Body></soapenv:Envelope>"; } catch (Exception e) { e.printStackTrace(); } return result; }
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body><ns1:addReviewResponse xmlns:ns1="http://webservice.gemdale.kmss.landray.com/"> <return>{"processId":"1847b4939130dd0a06ac5e8426ba388f","code":1,"success":true,"message":"流程成功启动"}</return> </ns1:addReviewResponse> </soap:Body></soap:Envelope>