当前位置: 首页 > 知识库问答 >
问题:

JAXB/MOXY中嵌套项解封的空值

步嘉德
2023-03-14

如有任何线索将不胜感激。谢谢,约翰

JAXBContext jc = JAXBContext.newInstance(Xmeml.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Xmeml xmeml = (Xmeml) unmarshaller.unmarshal(inFile);


@XmlRootElement(name = "sequence")
public class Sequence {

    @XmlElement(required = true)
    protected String name;
    @XmlElement(required = true)
    protected BigInteger duration;
    @XmlElement(required = true)
    protected Rate rate;
    @XmlElement(required = true)
    protected Timecode timecode;
    @XmlElement(required = true)
    protected BigInteger in;
    @XmlElement(required = true)
    protected BigInteger out;
    @XmlElement(required = true)
    protected Media media;



@XmlRootElement(name = "clipitem")
public class Clipitem {

    @XmlElement(required = true)
    protected String name;
    @XmlElement(required = true)
    protected BigInteger duration;
    @XmlElement(required = true)
    protected Rate rate;
    protected boolean enabled;
    @XmlElement(required = true)
    protected BigInteger in;
    @XmlElement(required = true)
    protected BigInteger out;
    @XmlElement(required = true)
    protected BigInteger start;
    @XmlElement(required = true)
    protected BigInteger end;
    @XmlElement(required = true)
    protected String masterclipid;
    protected boolean ismasterclip;
    @XmlElement(required = true)
    protected Labels labels;
    @XmlElement(required = true)
    protected Comments comments;
    @XmlElement(required = true)
    protected Sequence sequence;

XML是巨大的,但这里有一个片段,序列中的媒体是空的,而它不应该是空的。

    <track>
        <clipitem id="Nested Sequence">
            <name>Nested Sequence</name>
            <duration>815</duration>
            <rate>
                <ntsc>FALSE</ntsc>
                <timebase>25</timebase>
            </rate>
            <in>0</in>
            <out>815</out>
            <start>815</start>
            <end>1630</end>
            <sequence id="Nested Sequence1">
                <name>Nested Sequence</name>
                <duration>815</duration>
                <rate>
                    <ntsc>FALSE</ntsc>
                    <timebase>25</timebase>
                </rate>
                <timecode>
                    <rate>
                        <ntsc>FALSE</ntsc>
                        <timebase>25</timebase>
                    </rate>
                    <string>01:00:00:00</string>
                    <frame>90000</frame>
                    <source>source</source>
                    <displayformat>NDF</displayformat>
                </timecode>
                <in>-1</in>
                <out>-1</out>
                <media>
                    <video>
                        <format>
                            <samplecharacteristics>
                                <width>1920</width>
                                <height>1080</height>
                                <anamorphic>FALSE</anamorphic>
                                <pixelaspectratio>NTSC-601</pixelaspectratio>
                                <fielddominance>lower</fielddominance>
                                <rate>
                                    <ntsc>FALSE</ntsc>
                                    <timebase>25</timebase>
                                </rate>

共有1个答案

陈渊
2023-03-14

您的dom对象与XML不匹配。例如,序列的第一个元素是uuid,而bean的最后一个元素是uuid,“updateBehavior”将完全丢失。其他豆子也有类似的问题。附加的xml文档根本无法根据jaxb模型进行验证,这可能是无法正确读取它的原因。

从模型中获取架构:

JAXBContext con = JAXBContext.newInstance(Xmeml.class);
File dir = new File("D:\\Temp\\schema");
con.generateSchema(new MySchemaOutputResolver(dir));

class MySchemaOutputResolver extends SchemaOutputResolver {

    protected File baseDir;

    public MySchemaOutputResolver(File dir)
    {
        super();
        baseDir =  dir;
    }

    @Override
    public Result createOutput( String namespaceUri, String suggestedFileName ) throws IOException {
        return new StreamResult(new File(baseDir,suggestedFileName));
    }
}

在反编组时根据架构进行验证:

JAXBContext con = JAXBContext.newInstance(Xmeml.class);
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File("D:\\Temp\\schema\\schema1.xsd"));
Unmarshaller umar = con.createUnmarshaller();
umar.setSchema(schema);
Xmeml mem = (Xmeml)umar.unmarshal(new File("D:\\Temp\\testcase\\Surround Test.xml"));
 类似资料:
  • 在不使用getter和setter的情况下,JAXB可以正确地解组所提供的JSON。 null和“null”是完全不同的东西,但是我不想在POJO中包含这个字段,并且我必须忽略这些null值。 编辑

  • 问题内容: 我有两节课: 我想将类B编组为xml元素,并添加类A的属性fieldOfClassB和fieldOfClassA,但在编组期间会显示以下警告消息: 请注意,这两个类来自两个不同的程序包,我无法更改此对象模型。 先感谢您! 编辑: 我正在使用外部绑定文件。 问题答案: 从您发布的日志消息中,我可以看到您正在使用MOXy的外部映射文档(请参阅http://blog.bdoughan.com

  • 现在我有了这堂课: 并且我有: 如果运行此代码,将得到: 我该怎么解决这个? 我搜索了SO和Google,这些答案都不起作用: 使用Eclipselink.media-type值设置封送器属性时的PropertyException:Application/JSON JAXB javax.xml.bind.PropertyException

  • 我有以下类型,在架构中定义为: 生成的JAXB类: 使用此类型的一些JAXB类: 当我将此XML解组为JAXB对象时: 这份名单从何而来?info_analytics映射到没有任何集合/数组的类型。 如果我得到这个JSON,umarshall将其转换为JAXB对象,marshall转换为XML,它将生成: 为什么元素作为属性重复? XML:

  • 抱歉长帖,提前感谢! 在我的JAXB中(代码如下),我有一组值集,其中内部集被包装成一个容器类。所以,我有一组值容器,其中一个值是一个泛型类。问题:除非选择的泛型类是硬编码的,否则值不会得到解析。 关于XML的说明: >

  • 我在我的Jersey(2.7)项目中使用Moxy,基本上只是为了在服务发出响应时将我的对象整理为JSON。它工作得很好,但现在我也在使用ContainerResponseFilter对发出的每个响应进行一些更改,我不确定如何将请求体的内容解组到一个对象中,这是我需要的。 但我不确定是否有可能将它自动转换为一个对象。我需要的信息比较简单,所以我想我可以用另一种方式解析JSON,但我很好奇。 我试过找