# JAXB Binding customization



## woe (13. Feb 2012)

Hallo,

Ich habe folgendene ComplexType:
[xml]
<xs:complexType>
   <xs:all minOccurs="0">
      <xs:element name="Message" minOccurs="0"/>
      <xs:element name="StackTrace" minOccurs="0"/>
   </xs:all>
</xs:complexType>
[/xml]
In den beiden Elementen befinden sich nur Zeichenketten, ich soll das XSD-File jedoch so gut als möglich nicht verändern.

Die beiden Elemente Message und StackTrace werden jeweils immer auf ein Object gemappt, da ja kein Typ angegeben wird.

Beim Debuggen hab ich jedoch gesehen, dass der dynamische Typ des Objects "ElementNSImpl" ist, welcher jedoch bereits als deprecated markiert wurde.

Gibt es eine Möglichkeit, dass ich mit Hilfe eines Binding-Files dem JAXB Compiler sage, dass er die beiden Elemente auf einen String mappen soll?

vielen Danke im Voraus
Florian


----------



## mvitz (13. Feb 2012)

Könnte über Customizing JAXB Bindings funktionieren.


----------



## musiKk (13. Feb 2012)

Was hast Du denn schon probiert? Sieht so aus, als ob das mit einer Property Binding Declaration machbar wäre. Ich habe damit aber noch nicht gearbeitet.


----------



## woe (13. Feb 2012)

Ich hab es mit folgendem Binding probiert:


[xml]
<jxb:bindings version="1.0" 
              xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
              xmlns:xs="http://www.w3.org/2001/XMLSchema" 
              xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
              jxb:extensionBindingPrefixes="xjc">

    <jxb:bindings schemaLocation="vstst.xsd" node="/xs:schema">
        <jxb:bindings node="//xs:complexType[@name='OutputType']//xs:all//xs:element[@name='ErrorInfo']//xs:complexType//xs:all//xs:element[@name='Message']">
            <jxbroperty name="Message">
                <jxb:baseType>
                    <jxb:javaType name="java.lang.String" ></jxb:javaType>
                </jxb:baseType>
            </jxbroperty>
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>
[/xml]

Hier kommt jedoch folgende Fehlermeldung, wenn ich die Javaklassen generieren möchte:

[ERROR] compiler was unable to honor this javaType customization. It is attached to a wrong place, or its inconsistent with other bindings.
  line 22 of file:/C:/Users/florianw/Documents/NetBeansProjects/JavaApplication2/xml-resources/jaxb/VSTST_Binding/binding.jxb.xml

[ERROR] (the above customization is attached to the following location in the schema)
  line 926 of file:/C:/Users/florianw/Documents/NetBeansProjects/JavaApplication2/xml-resources/jaxb/VSTST_Binding/vstst.xsd

...obwohl die Syntax eigentlich so richtig sein müsste.

lg Florian


----------



## Wildcard (13. Feb 2012)

> Die beiden Elemente Message und StackTrace werden jeweils immer auf ein Object gemappt, da ja kein Typ angegeben wird.


Ich finde es gerade nicht in der Spec, aber sollte nicht String der Default sein wenn kein type oder ref angegeben ist?

Wenn es nicht Jaxb sein muss, dann kannst du das Problem auch mit EMF lösen.


----------

