2017-03-16 3 views
0

Ich versuche, eine generische .xjb Bindings-Datei zu erstellen, um konsistente Java-Klassengenerierung von WSDLs/XSDs über mehrere Projekte hinweg bereitzustellen. Wir generieren den Code über maven-jaxb2-plugin (Made by @lexicore).Gibt es eine Möglichkeit, leere Knoten in der JAXB-Bindings-Datei zu ignorieren?

Das Problem liegt in der mehrere Projekte Teil. Wenn eine bestimmte Bindungs ​​Anweisung nichts in der bereitgestellten XSD oder WSDL übereinstimmt, schlägt die Klasse Generation mit

XPath Auswertung von „<some_xpath_expression>“ Ergebnisse in leeren Zielknoten

Wie kann ich JAXB sagen zu ignorieren In diesen Fällen kann die Bindungsdatei unabhängig von den verwendeten Elementtypen in jedem Projekt ohne Feinabstimmung verwendet werden.

Hier ist eine (abgespeckte) Version das Problem präsentiert habe ich:

<?xml version="1.0" encoding="UTF-8"?> 
<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1"     
       xmlns:xs="http://www.w3.org/2001/XMLSchema" 
       xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
       jxb:extensionBindingPrefixes="xjc"> 
    <jxb:bindings schemaLocation="path/to/the/schema" node="/xs:schema"> 
     <jxb:bindings multiple="true" node="//*[@type='xs:dateTime']"> 
      <xjc:javaType name="java.time.LocalDateTime" adapter="a.b.c.LocalDateTimeAdapter" /> 
     </jxb:bindings> 
    </jxb:bindings> 
</jxb:bindings> 

Wenn ich versuche, ohne dateTime Element aus einem Schema Klassen zu generieren, wird es scheitern.

Das Ziel ist, am Ende etwas zu schaffen, das alle Projekte verschiedener Teams wiederverwenden könnten, ohne etwas anderes als das schemaLocation zu ändern.

Antwort

1

Sie müssen die festlegen erforderlich = „no“ Attribut auf die Bindung, dass Sie keine Knoten passen ermöglichen möchten, dh

<jxb:bindings required="no" multiple="true" node="//*[@type='xs:dateTime']"> 

auf Ihrem Kontext Je Sie können sagen required = "false" oder erforderlich = "0" auch.

+0

Es funktioniert, danke :) –

Verwandte Themen