Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用SAX初始化JAXB_Java_Xml_Jaxb - Fatal编程技术网

Java 如何使用SAX初始化JAXB

Java 如何使用SAX初始化JAXB,java,xml,jaxb,Java,Xml,Jaxb,我正在尝试使用JAXB和SAX来解组xml到java对象。我在构造函数中编写了这段代码 logger.debug("Initializing jaxb..."); try { jaxbContext = JAXBContext.newInstance(ProductInventory.class); jaxbUnmarshaller = jaxbContext.createUnmarshaller(); SA

我正在尝试使用JAXB和SAX来解组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);
        }

当出现多个请求时,
读卡器
对象是否有问题?我是否必须始终获得
阅读器的参考?我的意思是,对于每一个解组操作,我都必须获得一个新的xml读取器吗?

当将SAX与JAXB一起使用时,您可以利用
解组器而不是
解组器

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

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

解析多个XML文档,多个线程将访问相同的代码。那么我应该在本地声明解组器吗?我的意思是请求的方式