栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 组装复杂xml报文

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 组装复杂xml报文

近期在对接海关的订单出口报文,从网上找了挺多的案例,下面做一个记录

1、文件目录结构如下图所示

2、各文件代码

2.1、NameSpace类

public class NameSpace {

    
    public static final String NAMESPACE_CEB_URI = "http://www.chinaport.gov.cn/ceb";


    
    public static final String NAMESPACE_DXP_URI = "http://www.chinaport.gov.cn/dxp";

    
    public static final String NAMESPACE_XSI_URI = "http://www.w3.org/2001/XMLSchema-instance";

    
    public static final String NAMESPACE_DS_URL = "http://www.w3.org/2000/09/xmldsig#";

}

2.2、xml工作空间类 package-info.java

@XmlSchema(
        xmlns = {
                @XmlNs(prefix = "ceb", namespaceURI = NAMESPACE_CEB_URI),
                @XmlNs(prefix = "xsi", namespaceURI = NAMESPACE_XSI_URI)
        }
)
package com.ruoyi.online.request.order;

import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlSchema;

2.3、订单出口报文CEB303Message

import lombok.Data;
import javax.xml.bind.annotation.*;



@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "CEB303Message" , namespace = NAMESPACE_CEB_URI)
public class CEB303Message {

    @XmlElement(name = "Order", namespace = NAMESPACE_CEB_URI)
    private Order order;

    @XmlAttribute(name = "guid")
    private String guid;

    @XmlAttribute(name = "version")
    private String version;

    @XmlElement(name = "baseTransfer", namespace = NAMESPACE_CEB_URI)
    private baseTransfer baseTransfer;

    //@XmlElement(name = "baseSubscribe", namespace = NAMESPACE_CEB_URI)
    //private baseSubscribe baseSubscribe;
    //
    //@XmlElement(name = "ExtendMessage", namespace = NAMESPACE_CEB_URI)
    //private ExtendMessage extendMessage;
}

2.4、订单业务节点类

import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;


@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Order ", namespace = NAMESPACE_CEB_URI)
public class Order {

    @XmlElement(name = "OrderHead", namespace = NAMESPACE_CEB_URI)
    private OrderHead orderHead;

    @XmlElement(name = "OrderList", namespace = NAMESPACE_CEB_URI)
    private List orderList;

}

#订单头类

import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.math.BigDecimal;

@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "OrderHead ", namespace = NAMESPACE_CEB_URI)
public class OrderHead {

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String guid;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String appType;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String appTime;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String appStatus;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String orderType;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String orderNo;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String ebpCode;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String ebpName;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String ebcCode;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String ebcName;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private BigDecimal goodsValue;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private BigDecimal freight;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String currency;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String note;

}


#订单列表

import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.math.BigDecimal;

@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "OrderList ", namespace = NAMESPACE_CEB_URI)
public class OrderList {

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private Integer gnum;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String itemNo;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String itemName;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String itemDescribe;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String barCode;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String unit;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String currency;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private Integer qty;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private BigDecimal price;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private BigDecimal totalPrice;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String note;
}



2.5、基础报文传输实体

import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "baseTransfer ", namespace = NAMESPACE_CEB_URI)
public class baseTransfer {

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String copCode;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String copName;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String dxpMode;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String dxpId;

    
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String note;
}

3、将出口订单实体转化为xml 报文工具类 JaxbUtils

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;


public class JaxbUtils {
    
    public static String convertToXml(Object obj) {
        return convertToXml(obj, "UTF-8");
    }

    
    public static String convertToXml(Object obj, String encoding) {
        String result = null;
        try {
            JAXBContext context = JAXBContext.newInstance(obj.getClass());
            Marshaller marshaller = context.createMarshaller();
            //格式化xml格式
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

            marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
            //去掉生成xml的默认报文头
            marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);

            StringWriter writer = new StringWriter();
            // 由于不能优雅的去掉 standalone="yes" 所以只能去掉整个头部,然后手动插入一个符合条件的头部   该行为不优雅需要进行升级
            writer.append("" + "n");
            marshaller.marshal(obj, writer);
            result = writer.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    
    @SuppressWarnings("unchecked")
    public static  T converyToJavaBean(String xml, Class c) {
        T t = null;
        try {
            JAXBContext context = JAXBContext.newInstance(c);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            t = (T) unmarshaller.unmarshal(new StringReader(xml));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return t;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/305886.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号