JAXB:Unmarshaller 尝试实例化抽象类(忽略 xsi:type)

2024-01-04

几天来我一直在努力解决一个奇怪的问题。客户提供 Web 服务 和 WSDL。我使用 wsimport 和一些 jaxb 自定义导入了 WSDL。所有爪哇 生成的类没有任何错误。

当我使用 Java 类来解组响应时,出现以下异常:

06.02.2012 09:18:50 com.sun.xml.bind.v2.ClassFactory create
INFO: failed to create a new instance of class net.bipro.v2_1_0_1_0.namespace.datentypen.STEGefahr
java.lang.InstantiationException
    at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.sun.xml.bind.v2.ClassFactory.create0(ClassFactory.java:122)
    at com.sun.xml.bind.v2.ClassFactory.create(ClassFactory.java:131)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.createInstance(UnmarshallingContext.java:609)
    at com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl$TransducerImpl.parse(RuntimeClassInfoImpl.java:392)
    at com.sun.xml.bind.v2.runtime.unmarshaller.TextLoader.text(TextLoader.java:69)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.text(UnmarshallingContext.java:514)
    at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.processText(SAXConnector.java:181)
    at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.endElement(SAXConnector.java:154)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2939)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:217)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:189)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:142)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:151)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:169)
    at de.company.bipro.tarifierung.TestApp.<init>(TestApp.java:39)
    at de.company.bipro.tarifierung.TestApp.main(TestApp.java:143)

我将响应对象减少到最小的有效 xml:

<taa:getQuoteResponse 
    xmlns:taa="http://www.bipro.net/namespace/tarifierung" 
    xmlns:leben="http://www.bipro.net/namespace/leben" 
    xmlns:sachen="http://www.bipro.net/namespace/sachen" 
    xmlns:haftpflicht="http://www.bipro.net/namespace/haftpflicht" 
    xmlns:fahrzeug="http://www.bipro.net/namespace/fahrzeug" 
    xmlns:xyzkfz="http://www.xyz.de/kfz/namespace" 
    xmlns:xyz-komposit="http://www.xyz.de/komposit/namespace" 
    xmlns:sach="http://www.bipro.net/namespace/sach" 
    xmlns:xyzleben="http://www.xyz.de/leben/namespace" 
    xmlns:xyz="http://www.xyz.de/namespace" 
    xmlns:partner="http://www.bipro.net/namespace/partner" 
    xmlns:mime="http://www.w3.org/2005/05/xmlmime" 
    xmlns:komposit="http://www.bipro.net/namespace/komposit" 
    xmlns:kfz="http://www.bipro.net/namespace/kraftfahrt" 
    xmlns:allgemein="http://www.bipro.net/namespace/allgemein">
  <taa:Response>    
    <taa:Tarifierung>      
      <taa:Verkaufsprodukt>        
        <taa:Produkt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="komposit:CT_SUHVersicherung">          
          <taa:Elementarprodukt xsi:type="komposit:CT_Deckung">            
            <komposit:Gefahr xmlns:daten="http://www.bipro.net/namespace/datentypen" xsi:type="daten:STE_GefahrBasis">L</komposit:Gefahr>            
          </taa:Elementarprodukt>
        </taa:Produkt>
      </taa:Verkaufsprodukt>      
    </taa:Tarifierung>
  </taa:Response>
</taa:getQuoteResponse>

这是数据类型定义:

<xsd:complexType abstract="true" name="STE_Gefahr">
    <xsd:simpleContent>
        <xsd:extension base="xsd:string"/>
    </xsd:simpleContent>
</xsd:complexType>

