* order 订单节点
public static final String NAMESPACE_CEB_URI = "http://www.chinaport.gov.cn/ceb";
* dep终端节点报文
public static final String NAMESPACE_DXP_URI = "http://www.chinaport.gov.cn/dxp";
* xsi规范
public static final String NAMESPACE_XSI_URI = "http://www.w3.org/2001/XMLSchema-instance";
* 签名节点xml
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> 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 {
* 系统唯一序号 企业系统生成36位唯一序号 (英文字母大写)
@XmlElement(namespace = NAMESPACE_CEB_URI)
private String guid;
* 报送类型 企业报送类型。1-新增 2-变 更 3-删除。
@XmlElement(namespace = NAMESPACE_CEB_URI)
private String appType;
* 报送时间 格式:YYYYMMDDhhmmss。
@XmlElement(namespace = NAMESPACE_CEB_URI)
private String appTime;
* 报送状态 企业报送状态。1-暂存,2-申 报。填写2时,Signature节点必须 填写。
@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 {
* 序号 从1开始递增
@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;
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;
* 报文传输模式 默认为DXP;指中国电子口岸数据交换平台
@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;
* java2xml 工具类
public class JaxbUtils {
* 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();
// 由于不能优雅的去掉 standalone="yes" 所以只能去掉整个头部,然后手动插入一个符合条件的头部 该行为不优雅需要进行升级
writer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "\n");
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;
近期在对接海关的订单出口报文,从网上找了挺多的案例,下面做一个记录1、文件目录结构如下图所示2、各文件代码2.1、NameSpace类/** * xml 命名空间 */public class NameSpace { /** * order 订单节点 */ public static final String NAMESPACE_CEB_URI = "http://www.chinaport.gov.cn/ceb"; /** * d
代码如下(示例):
StringBuffer str = new StringBuffer();
str.append("<?xml version=“1.0” encoding=“utf-8”?> ");
str.append("<request>");
str.append("<name>");// 内容开始标签
方法一:StringBuffer
public static void write
Xml(){
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("<?
xml version=\"1.0\" encoding=\"utf-8\" ?>"+"\t\n");
stringBuffer.append("<class>"+"\t\n");
Java如何组装XML报文
在Java开发中,我们经常需要与外部系统进行数据交换,XML作为一种轻量级的数据交换格式,因其结构清晰、易于扩展等特点,被广泛应用于各种场景中。本文将介绍如何在Java中组装XML报文,并提供一个实际问题的解决方案。
假设我们需要向一个外部系统发送一个订单信息,订单信息包括订单号、客户...
public static String formatDataTo
Xml(Map mapdData) {
StringBuffer
xml = new StringBuffer();
xml.append("<?
xml version=\...
在Java中,可以使用DOM(文档对象模型)或者JAXB(Java Architecture for XML Binding)等技术来组装XML报文。
DOM技术是一种基于树结构的API,通过构建一个DOM树来表示XML文档。在Java中,可以使用javax.xml.parsers包中的DocumentBuilder类来解析XML文档,并使用org.w3c.dom包中的相关类来创建和操作DOM树。我们可以通过创建元素、属性、文本节点等来构建XML报文的各个部分,然后将这些部分按照一定的顺序组装起来,最后将DOM树转换为字符串形式的XML报文。
JAXB技术则是一种Java对象与XML数据之间的映射技术,它是基于注解的。我们可以通过在Java类中添加注解,告诉JAXB如何将Java对象映射到XML,并通过调用JAXB提供的API来完成对象与XML之间的转换。在组装XML报文时,我们只需要创建对应的Java对象,并设置其属性值,然后通过JAXB提供的转换方法将Java对象转换为XML报文。
无论是使用DOM还是JAXB,组装XML报文的步骤大致相同:首先创建根元素,然后根据XML报文的结构,在根元素下逐步创建子元素和属性,并设置其值。最后将DOM树或者Java对象转换为字符串形式的XML报文。