使用JAVA对接跨境贸易电子商务数据交换接口拼接xml

使用JAVA对接跨境贸易电子商务数据交换接口拼接xml


1.首先创建一个package-info.java 其中添加一下内容

/**
 * package-info.java
 * 放在和实体同一个包路径下
 */
@XmlSchema(
        xmlns = {
                @XmlNs(prefix = "ceb", namespaceURI = NAMESPACE_CEB_URI),
                @XmlNs(prefix = "xsi", namespaceURI = NAMESPACE_XSI_URI)
        }

)
package com.real.common.utils.test01.model;

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

import static com.real.common.utils.test01.test02.NameSpace.NAMESPACE_CEB_URI;
import static com.real.common.utils.test01.test02.NameSpace.NAMESPACE_XSI_URI;


2.创建相应的javabean (注意:凡是需要使用命名空间作为节点的javabean,都需要和package-info.java在同一包路径下)

package com.real.common.utils.test01.model;

import lombok.Data;

import javax.xml.bind.annotation.*;

import static com.real.common.utils.test01.test02.NameSpace.NAMESPACE_CEB_URI;

/**
 * Entity
 */
@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "CEB311Message", namespace = NAMESPACE_CEB_URI)
public class CEB311Message {
    @XmlElement(name = "Order", namespace = NAMESPACE_CEB_URI)
    private Order order;

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

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

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

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

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

}
package com.real.common.utils.test01.model;

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;

import static com.real.common.utils.test01.test02.NameSpace.NAMESPACE_CEB_URI;