<xsd:complexType final="#all" name="STE_GefahrBasis">
    <xsd:simpleContent>
        <xsd:restriction base="daten:STE_Gefahr">
            <xsd:enumeration value="F"><xsd:annotation><xsd:documentation>Feuer</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="L"><xsd:annotation><xsd:documentation>Leitungswasser</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="S"><xsd:annotation><xsd:documentation>Sturm</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="H"><xsd:annotation><xsd:documentation>Hagel</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="E"><xsd:annotation><xsd:documentation>Einbruchdiebstahl</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="G"><xsd:annotation><xsd:documentation>Glas</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="U"><xsd:annotation><xsd:documentation>Ueberspannungsschaeden</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="N"><xsd:annotation><xsd:documentation>Nutzfeuer</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="M"><xsd:annotation><xsd:documentation>Elementarschaeden (alle Gefahren)</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="B"><xsd:annotation><xsd:documentation>Beraubung</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="M01"><xsd:annotation><xsd:documentation>Ueberschwemmung</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="M02"><xsd:annotation><xsd:documentation>Erdbeben</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="M03"><xsd:annotation><xsd:documentation>Schneedruck</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="M04"><xsd:annotation><xsd:documentation>Erdrutsch</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="M05"><xsd:annotation><xsd:documentation>Vulkanausbruch</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="M06"><xsd:annotation><xsd:documentation>Lawine</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="M07"><xsd:annotation><xsd:documentation>Rueckstau</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="M08"><xsd:annotation><xsd:documentation>Erdsenkung</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="M09"><xsd:annotation><xsd:documentation>Starkregen</xsd:documentation></xsd:annotation></xsd:enumeration>
            <xsd:enumeration value="M99"><xsd:annotation><xsd:documentation>sonstige Elementarschaeden</xsd:documentation></xsd:annotation></xsd:enumeration>
        </xsd:restriction>
    </xsd:simpleContent>
</xsd:complexType>

我不知道为什么 xsi:type 被忽略。特别是因为在其他元素中, 它也使用子类,它工作得很好。

我还用当前的 JAXBRI 替换了 JDK 附带的默认 jaxb - 仍然 同样的错误。

有谁知道出了什么问题吗?我想,我已经“被线条蒙蔽了”:-/

问候 鼠扇


您的问题与举报的问题相同here http://java.net/jira/browse/JAXB-620。它仍然在 Java 1.6.0_27 中表现出来,这似乎对应于 jaxb-ri-2.2-147。但是,如果使用 Java 1.7.0_02 执行相同的代码,则一切正常。这表明您正在使用的 JAXB 版本存在问题,因此请尝试切换到新的 JAXB/JDK(在我的例子中,成功的测试在 NetBeans 7.1 w/ JDK 1.7.0_02 上运行)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAXB:Unmarshaller 尝试实例化抽象类(忽略 xsi:type) 的相关文章

