如何使用SAX初始化JAXB

时间:2013-12-09 06:59:00

标签: java xml jaxb

我正在尝试使用带有SAX的JAXB将xml解组为java对象。我在构造函数中编写了这段代码。

logger.debug("Initializing jaxb...");
        try {
            jaxbContext = JAXBContext.newInstance(ProductInventory.class);
            jaxbUnmarshaller = jaxbContext.createUnmarshaller();
            SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
            reader = saxParserFactory.newSAXParser().getXMLReader();
            EntityResolver entityResolver = new EntityResolver() {
                @Override
                public InputSource resolveEntity(String publicId,
                        String systemId) {
                    return new InputSource(new StringReader(""));
                }
            };
            reader.setEntityResolver(entityResolver);
            logger.debug("Successfully initialized jaxb.");
        } catch (JAXBException | SAXException | ParserConfigurationException e) {
            logger.error("Exception while initializing JAXB", e);
        }

多个请求到来时,reader对象是否有问题?我是否必须始终获得reader的引用?我的意思是每次unmarshall行动我都需要一个新的xml阅读器吗?

1 个答案:

答案 0 :(得分:0)

将SAX与JAXB一起使用时,您可以使用UnmarshallerHandler而不是Unmarshaller

UnmarshallerHandler unmarshallerHandler = unmarshaller.getUnmarshallerHandler();
reader.setContentHandler(unmarshallerHandler);
reader.parse(xml);
Foo foo = (Foo) unmarshallerHandler.getResult();

UnmarshallerHandler不是线程安全的,所以请确保没有线程共享它。您可以使用相同的XMLReader

解析多个XML文档