在 JaxB 编组期间将字符串截断到最大限制

Posted

技术标签:

【中文标题】在 JaxB 编组期间将字符串截断到最大限制【英文标题】:Truncate string to max limit during JaxB marshalling 【发布时间】:2021-10-23 12:48:40 【问题描述】:

如果字符串大小超过 XSD 中定义的最大大小,我需要截断 XML 中字符串的大小。在 JAXB 中有没有一种方法可以直接截断编组时的字符串,而不是手动验证对象中的每个属性并截断数据。

【问题讨论】:

【参考方案1】:

你可以使用@XmlJavaTypeAdapter

https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/adapters/XmlJavaTypeAdapter.html

类似这样的:

public class TruncatorAdapter extends XmlAdapter<String, String> 
    Integer maxLen=...;
    /*Java => XML*/
    public String marshal(String val) throws Exception 
        return val.substring(0,maxLen);
    
    /*XML => Java*/
    public String unmarshal(String val) throws Exception 
        return val;
    

【讨论】:

谢谢。但在这种情况下,最大长度是固定的,不是动态的吗?我不能在具有不同最大长度值的多个字符串中使用它? 一个简单的解决方案是实现不同长度的不同类。公共类 TruncatorAdapter10 扩展 TruncatorAdapter public TruncatorAdapter10 () super(10); 抄送...

以上是关于在 JaxB 编组期间将字符串截断到最大限制的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JAXB2 用动态元素编组 XML

如何在使用 jaxb 进行编组时删除额外的转义字符

JAXB 编组:更改应声明命名空间的元素

JAXB 继承,解组到编组类的子类

如何使用 jaxb 将 xml 字符串解组为 java 对象

如何将 JAXB 对象编组到 org.w3c.dom.Document?