JAXB可以为命名空间设置别名

时间:2014-01-13 12:27:47

标签: java jaxb

我有一个xml文档,它遵循一些xml架构。不幸的是,问题是xml架构命名空间已经改变,所以现在我在命名空间foo和文档中有一个模式来声明命名空间栏。我使用xjc为模式创建jaxb类,因此它们绑定到名称空间foo。

是否可以创建一个jaxb unmarshaller,它可以使用相同的xjc生成的类解组名称空间foo和bar中的两个文档?

我希望您可以在JaxbContext中定义一些属性,它们可以说命名空间foo和bar是相同的......有没有人知道Jaxb提供程序是否支持这样的东西?

1 个答案:

答案 0 :(得分:2)

您可以使用SAX XMLFilter来调整命名空间。

import org.xml.sax.*;
import org.xml.sax.helpers.XMLFilterImpl;

public class NamespaceFilter extends XMLFilterImpl {

    private static final String NAMESPACE = "http://www.example.com/ORIGINAL/NAMESPACE";

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        super.endElement(NAMESPACE, localName, qName);
    }

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes atts) throws SAXException {
        super.startElement(NAMESPACE, localName, qName, atts);
    }

}

然后使用带有SAX解析器的JAXB UnmarshallerHandler来处理输入。

了解更多信息