2014-05-06 10 views
6

Planujemy użyć JAXB do odwzorowania xml na obiekty. Nasze wymagania są takie, że będziemy pracować tylko nad jedną częścią dokumentu (nieco grubszą), więc chcemy tylko przekonwertować tę część (fragment) na obiekty. Dlatego nie chcemy tworzyć klas dla wszystkich elementów w xsd.xjc tylko dla części schematu

Jak możemy poprosić xjc o zignorowanie pewnych elementów lub rozważenie określonych elementów podczas generowania zajęć?

Z tego, co przeczytałem, możemy użyć pliku powiązań, aby dostosować zachowanie xjc, ale co możemy umieścić w schemacie ignorowania elementów.

+0

używasz XSD lub Java adnotacji do generowania klas? –

+0

Używamy xsd, ale ten xsd jest dla całego dokumentu, a nie tylko potrzebnej części. Ponadto nie jestem pewien, w jaki sposób mogę używać adnotacji java do generowania klas? Czy możesz wskazać mi jakiś link? – OKOK

+0

Czy znalazłeś rozwiązanie swojego problemu? Mam ten sam problem. Aby to pogorszyć: nieużywane części XSD powodują błędy rzutowania XJC, ponieważ dwa podobnie nazwane typy sprowadzają się do tej samej nazwy pliku w systemie Windows. –

Odpowiedz

2

Możesz użyć zewnętrznego pliku powiązania, aby skonfigurować XJC do używania istniejącej klasy, zamiast ją generować. Możesz to wykorzystać, wskazując nieistniejącą klasę, aby JAXB mógł wykluczyć części schematu XML. W poniższym przykładzie nieistniejąca klasa com.example.Fake zostanie użyta dla złożonego typu o nazwie Foo.

binding.xml

<jxb:bindings schemaLocation="yourSchema.xsd"> 
    <jxb:bindings node="//xs:complexType[@name='Foo']"> 
     <jxb:class ref="com.example.Fake"/> 
    </jxb:bindings> 
</jxb:bindings> 

XJC połączeń

xjc -d outputDir -b binding.xml yourSchema.xsd 
+1

Dzięki za sugestię. Jedyną rzeczą jest to, że mój schemat jest dość duży, więc będę musiał pisać wiązania dla wielu elementów ... które, jak sądzę, będą równe pisaniu POJO dla wymaganych części i umieszczaniu na nich adnotacji. Łatwiejszy sposób? Sądzę, że brzmi to zbyt leniwie: P – OKOK