title: JAXB: Unmarshaller tries to instantiate abstract class (ignoring xsi:type)
body: <p>I struggle with a strange problem since several days. A customer provides a Webservice
  and a WSDL. I imported the WSDL by using wsimport and some jaxb customization. All Java
  classes are generated without any error.</p>
  
  <p>When I use the Java classes to unmarshall a response I got the following exception:</p>
  
  <pre><code>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.&lt;init&gt;(TestApp.java:39)
      at de.company.bipro.tarifierung.TestApp.main(TestApp.java:143)
  </code></pre>
  
  <p>I reduced the response object to a minimal valid xml:</p>
  
  <pre><code>&lt;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"&gt;
    &lt;taa:Response&gt;    
      &lt;taa:Tarifierung&gt;      
        &lt;taa:Verkaufsprodukt&gt;        
          &lt;taa:Produkt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="komposit:CT_SUHVersicherung"&gt;          
            &lt;taa:Elementarprodukt xsi:type="komposit:CT_Deckung"&gt;            
              &lt;komposit:Gefahr xmlns:daten="http://www.bipro.net/namespace/datentypen" xsi:type="daten:STE_GefahrBasis"&gt;L&lt;/komposit:Gefahr&gt;            
            &lt;/taa:Elementarprodukt&gt;
          &lt;/taa:Produkt&gt;
        &lt;/taa:Verkaufsprodukt&gt;      
      &lt;/taa:Tarifierung&gt;
    &lt;/taa:Response&gt;
  &lt;/taa:getQuoteResponse&gt;
  </code></pre>
  
  <p>Here is the data type definition:</p>
  
  <pre><code>&lt;xsd:complexType abstract="true" name="STE_Gefahr"&gt;
      &lt;xsd:simpleContent&gt;
          &lt;xsd:extension base="xsd:string"/&gt;
      &lt;/xsd:simpleContent&gt;
  &lt;/xsd:complexType&gt;
  
  &lt;xsd:complexType final="#all" name="STE_GefahrBasis"&gt;
      &lt;xsd:simpleContent&gt;
          &lt;xsd:restriction base="daten:STE_Gefahr"&gt;
              &lt;xsd:enumeration value="F"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Feuer&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="L"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Leitungswasser&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="S"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Sturm&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="H"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Hagel&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="E"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Einbruchdiebstahl&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="G"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Glas&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="U"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Ueberspannungsschaeden&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="N"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Nutzfeuer&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="M"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Elementarschaeden (alle Gefahren)&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="B"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Beraubung&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="M01"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Ueberschwemmung&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="M02"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Erdbeben&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="M03"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Schneedruck&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="M04"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Erdrutsch&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="M05"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Vulkanausbruch&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="M06"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Lawine&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="M07"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Rueckstau&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="M08"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Erdsenkung&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="M09"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;Starkregen&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
              &lt;xsd:enumeration value="M99"&gt;&lt;xsd:annotation&gt;&lt;xsd:documentation&gt;sonstige Elementarschaeden&lt;/xsd:documentation&gt;&lt;/xsd:annotation&gt;&lt;/xsd:enumeration&gt;
          &lt;/xsd:restriction&gt;
      &lt;/xsd:simpleContent&gt;
  &lt;/xsd:complexType&gt;
  </code></pre>
  
  <p>I have no clue why the xsi:type is ignored. Especially because in other elements,
  which also use subclasses it works fine.</p>
  
  <p>I also replaced the default jaxb which comes with JDK with the current JAXBRI - still
  the same error.</p>
  
  <p>Does anyone have an idea what is wrong? I guess, I am already "blinded by the lines" :-/</p>
  
  <p>Regards
  MausFan</p>