一个项目中需要从HTTP中读取XML 同步数据到数据库中,在大量数据的压力测试下,发现有数据丢失
经过调试发现在控制台产生异常: FWK005
进一步定位发现在解析XML的时候,xml inputstream为空
之前的代码:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
private static DocumentBuilderFactory factory = null;
private static DocumentBuilder builder = factory.newDocumentBuilder();
if ( factory == null )
{
try
{
factory = DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
}catch (Exception e){}
}
到sun(oracle)上查询j2ee1.4api文档,发现DocumentBuilder DocumentBuilderFactory不能保证线程安全,所以使用一个parser解析多个xml inputstream时,会有问题
解决方法:
每次解析XML inputstream,使用一个新的parser来解析
DocumentBuilder builder = null;
if ( factory == null ){
//DocumentBuilderFactory 单例
factory = DocumentBuilderFactory.newInstance();
}
//每次new一个Builder
builder = factory.newDocumentBuilder();
分享到:
相关推荐
Java线程、线程池和XML解析是Java编程中至关重要的三个概念,它们在实际开发中扮演着不可或缺的角色。下面将分别对这三个主题进行深入的介绍。 首先,我们来看Java线程。线程是程序执行的最小单位,一个进程可以...
标题和描述中提到的“基于多核处理器的VTD-XML解析性能优化”是指在处理XML文档时,利用多核处理器的优势,通过多线程技术和内存访问优化来提升XML解析器的性能。XML(可扩展标记语言)是用于数据交换和结构化数据...
6. **线程安全与性能**:在处理大量日志文件时,可能需要考虑多线程并发处理。可以使用`ExecutorService`和`Future`来管理和控制并发任务。同时,确保数据库连接池和资源管理的正确性,避免内存泄漏和资源浪费。 在...
在Android环境中,我们通常会在后台线程(如AsyncTask)中执行网络请求和XML解析,以避免阻塞UI线程。同时,由于网络请求可能失败,我们需要添加异常处理机制,确保程序的健壮性。 总结来说,"google天气预报XML-...
下面将详细介绍XML解析在Android中的应用和相关知识点。 1. XML简介: XML(eXtensible Markup Language)是一种标记语言,用于存储和传输结构化数据。与HTML不同,XML设计的主要目的是传输和存储数据,而不是显示...
快速XML(quick-xml)是Rust编程语言中的一款高效XML处理库,专注于提供快速的XML解析和序列化能力。这款库设计时考虑了性能优化,使得在处理大量XML数据时能够表现出色,同时保持代码简洁和易于使用。在本文中,...
3. **线程安全**:Xerces-C++支持多线程环境,但在多线程应用中,需要正确管理和同步解析器实例。 总结,Xerces-C++ XML解析器为Linux平台上的C++开发者提供了一个强大且灵活的工具,它不仅支持XML的读写,还具备...
XML解析器则是处理XML文档的核心组件,它读取XML文档并将其转换为程序可以理解的数据结构。"XML-Parser-2.4.4"是基于C语言实现的一个XML解析库,具有高度的可移植性,能够在多种操作系统和平台上运行。 XML-Parser-...
实验结果显示,提出的多线程XML文档解析框架能有效利用多核处理器的计算资源,显著提升了线程的内存访问性能,从而大幅提高了XML节点查询的执行效率。这表明,在多核处理器环境下,采用VTD-XML并优化其执行策略是...
TinyXML 是一个轻量级的开源 XML 解析库,专为 C++ 设计,可以在 Windows 和 Linux 平台上编译。它提供了简单的 API,使得 XML 文档解析变得容易上手。TinyXML 将 XML 文件解析成内存中的 DOM(文档对象模型)结构,...
4. **XML解析-rapidxml**: `rapidxml` 是一个轻量级的C++ XML解析库,它强调速度和内存效率。它不依赖于外部库,可以快速解析XML文档,并提供API来访问和操作XML节点。开发者可以使用`rapidxml`轻松地读取和修改...
`GDataXML`是Google提供的一个XML解析库,它提供了一个更友好的API,使解析XML文档更加简单。而`NSXMLParser`是Apple提供的解析器,虽然使用起来稍复杂些,但同样能够完成XML解析任务。在处理XML数据时,你需要创建...
在本教程中,我们将深入探讨如何在Android Studio项目中使用Retrofit与simplexml库一起解析XML数据。简单XML库(Simple XML)是Java中一个轻量级、高效的XML序列化和反序列化库,非常适合处理XML格式的数据。 首先...
在实际项目中,可能还需要考虑线程安全、连接池管理、日志记录等其他因素。以上步骤提供了一个基本的框架,但具体实现可能需要根据实际XML结构和数据库设计进行调整。记得在完成后,关闭所有打开的数据库连接和流,...
标题中的"C# 服务 多线程 XML读写"涵盖了几个关键的编程概念,下面将分别详细介绍这些知识点。 首先,让我们来谈谈"C#"。C#是微软开发的一种面向对象的编程语言,它广泛用于构建Windows应用程序、Web应用程序、游戏...
### C++ XML解析之TinyXML篇 #### 一、TinyXML简介 TinyXML是一个轻量级的XML解析库,主要用于C++编程语言。它能够轻松地解析XML文档,并且生成DOM(Document Object Model,文档对象模型)供用户访问。TinyXML...
Xerces-C++ 3.0.1是这样一个开源的XML解析库,它为开发者提供了全面的XML处理能力,包括解析、验证和生成XML文档。 Xerces-C++库的核心特性在于它的灵活性和高效性。这个库实现了W3C的DOM(Document Object Model)...
要使用Volley进行XML解析,我们需要创建一个自定义的Request子类,例如`XMLRequest`,继承自`Request<XmlPullParser>`。`XmlPullParser`是Android提供的一个接口,用于解析XML文档。在`XMLRequest`中,重写`...
由于Pull解析器是线程安全的,可以在多个线程中复用,提高效率。同时,避免在解析过程中创建大量临时对象,以减少内存分配。 通过以上步骤,我们可以构建一个功能完备、易于使用的XML Pull解析工具。在实际应用中...