java.io.IOException:使用JAXBContext解组时流关闭
我编写了一个unmarshal方法,它由一组并行运行的测试访问,以从XML文件读取数据 此方法位于添加到我的主模块的maven commons依赖模块中。 我正面临java.io.IOException:流关闭异常以一种非常不一致的方式出现,并且无法在本地复制它。只有当我的测试在Jenkins的CI中运行时才会发生这种情况,而且这种情况并不经常发生。代码如下java.io.IOException:使用JAXBContext解组时流关闭,java,xml,unmarshalling,ioexception,Java,Xml,Unmarshalling,Ioexception,我编写了一个unmarshal方法,它由一组并行运行的测试访问,以从XML文件读取数据 此方法位于添加到我的主模块的maven commons依赖模块中。 我正面临java.io.IOException:流关闭异常以一种非常不一致的方式出现,并且无法在本地复制它。只有当我的测试在Jenkins的CI中运行时才会发生这种情况,而且这种情况并不经常发生。代码如下 public <T> Object internalUnmarshal(String url, Class<T>
public <T> Object internalUnmarshal(String url, Class<T> clazz)
throws JAXBException,DataException, ClassNotFoundException,IOException
{
InputStream is = getClass().getResourceAsStream(url);
try {
if (is == null) {
throw new DataException("''{0}'' not found.", url);
}
JAXBContext jaxbContext = JAXBContext
.newInstance(Class.forName(clazz.getCanonicalName());
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
return unmarshaller.unmarshal(is);
} catch (JAXBException e) {
throw new JAXBException(e);
} finally {
is.close();
}
}
堆栈跟踪如下:-
[javax.xml.bind.UnmarshalException
- with linked exception:
[java.io.IOException: Stream closed]]
at com.paydiant.commons.data.unmarshalers.XMLUnmarshaler.internalUnmarshal(XMLUnmarshaler.java:116)
at com.paydiant.commons.data.unmarshalers.XMLUnmarshaler.resloveToUnmarshaledObjectList(XMLUnmarshaler.java:76)
at com.paydiant.commons.data.unmarshalers.XMLUnmarshaler.doUnmarshalObjects(XMLUnmarshaler.java:36)
... 67 more
Caused by: javax.xml.bind.UnmarshalException
- with linked exception:
[java.io.IOException: Stream closed]
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:261)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:229)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:204)
at com.paydiant.commons.data.unmarshalers.XMLUnmarshaler.internalUnmarshal(XMLUnmarshaler.java:112)
... 69 more
Caused by: java.io.IOException: Stream closed
at java.util.zip.InflaterInputStream.ensureOpen(InflaterInputStream.java:67)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:121)
at java.io.FilterInputStream.read(FilterInputStream.java:83)
at java.io.FilterInputStream.read(FilterInputStream.java:83)
at org.apache.xerces.impl.XMLEntityManager$RewindableInputStream.read(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:258)
... 73 more
有什么想法可能会导致这种情况吗?这是通过调用另一个解包器构造函数Unmarshaller.unmarshal(新StringReader(contents)),修复的;其中内容是一个字符串。
[javax.xml.bind.UnmarshalException
- with linked exception:
[java.io.IOException: Stream closed]]
at com.paydiant.commons.data.unmarshalers.XMLUnmarshaler.internalUnmarshal(XMLUnmarshaler.java:116)
at com.paydiant.commons.data.unmarshalers.XMLUnmarshaler.resloveToUnmarshaledObjectList(XMLUnmarshaler.java:76)
at com.paydiant.commons.data.unmarshalers.XMLUnmarshaler.doUnmarshalObjects(XMLUnmarshaler.java:36)
... 67 more
Caused by: javax.xml.bind.UnmarshalException
- with linked exception:
[java.io.IOException: Stream closed]
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:261)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:229)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:204)
at com.paydiant.commons.data.unmarshalers.XMLUnmarshaler.internalUnmarshal(XMLUnmarshaler.java:112)
... 69 more
Caused by: java.io.IOException: Stream closed
at java.util.zip.InflaterInputStream.ensureOpen(InflaterInputStream.java:67)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:121)
at java.io.FilterInputStream.read(FilterInputStream.java:83)
at java.io.FilterInputStream.read(FilterInputStream.java:83)
at org.apache.xerces.impl.XMLEntityManager$RewindableInputStream.read(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:258)
... 73 more