首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用SAX初始化JAXB

如何使用SAX初始化JAXB
EN

Stack Overflow用户
提问于 2013-12-09 14:59:00
回答 1查看 175关注 0票数 1

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

代码语言:javascript
运行
复制
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的引用吗?我的意思是,对于每个解组操作,我必须获得一个新的xml阅读器吗?

EN

回答 1

Stack Overflow用户

发布于 2013-12-10 03:57:07

在使用SAX和JAXB时,您利用的是UnmarshallerHandler而不是Unmarshaller

代码语言:javascript
运行
复制
UnmarshallerHandler unmarshallerHandler = unmarshaller.getUnmarshallerHandler();
reader.setContentHandler(unmarshallerHandler);
reader.parse(xml);
Foo foo = (Foo) unmarshallerHandler.getResult();

UnmarshallerHandler不是线程安全的,所以请确保没有线程共享它。您可以使用相同的XMLReader解析多个XML文档。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20464911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档