webservice(cxf)

第三方系统接收与发送(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;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值