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

Xsd JAXB:Unmarshaller尝试实例化抽象类(忽略xsi:type),xsd,wsdl,jaxb,jax-ws,xsitype,Xsd,Wsdl,Jaxb,Jax Ws,Xsitype,几天以来,我一直在努力解决一个奇怪的问题。客户提供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.datent

几天以来,我一直在努力解决一个奇怪的问题。客户提供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)
06.02.2012 09:18:50 com.sun.xml.bind.v2.ClassFactory创建
信息:未能创建类net.bipro.v2_1_0_1_0.namespace.datentypen.STEGefahr的新实例
java.lang.InstanceionException
位于sun.reflect.InstanceExceptionConstructorAccessorImpl.newInstance(InstanceExceptionConstructorAccessorImpl.java:30)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:513)
位于com.sun.xml.bind.v2.ClassFactory.create0(ClassFactory.java:122)
位于com.sun.xml.bind.v2.ClassFactory.create(ClassFactory.java:131)
位于com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.createInstance(UnmarshallingContext.java:609)
在com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl$TransducerImpl.parse(RuntimeClassInfoImpl.java:392)上
位于com.sun.xml.bind.v2.runtime.unmarshaller.TextLoader.text(TextLoader.java:69)
位于com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.text(UnmarshallingContext.java:514)
位于com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.processText(SAXConnector.java:181)
位于com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.endElement(SAXConnector.java:154)
位于com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endeElement(AbstractSAXParser.java:601)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scannedelement(XMLDocumentFragmentScannerImpl.java:1782)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2939)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
位于com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
位于com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
位于com.sun.org.apache.xerces.internal.jaxp.saxpasserimpl$jaxpsaxpasser.parse(saxpasserimpl.java:522)
位于com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:217)
位于com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:189)
位于javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
位于javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:142)
位于javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:151)
位于javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:169)
位于de.company.bipro.tarifierung.TestApp.(TestApp.java:39)
位于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>

L
以下是数据类型定义:

<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>

费尔
莱通斯瓦瑟
斯特姆
哈格尔
埃因布吕奇迪伯斯塔赫
玻璃
乌伯斯潘努格斯凯登
纳茨费尔
Elementarschaeden(alle Gefahren)
贝劳邦
Ueberschwemung
埃尔贝本
施奈德鲁克
埃尔德鲁奇
Vulkanausbruch
拉温
鲁克斯塔
二仙宫
斯塔克雷根
sonstige Elementarschaeden
我不知道为什么忽略xsi:type。特别是在其他方面,, 它也使用子类,工作正常

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

有人知道怎么回事吗?我想,我已经“被台词蒙蔽了双眼”:-/

问候
MausFan

您的问题与报道的问题相同。它仍然通过Java1.6.027表现出来,它似乎对应于jaxb-ri-2.2-147。但是,如果使用Java 1.7.0_02执行相同的代码,则所有代码都可以正常工作。这表明您正在使用的JAXB版本存在问题,因此请尝试切换到新的JAXB/JDK(在我的例子中,成功的测试在NetBeans 7.1 w/JDK 1.7.002上运行)。

您的处境比我好。由于应用服务器的原因,我必须使用Java 1.5。对于这种一般情况,仍然没有解决方案,请参阅

谢谢你的回答。虽然我安装了JDK 7u2,但仍然出现了相同的错误。但为了确定这一点,我将检查类路径和使用过的归档文件。当然它必须工作。我能够复制它,通过切换到1.7,让它消失。我能够从示例XML中读取“L”,因此解组成功。