Mam istniejący schemat XML, który zawiera typ, który chciałbym mapować do Java Map jakiegoś rodzaju przy użyciu JAXB. Mój proces kompilacji przyjmuje schemat i tworzy fasolę. Chciałbym spersonalizować ten proces, używając jednego ze złożonych typów w mojej mapie schematu do pliku java.util.Map. Czytałem gdzieś, że JAXB "nie może tworzyć interfejsów". Nie jestem pewien, czy to ma zastosowanie w tym przypadku, ale jeśli tak, to byłoby dobrze z mapowaniem do HashMap. Ponadto niekoniecznie musi to być complexType, który mapuje do mapy, może to być element, jeśli jest to wymagane.Czy można użyć JAXB do odwzorowania ze schematu na java.util.Map?
Kontroluję moją generację JAXB przy użyciu pliku .xjb, więc szukam jakiegoś <jaxb:bindings>
, aby go tam umieścić. Próbowałem następujących, ale nie działa:
<jaxb:bindings schemaLocation="myschema.xsd" node="/xs:schema">
<jaxb:globalBindings>
<jaxb:serializable uid="1"/>
</jaxb:globalBindings>
<jaxb:schemaBindings>
<jaxb:package name="com.myschema.client.types"/>
</jaxb:schemaBindings>
<jaxb:bindings node="//xs:complexType[@name='MapType']">
<jaxb:javaType name="java.util.HashMap"
parseMethod="com.myschema.common.MapConverter.parseObjectToMap"
printMethod="com.myschema.common.MapConverter.printMapToObject" />
</jaxb:bindings>
</jaxb:bindings>
Edit: Dodałem więcej szczegółów na powyższe wiążące że ja już próbowałem. Generuje następujący błąd podczas kompilacji schematu:
[jaxb] [ERROR] compiler was unable to honor this javaType customization. It is attached to a wrong place, or its inconsistent with other bindings.
<jaxb:javaType>
nie będzie działać, ponieważ może on być stosowany tylko dla mapping between XML Schema primitives and Java types. Ponieważ chcę mapować między typem złożonym a typem Java, nie mogę tego użyć.
Twoje podejście ".xjb" jest poprawne i powinno działać. Czy XJC po prostu go ignoruje, czy też generuje coś niewłaściwego? – skaffman
Korzystając z powyższej metody .xjb, pojawia się następujący błąd w kompilacji jaxb: [JEXB] [ERROR] kompilator nie był w stanie uhonorować tego dostosowania javaType. Jest on przymocowany do niewłaściwego miejsca lub niezgodny z innymi powiązaniami. – Zach