@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> orderList;

}
package com.real.common.utils.test01.model;


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 static com.real.common.utils.test01.test02.NameSpace.NAMESPACE_CEB_URI;

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

    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String guid;//   1-系统唯一序号-guid-C36-是-企业系统生成36位唯一序号(英文字母大写)。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String appType;//      2-报送类型-appType-C1-是-企业报送类型。1-新增
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String appTime;// 3-报送时间-appTime-C14-是-企业报送时间。格式:YYYYMMDDhhmmss。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String appStatus;//         4-业务状态-appStatus-C..3-是-业务状态:1-暂存,2-申报,默认为2。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String orderType;//   5-订单类型-orderType-C1-是-电子订单类型:I进口
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String orderNo;// 6-订单编号-orderNo-C..60-是-交易平台的订单编号,同一交易平台的订单编号应唯一。订单编号长度不能超过60位。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String ebpCode;//       7-电商平台代码-ebpCode-C..18-是-电商平台的海关注册登记编号;电商平台未在海关注册登记,由电商企业发送订单的,以中国电子口岸发布的电商平台标识编号为准。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String ebpName;//     8-电商平台名称-ebpName-C..100-是-电商平台的海关注册登记名称;电商平台未在海关注册登记,由电商企业发送订单的,以中国电子口岸发布的电商平台名称为准。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String ebcCode;//         9-电商企业代码-ebcCode-C..18-是-电商企业的海关注册登记编号。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String ebcName;//        10-电商企业名称-ebcName-C..100-是-电商企业的海关注册登记名称。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String goodsValue;//         11-商品价格-goodsValue-N16,2-是-商品实际成交价,含非现金抵扣金额。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String freight;//       12-运杂费-freight-N16,2-是-不包含在商品价格中的运杂费,无则填写"0"。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String discount;//      13-非现金抵扣金额-discount-N16,2-是-使用积分、虚拟货币、代金券等非现金支付金额,无则填写"0"。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String taxTotal;//         14-代扣税款-taxTotal-N16,2-是-企业预先代扣的税款金额,无则填写“0”
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String acturalPaid;//        15-实际支付金额-acturalPaid-N16,2-是-商品价格+运杂费+代扣税款-非现金抵扣金额,与支付凭证的支付金额一致。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String currency;//       16-币制-currency-C3-是-限定为人民币,填写“142”。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String buyerRegNo;//        17-订购人注册号-buyerRegNo-C..60-是-订购人的交易平台注册号。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String buyerName;//        18-订购人姓名-buyerName-C..60-是-订购人的真实姓名。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String buyerIdType;//      19-订购人证件类型-buyerIdType-C1-是-1-身份证,2-其它。限定为身份证,填写“1”。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String buyerIdNumber;//       20-订购人证件号码-buyerIdNumber-C..60-是-订购人的身份证件号码。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String payCode;//     21-支付企业代码-payCode-C..18-否-支付企业的海关注册登记编号。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String payName;//      22-支付企业名称-payName-C..100-否-支付企业在海关注册登记的企业名称。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String payTransactionId;//      23-支付交易编号-payTransactionId-C..60-是-支付企业唯一的支付流水号。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String batchNumbers;//      24-商品批次号-batchNumbers-C..100-否-商品批次号。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String consignee;//      25-收货人姓名-consignee-C..100-是-收货人姓名,必须与电子运单的收货人姓名一致。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String consigneeTelephone;//      26-收货人电话-consigneeTelephone-C..50-是-收货人联系电话,必须与电子运单的收货人电话一致。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String consigneeAddress;//      27-收货地址-consigneeAddress-C..200-是-收货地址,必须与电子运单的收货地址一致。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String consigneeDitrict;//      28-收货地址行政区划代码-consigneeDitrict-C6-否-参照国家统计局公布的国家行政区划标准填制。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String note;//      29-备注-note-C..1000-否-
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String copNo;//     30-企业内部编号-copNo-C..20-是-企业内部标识单证的编号。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String assureCode;//      31-担保企业编号-assureCode-C..30-是-担保扣税的企业海关注册登记编号,只限清单的电商平台企业、电商企业、物流企业。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String buyerTelephone;//      32-订购人电话-buyerTelephone-C..30-是-订购人电话。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String country;//     33-起运国(地区)-country-C3-是-直购进口填写起始发出国家(地区)代码,参照《JGS-20 海关业务代码集》的国家(地区)代码表;保税进口填写代码“142”。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String netWeight;//     34-净重(公斤)-netWeight-N19,5-是-货物的毛重减去外包装材料后的重量,即货物本身的实际重量,计量单位为千克。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String agentCode;//     35-报关企业海关编码-agentCode-C..18-是-点上委托报关企业的海关编码
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String logisticsCode;// 36-物流企业代码-logisticsCode-C..18-是-物流企业的海关注册登记编号。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String logisticsNo;//    37-物流运单编号-logisticsNo-C..60-否-物流企业的运单包裹面单号。同一物流企业的运单编号在6个月内不重复。运单编号长度不能超过60位。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String isBuyAndPut;//     38-即买即提-isBuyAndPut-C1-是-Y:即买即提 N:不是即买即提
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String areaId;//  39-店铺海关编码-areaId-C..18-否-即买即提货物必须填写


}
package com.real.common.utils.test01.model;


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 static com.real.common.utils.test01.test02.NameSpace.NAMESPACE_CEB_URI;

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


    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private Integer gnum;//  1-商品序号-gnum-N2-是-从1开始的递增序号。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String itemNo;//           2-企业商品货号-itemNo-C..30-是-电商企业自定义的商品货号(SKU)。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String itemName;//            3-企业商品名称-itemName-C..250-是-交易平台销售商品的中文名称。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String itemDescribe;//           4-企业商品描述-itemDescribe-C..1000-否-交易平台销售商品的描述信息。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String barCode;//           5-条形码-barCode-C..50-否-国际通用的商品条形码,一般由前缀部分、制造厂商代码、商品代码和校验码组成。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String unit;//           6-单位-unit-C3-是-填写海关标准的参数代码,参照《JGS-20 海关业务代码集》- 计量单位代码。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String qty;//           7-数量-qty-N16,2-是-商品实际数量。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String price;//           8-单价-price-N16,2-是-商品单价。赠品单价填写为“0”。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String totalPrice;//           9-总价-totalPrice-N16,2-是-商品总价,等于单价乘以数量。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String currency;//          10-币制-currency-C3-是-限定为人民币,填写“142”。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String country;//          11-原产国-country-C3-是-填写海关标准的参数代码,参照《JGS-20 海关业务代码集》-国家(地区)代码表。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String note;//           12-备注-note-C..1000-否-促销活动,商品单价偏离市场价格的,可以在此说明。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String gcode;//          13-商品编码-gcode-C10-是-按商品分类编码规则确定的进出口商品的商品编号,分为商品编号和附加编号,其中商品编号栏应填报《中华人民共和国进出口税则》8位税则号列,附加编号应填报商品编号,附加编号第9、10位。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String gmodel;//          14-商品规格型号-gmodel-C..250-是-满足海关归类、审价以及监管的要求为准。包括:品牌、规格、型号等。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String qty1;//          15-法定数量-qty1-N19,5-是-按照商品编码规则对应的法定计量单位的实际数量填写。
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String unit1;//           16-法定计量单位-unit1-C3-是-海关标准的参数代码 《JGS-20 海关业务代码集》- 计量单位代码
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String unit2;//       17-第二法定单位-unit2-C3-否-海关标准的参数代码 《JGS-20 海关业务代码集》- 计量单位代码
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String qty2;//  18-第二法定数量-qty2-N19,5-否-
    @XmlElement(namespace = NAMESPACE_CEB_URI)
    private String gname;//            19-商品名称-gname-C..250-是-商品名称应据实填报,与电子订单一致。
}

