第三方系统接收与发送(webservice cxf模式)
设置为web项目
1.寻找所需jar包
Esclipse
http://cxf.apache.org/download.html 中找到 apache-cxf-版本号.zip 下载
参考 https://www.cnblogs.com/xueershewang/p/10484773.html
idea
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.1.11</version>
</dependency>
2.发送接口
import java.util.regex.Pattern;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.codehaus.jettison.json.JSONObject;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.regex.Matcher;
public class TestSend {
public static void main(String[] args) throws UnsupportedEncodingException {
// 接收资源url(wsdl地址)
String receiveurl = "http://192.168.0.101:80/services/mdmapi?wsdl&appid=300";
String xdata = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><mdm modelcode=\"MATERIAL_DATA\" state=\"1\" time=\"2020-04-25 16:54:00\" uuid=\"72b6df32c41b4f16837f1dbfe2fe608f\"><codeinfo><p01>180101</p01><p02>六角螺栓</p02><p03>六角螺栓</p03><p04>六角螺栓</p04><p05/><p06>GB</p06><p07>六角螺栓</p07><p08/><p09>1*1</p09><p10/><p11/><p12/><p13/><p14/><groupcode/><unit/><seccls/><code>123456789</code><uuid>07d9499dee514a0d9365a2e5dce9d9fa</uuid><codeid>288984</codeid><categorycode>180101</categorycode><longdesc>六角螺栓|GB|六角螺栓|1*1</longdesc><shortdesc>GB|六角螺栓|1*1</shortdesc></codeinfo></mdm>";
// String xdatas = new String(xdata.getBytes(), "UTF-8");
String name = new TestSend().sendByCallWebservice(receiveurl, xdata);
System.out.println(name);
}
//参数说明:1.接受url资源;2.xml字符串
private String sendByCallWebservice(String receiveurl, String xdata) {
// 返回参数
String backXml = "";
Object[] objects = new Object[0];
// 获取床底参数
String mdmreceiveappid = getParamOfUrl(receiveurl, "appid");
try {
// 1.初始化
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(receiveurl);
// 携带密码
// client.getOutInterceptors().add(new
// ClientLoginInterceptor(USER_NAME,PASS_WORD));
// 2.调用第三方系统接口
objects = client.invoke("send", xdata, mdmreceiveappid);
backXml = (String) objects[0];
} catch (Exception e) {
e.printStackTrace();
// 3.处理报错
backXml = GenerateBackstrForError(mdmreceiveappid, xdata, e.getMessage(), receiveurl);
}
return backXml;
}
// 从url中解析参数与参数值 (传入url以及需要解析的参数)
public String getParamOfUrl(String url, String name) {
url += "&";
String pattern = "(\\?|&){1}#{0,1}" + name + "=[a-zA-Z0-9]*(&{1})";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(url);
if (m.find()) {
// System.out.println(m.group(0));
return m.group(0).split("=")[1].replace("&", "");
} else {
return null;
}
}
}
生成xml字符串代码:
import com.bfzy.mdm.domain.EoutqueueVo;
import org.apache.commons.lang3.StringUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.ByteArrayOutputStream;
import java.util.List;
import java.util.UUID;
public class CreatXMLStr{
//参数说明 1.xml数据list 2.字段映列list
public String createXML(List<EoutqueueVo> eoutqueueList, List<com.bfzy.mdm.domain.ApifieldmapVo> sendApifieldmapVos) {
//最终生成xml
String xmlStr = null;
//1.初始化
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
//2.定义XML结构
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
document.setXmlVersion("1.0");
String uuid = UUID.randomUUID().toString().replaceAll("-", "");//uuid
//3.定义<mdm>根结点属性
Element mdmroot = document.createElement(this.getApifieldmap("mdm", sendApifieldmapVos));
//<mdm>根结点属性
mdmroot.setAttribute(this.getApifieldmap("uuid", sendApifieldmapVos), uuid);
document.appendChild(mdmroot);
//根据数据,完整拼接结构
for (int i = 0; i < eoutqueueList.size(); i++) {
//4.二级节点<codeinfo>
Element elementCodeinfo = document.createElement(this.getApifieldmap("codeinfo", sendApifieldmapVos));
Element colElement = document.createElement("col1");
colElement.setTextContent(eoutqueueList.get(i).getCol1());
//添加至codeinfo节点
elementCodeinfo.appendChild(colElement);
//加入mdm根节点
mdmroot.appendChild(elementCodeinfo);
}
//docment转换成string
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transFormer = transFactory.newTransformer();
DOMSource domSource = new DOMSource(document);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
transFormer.transform(domSource, new StreamResult(bos));
xmlStr = bos.toString();
} catch (Exception e) {
e.printStackTrace();
}
return xmlStr;
}
//根据字段映射list获取当前字段的映射
private String getApifieldmap(String paraMdmfield, List<com.bfzy.mdm.domain.ApifieldmapVo> apifieldmapVos) {
for (int i = 0; i < apifieldmapVos.size(); i++) {
//第三方系统字段
String thirdfield = apifieldmapVos.get(i).getThirdfield();
//本地系统字段
String mdmfield = apifieldmapVos.get(i).getMdmfield();
if (paraMdmfield.equals(mdmfield) && !"".equals(thirdfield))
return StringUtils.trim(thirdfield);
}
return paraMdmfield;
}