使用Apache Beam XmlIO读取带有名称空间声明的XML

时间:2019-03-26 22:26:45

标签: java xml jaxb apache-beam apache-beam-io

我试图将一组XML文件读入Apache Beam管道。一些元素具有名称空间,并且名称空间声明是在根节点上声明的。我已经使用标准的JAXB解析器编写了在Apache Beam之外解析此代码的代码。但是,当我对Beam使用XmlIO.read()函数时,会出现异常:com.ctc.wstx.exc.WstxParsingException:未声明的名称空间前缀“ zzz”。

xml的结构如下:

<root xmlns:zzz="...">
  <record/>
  <record/>
  ...
</root>

我花了几天时间寻找解决方案,却一无所获。

我的代码就像我看到的大多数示例一样设置:

        pipeline.apply(XmlIO.<Record>read()
                    .withRootElement("Root")
                    .withRecordElement("Record")
                    .withRecordClass(Record.class)
                    .from(Paths.get(".","Data", "file.xml").toString()))

我还设置了package-info.java批注

@XmlSchema (elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
        namespace = "http://www.zzz.org",
    xmlns = {  
        @XmlNs(prefix="zzz", namespaceURI="http://www.zzz.com/xml/zzz")
    }
  )
package com.jaxb;

您能提供的任何帮助将不胜感激。

0 个答案:

没有答案