当前位置: 首页 > 知识库问答 >
问题:

Java JAXB unmarshaller链接异常

宗政博
2023-03-14
public void xmlParser() {
    try {
        Acquirer acquirer = (Acquirer) readXml(Constants.XML_PATH);
        System.out.println(acquirer.getDate());
    } catch (JAXBException | IOException e) {
        e.printStackTrace();
    }
}

/**
 * Initializes of JAXB Context and Unmarshaller.
 */
private static void createContext() {
    try {
        jaxbContext = JAXBContext.newInstance("com.test.xml.generated");
        unmarshaller = jaxbContext.createUnmarshaller();
    } catch (JAXBException e) {
        e.printStackTrace();
    }
}

/**
 * This reads the XML file from the resources in ClassPath.
 *
 * @param xmlFile XML file name as String with relative ClassPath
 * @return Unmarashalled XML file
 * @throws JAXBException
 * @throws IOException
 * @throws Exception
 */
public Object readXml(String xmlFile) throws JAXBException, IOException {
    if (jaxbContext == null) {
        createContext();
    }

    InputStream stream = getClass().getClassLoader().getResourceAsStream(xmlFile);
    BufferedInputStream buffredStream = new BufferedInputStream(stream);

***Error:***
    Object obj = unmarshaller.unmarshal(buffredStream);
    buffredStream.close();
    stream.close();
    return obj;

 }
javax.xml.bind.UnmarshalException - with linked exception:
[java.io.IOException: Stream closed]
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:246)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:214)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:125)

constants.xml_path=“/acquirer.xml”;

共有1个答案

林烨华
2023-03-14

只需更改:

InputStream stream = getClass().getClassLoader().getResourceAsStream(xmlFile);

在:

InputStream stream = getClass().getResourceAsStream(xmlFile);

因为当您使用getClass().getClassLoader().getResourceAsStream(xmlFile)时,它返回null(找不到资源),并且BufferedInputStream然后在向构造函数提供null而不是输入流实例时抛出IOException

 类似资料:
  • 问题内容: 有没有在Python中使用异常链的标准方法?就像Java异常“引起”一样? 这是一些背景。 我有一个具有一个主要异常类的模块: 在此模块中的某处将有: 基本上,此代码段仅应引发DSError并告诉我发生了什么以及为什么。问题是try块可能会引发许多其他异常,因此我更愿意执行以下操作: 这是标准的pythonic方法吗?我没有在其他模块中看到异常链,那么如何在Python中完成? 问题答

  • 本文向大家介绍异步连接减少(ACL)链接,包括了异步连接减少(ACL)链接的使用技巧和注意事项,需要的朋友参考一下 蓝牙链路层定义了两种类型的数据链路,其中一种是异步无连接(ACL)链路。它是用于通过蓝牙连接传输常规数据包的链接类型。ACL是点对点的多点链接,用于在主设备和一个或多个从设备之间进行不规则通信。 蓝牙ACL链接的功能 ACL是面向数据包的链接,即该链接建立了一个数据包交换网络。 AC

  • 应用程序通常会通过抛出另一个异常来响应异常。 实际上,第一个异常引起第二个异常。 它可以是非常有助于用户知道什么时候一个异常导致另一个异常。 “异常链(Chained Exceptions)”帮助程序员做到这一点。 以下是Throwable中支持异常链的方法和构造函数。 Throwable getCause() Throwable initCause(Throwable) Throwable(St

  • 本文向大家介绍data-structures 异或链接列表,包括了data-structures 异或链接列表的使用技巧和注意事项,需要的朋友参考一下 示例 一个异或链表也被称为内存效率链表。这是双向链接列表的另一种形式。这高度依赖于XOR逻辑门及其属性。 为什么将其称为“内存有效链表”? 之所以这样称呼,是因为与传统的双向链表相比,它使用的内存更少。 这与双向链接列表不同吗? 是的,是的。 甲双

  • 问题内容: 我不明白在代码中具有链接异常的好处。 考虑到Java世界中的ResourceLoader示例,如果程序员知道遇到这种情况的可能性,为什么不捕获相同的异常呢?否则,程序员不必抛出新的实例,就可以在同一代码中捕获这两个异常? 问题答案: 任何人都可以提供有关需要链接异常的信息吗? 文章说得很好: 异常链接允许您将一种异常类型映射到另一种异常类型,以便方法可以抛出与该方法本身处于相同抽象级别

  • 有没有一种更理智的方法来编程以下超级简单的设置/获取/关闭测试程序?请注意,我必须复制 Redis 关闭代码,并将其包含在设置错误路径和获取完整路径中。