随机推荐

  • 使用 scrapy 递归抓取网站

    我正在尝试使用 scrapy 废弃一个网站 这是我到目前为止编写的代码http thuongnh com building a web crawler with scrapy http thuongnh com building a web
  • 从可迭代对象创建字典

    从可迭代创建字典并为其分配一些默认值的最简单方法是什么 我试过 gt gt gt x dict zip range 0 10 range 0 但这不起作用 因为 range 0 不是可迭代的 因为我认为它不会是可迭代的 但我还是尝试了 那么
  • 使用 codeigniter 获取 $config['encrypt_name'] 之后的文件名

    无论如何 我是否可以在加密后获取文件的文件名 以便我可以将文件名保存到我的数据库中 config encrypt name TRUE 这种加密一般是改变镜像文件的文件名 我想知道如何获取它或将其保存到变量中 提前致谢 this gt 上传
  • 如何在没有index.html的情况下使用Jekyll-paginate?

    我正在尝试在 Github 页面上构建我的博客 出于显而易见的原因我必须使用 Jekyll paginate 问题是 除了欢迎页面之外 我不将 index html 页面用于任何其他用途 我在名为articles的文件夹中有一个名为inde
  • Varnish 和 ESI HTTP AUTH

    我对这个问题很迷茫 我不知道问题出在哪里 所以 我希望你能帮助我 我有 symfony 的 HTTP BASIC 身份验证 并且我正在尝试访问受此身份验证保护的 url 并在 Drupal 页面中使用标签 每个请求都会发送到 Varnish
  • 具有可扩展组的分组 Gridview

    关于嵌套网格视图或具有子网格视图的主题存在许多问题 我已经考虑过这种方法 但它对于我的目的来说太多了 我能找到的最接近的现有问题是这个 分组网格视图 https stackoverflow com questions 1804282 gro
  • 多线程Java

    我正在尝试在我的 Java Mandelbrot 应用程序中实现多线程 这是我到目前为止所拥有的 import java awt Color import java awt Graphics2D import java awt image
  • 多选 WinForms 列表框上的两种方式绑定?

    我有一个项目 我们正在从对象集合中加载多选列表框 我有另一个实体对象 它有一个集合 我想以某种方式绑定到 SelectedItems 有没有办法使用对象绑定源或某种绑定源来做到这一点 而无需编写代码 当然 我可以循环遍历集合并获取选定的项目
  • 在 IE8 中右键单击取消选择文本

    我希望用户从页面的文本区域中进行选择 我有一个上下文菜单 用户可以在右键单击所选内容时使用 这是我从 IE8 中的文本区域检索所选内容的代码 var textComponent document getElementById myTextA
  • 面向对象的 JavaScript:你会如何解决这个问题?

    随着我对 JS 的了解越来越深入 我已经从过程式风格转向半面向对象风格 不要问我这是什么意思 基本上一团糟 但现在我想开始正确使用它 OO 吸引了我的编码大脑 然而 我正在尝试开发一个学校周图书馆 但我不确定最好如何去做 如果我简单地使用一
  • 如何从故事板加载初始窗口控制器?

    我已经提出了很多问题 但没有一个问题能解答我的疑问 我正在尝试以编程方式加载初始窗口 这是我所做的 我已添加 main swift as import Cocoa private func runApplication applicatio
  • 如何关闭输入到 Response(jax.rs) 的InputStream

    GET Path id content Produces application octet stream public Response getDocumentContentById PathParam id String docId I
  • GROUP BY 和 ORDER BY [重复]

    这个问题在这里已经有答案了 可能的重复 SQL GROUP BY 中的 ORDER BY 总计 https stackoverflow com questions 2237918 sql order by total within grou
  • 如何在 Node 8 的 Node.js REPL 中导入 ES 模块?

    我有一个ES6 https en wikipedia org wiki ECMAScript 6th Edition E2 80 93 ECMAScript 2015 module right mjs 将其作为参数执行node效果很好 no
  • Laravel 5.1:将上传的文件保留为旧输入

    我正在使用 Laravel 5 1 中的表单来发布一些文本并上传文件 它看起来像这样 简化版 Form open array url gt foo bar Form text image name Form file image Form
  • Javascript - 如何将缓冲区转换为字符串?

    这是将 String 转换为 Buffer 再转换回 String 的示例 let bufferOne Buffer from This is a buffer example console log bufferOne Output
  • deviceready 不在科尔多瓦发射

    对于我的 cordova 项目 deviceready 未正确触发 至少在 iOS 中 我已经搜索了几个小时 但仍然无法弄清楚这一点 我做错了什么吗 js cordova js 的路径也存在
  • 如何在 ggplot2 R 中使用 sec_axis() 处理离散数据?

    我有如下所示的离散数据 height lt c 1 2 3 4 5 6 7 8 weight lt c 100 200 300 400 500 600 700 800 person lt c Jack Jim Jill Tess Jack
  • Mediatr - 无效/更新缓存的正确位置在哪里

    这个问题源于我问过太多接口 QCRS 和 Mediatr 库 请求 响应 的另一个问题 Mediatr 减少 DI 对象的数量 https stackoverflow com questions 53966361 mediatr reduc
  • JAXB:Unmarshaller 尝试实例化抽象类(忽略 xsi:type)

    几天来我一直在努力解决一个奇怪的问题 客户提供 Web 服务 和 WSDL 我使用 wsimport 和一些 jaxb 自定义导入了 WSDL 所有爪哇 生成的类没有任何错误 当我使用 Java 类来解组响应时 出现以下异常 06 02 2