3.运行文件及其他内容如下

package com.real.common.utils.test01.test02;

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

/**
 * Jaxb2工具类
 *
 * @author zhuc
 * @create 2013-3-29 下午2:40:14
 */
public class JaxbUtil {
    /**
     * JavaBean转换成xml
     * 默认编码UTF-8
     *
     * @param obj
     * @return
     */
    public static String convertToXml(Object obj) {
        return convertToXml(obj, "UTF-8");
    }

    /**
     * JavaBean转换成xml
     *
     * @param obj
     * @param encoding
     * @return
     */
    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();
            writer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "\n    ");  // 由于不能优雅的去掉 standalone="yes" 所以只能去掉整个头部,然后手动插入一个符合条件的头部   该行为不优雅需要进行升级
            marshaller.marshal(obj, writer);
            result = writer.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * xml转换成JavaBean
     *
     * @param xml
     * @param c
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T converyToJavaBean(String xml, Class<T> 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;
    }
}
package com.real.common.utils.test01.test02;

public class NameSpace {
    public static final String NAMESPACE_CEB_URI = "http://www.chinaport.gov.cn/ceb";
    public static final String NAMESPACE_XSI_URI = "http://www.w3.org/2001/XMLSchema-instance";
}

package com.real.common.utils.test01.test02;

import com.real.common.utils.test01.model.CEB311Message;
import com.real.common.utils.test01.model.Order;
import com.real.common.utils.test01.model.OrderHead;
import com.real.common.utils.test01.model.OrderList;
import org.junit.Test;

import javax.xml.bind.JAXBException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author zhuc
 * @create 2013-3-29 下午2:50:00
 */
public class JaxbTest1 {
    /**
     * @throws JAXBException
     */
    @Test
    public void showMarshaller() {
        CEB311Message ceb311Message = new CEB311Message();
        ceb311Message.setGuid("556E1CFD-EDED-46B1-946C-B8022E42FC94");
        ceb311Message.setVersion("1.0");
        Order order = new Order();

        OrderHead orderHead = new OrderHead();
        orderHead.setGuid("556E1CFD-EDED-46B1-946C-B8022E42FC94");

        order.setOrderHead(orderHead);



        List<OrderList> orderList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            OrderList orderItem = new OrderList();
            orderItem.setCurrency(i + "");
            orderItem.setCountry(i + "");
            orderList.add(orderItem);
        }


        order.setOrderList(orderList);

        ceb311Message.setOrder(order);

        String str = JaxbUtil.convertToXml(ceb311Message);
        System.out.println(str);
    }

}

4.其结果如下

<?xml version="1.0" encoding="UTF-8"?>
    <ceb:CEB311Message guid="556E1CFD-EDED-46B1-946C-B8022E42FC94" version="1.0" xmlns:ceb="http://www.chinaport.gov.cn/ceb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ceb:Order>
        <ceb:OrderHead>
            <ceb:guid>556E1CFD-EDED-46B1-946C-B8022E42FC94</ceb:guid>
        </ceb:OrderHead>
        <ceb:OrderList>
            <ceb:currency>0</ceb:currency>
            <ceb:country>0</ceb:country>
        </ceb:OrderList>
        <ceb:OrderList>
            <ceb:currency>1</ceb:currency>
            <ceb:country>1</ceb:country>
        </ceb:OrderList>
        <ceb:OrderList>
            <ceb:currency>2</ceb:currency>
            <ceb:country>2</ceb:country>
        </ceb:OrderList>
        <ceb:OrderList>
            <ceb:currency>3</ceb:currency>
            <ceb:country>3</ceb:country>
        </ceb:OrderList>
        <ceb:OrderList>
            <ceb:currency>4</ceb:currency>
            <ceb:country>4</ceb:country>
        </ceb:OrderList>
        <ceb:OrderList>
            <ceb:currency>5</ceb:currency>
            <ceb:country>5</ceb:country>
        </ceb:OrderList>
        <ceb:OrderList>
            <ceb:currency>6</ceb:currency>
            <ceb:country>6</ceb:country>
        </ceb:OrderList>
        <ceb:OrderList>
            <ceb:currency>7</ceb:currency>
            <ceb:country>7</ceb:country>
        </ceb:OrderList>
        <ceb:OrderList>
            <ceb:currency>8</ceb:currency>
            <ceb:country>8</ceb:country>
        </ceb:OrderList>
        <ceb:OrderList>
            <ceb:currency>9</ceb:currency>
            <ceb:country>9</ceb:country>
        </ceb:OrderList>
    </ceb:Order>
</ceb:CEB311Message>

希望以上内容对大家有用

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值