向远程服务器发送xml格式报文,并将返回XML格式数据转换成json给前端

该博客介绍了如何通过Java实现XML格式的请求报文发送到远程服务器,并将接收到的XML返回报文转换为JSON格式。主要涉及了JAXB库用于XML对象绑定,HttpClient进行HTTP请求,以及Hutool库的XML转JSON功能。

需求说明:

http接口,向远程服务器发送xml格式报文,发送成功后接收返回报文,转换成前端需要的json格式

需求样例:

请求路径:

  http://url:port/接口名

请求报文:
<?xml version="1.0" encoding="utf-8"  standalone="yes"?>
<IN>
    <META_DATA>
        <APP_CODE>1123456</APP_CODE>
        <CASE_NO>963852741</CASE_NO>
    </META_DATA>
</IN>

返回报文:

<?xml version="1.0"  encoding="UTF-8"?>
<OUT>

	<HEAD>
		<DOWN_LOAD ID="" NAME="">
			<MESSAGE URL="/credit/2018/7/12/S2018071103923/mejrxg1xzduvspypbx3xkpg9gsqve.jpg" ID="7"
				NAME="微信图片_20180206090923.jpg" />
			<MESSAGE URL="/credit/2018/7/12/S2018010053923/hy8c5due78r472cixs2scoxd2zs202.jpg" ID="1"
				NAME="微信图片_20180206090949.jpg" />
		</DOWN_LOAD>
	</HEAD>
	<APPLYCODE>S201807110053923</APPLYCODE>
	<ISSUCCESS>true</ISSUCCESS>
</OUT>

实现方式:

1:获取XML入参对象

  • 最外层标签格式
@XmlRootElement(name="IN")
public class IN {

    private META_DATA META_DATA;

    private BASE_DATA BASE_DATA;

    public com.sinosig.otms.litigation.image.vo.domain.META_DATA getMETA_DATA() {
        return META_DATA;
    }


    public void setMETA_DATA(com.sinosig.otms.litigation.image.vo.domain.META_DATA META_DATA) {
        this.META_DATA = META_DATA;
    }

    public com.sinosig.otms.litigation.image.vo.domain.BASE_DATA getBASE_DATA() {
        return BASE_DATA;
    }

    public void setBASE_DATA(com.sinosig.otms.litigation.image.vo.domain.BASE_DATA BASE_DATA) {
        this.BASE_DATA = BASE_DATA;
    }
}
  • 添加内部标签
@XmlRootElement(name="BASE_DATA")
public class BASE_DATA {

    private String imageNo;
    private String imageTypeId;
    private String imageName;

    public String getImageNo() {
        return imageNo;
    }

    public String getImageTypeId() {
        return imageTypeId;
    }

    public String getImageName() {
        return imageName;
    }
    @XmlElement
    public void setImageNo(String imageNo) {
        this.imageNo = imageNo;
    }
    @XmlElement
    public void setImageTypeId(String imageTypeId) {
        this.imageTypeId = imageTypeId;
    }
    @XmlElement
    public void setImageName(String imageName) {
        this.imageName = imageName;
    }
}

2:向远程服务器发送xml格式并接收返回实现

public JSONArray toPrinted(String jsonPrettyPrintString) throws JAXBException, IOException {

        JAXBContext context = JAXBContext.newInstance(IN.class, META_DATA.class);    // 获取上下文对象
        Marshaller marshaller = context.createMarshaller(); // 根据上下文获取marshaller对象

        marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");  // 设置编码字符集
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 格式化XML输出,有分行和缩进
        // marshaller.marshal(getSimpleDepartment(), System.out);   // 打印到控制台
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        marshaller.marshal(getSimpleDepartment(), baos);//传入参的对象拼装的xml报文
        String xmlObj = new String(baos.toByteArray());         // 生成XML字符串
        //System.out.println("=="+xmlObj);

        CloseableHttpClient client = null;
        CloseableHttpResponse resp = null;
        HttpPost httpPost = new HttpPost("http接口url");
        httpPost.setHeader("Content-Type", "text/xml; charset=UTF-8");
        client = HttpClients.createDefault();
        //发送请求获取出参数据
        StringEntity entityParams = new StringEntity(xmlObj,"utf-8");
        httpPost.setEntity(entityParams);
        client = HttpClients.createDefault();
        resp = client.execute(httpPost);
        String resultMsg = EntityUtils.toString(resp.getEntity(),"utf-8");//获取出参
        //System.out.println("=resultMsg="+resultMsg);//此处返回XML格式出参报文

        //xml格式出参报文转json
        cn.hutool.json.JSONObject xmlJSONObj = XML.toJSONObject(resultMsg);
        //设置缩进
         jsonPrettyPrintString = xmlJSONObj.toString();
        //输出格式化后的json
       // System.out.println("jsonPrettyPrintString"+jsonPrettyPrintString);
        //获取指定节点的json数据
        JSONObject jsonObject = JSONObject.parseObject(jsonPrettyPrintString);
        JSONArray downLoadJson = jsonObject.getJSONObject("OUT").getJSONObject("HEAD").getJSONArray("DOWN_LOAD");

        return downLoadJson;
    }

//入参报文拼装数据
 private static IN getSimpleDepartment () {
        IN inn = new IN();
        BASE_DATA bd = new BASE_DATA();
        bd.setImageNo("V021012018173050");
        bd.setImageTypeId("A0304,A020502,B0101");

        inn.setBASE_DATA(bd);
        return inn;
    }

如果想要获取更准备节点数据,可以往下继续获取,或者循环获取数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值