2014-04-08 34 views
5

Czy kiedykolwiek ktoś mógł usunąć nieużywane przestrzenie nazw podczas marszałka obiektu za pomocą JAXB? Oto łącze żądanej funkcji: https://java.net/jira/browse/JAXB-103 (patrz opis)Jak uniemożliwić JAXB zapisywanie nieużywanych przestrzeni nazw podczas zestawiania

Czy istnieje właściwość do skonfigurowania JAXB? Czy zostało to naprawione w MOXy?

W tej chwili przechodzę przez obiekt, który musi zostać zebrany i wyodrębnić wszystkie klasy, które muszą zostać przypisane do klasy [] classesToBeBound. Następnie tworzę nowy JAXBContext.newInstance (classesToBeBound)

Nieużywane przestrzenie nazw nie są teraz zawarte w pliku XML.

Wiem, że sprawdzanie poprawności xml jest poprawne nawet w przypadku nieużywanych przestrzeni nazw, ale jest to dla mnie coś, z czym powinna poradzić sobie struktura.

Następujący link https://blogs.oracle.com/enterprisetechtips/entry/customizing_jaxb wspomina o różnych stałych (zobacz gdzieś w środku tekstu), ale kiedy próbujesz znaleźć rozwiązanie w tych linkach albo link jest zepsuty, albo nikt go naprawdę nie rozwiązał.

Wszelkie komentarze są mile widziane.

(Edycja) zwykłego tekstu:

DANA

a new instance of JAXBContext and add 2 classes with each a separate namespace. 

PO

marshalling a class that has these 2 classes as a property but only 1 of them is not null 

TO

I expect only the namespace of the property that is not null to be visible in the XML. 

ale rzeczywista jest

that both namespaces are in the xml. 

Moje pytanie brzmi: jak mogę usunąć JAXB lub powiedzieć JAXB, aby NIE zapisywał nieużywanych przestrzeni nazw?

Aby umieścić go w java-kod: UDZIELONA

public class Foo{ 
    private Bar bar; //namespace something2 
    private User user; //namespace user 
} 

KIEDY

JAXBContext c = JAXBContext.newInstance(Foo.class, Bar.class, User.class); 
... 
Foo foo = new Foo(); 
foo.setBar(null); 
foo.setUser(new User("Bob")); 
marshaller.umarshal(foo); 

WTEDY Spodziewam xml być

<foo xmlns="something1" xmlns:user="user"> 
    <user:name>Bob</user:name> 
</foo> 

ale rzeczywista jest (uwaga przestrzeń nazw something2)

<foo xmlns="something1" xmlns:user="user" xmlns:bar="something2"> 
    <user:name>Bob</user:name> 
</foo> 

Oczywiście jest to uproszczony przykład, a nasza specyfikacja typu ma około 30 różnych przestrzeni nazw.

+0

Nie jestem pewien, czy poprawnie rozumiem Twój problem. Czy chcesz usunąć wszystkie wartościowe atrybuty z wynikowego pliku XML? I nie jest to duplikat http://stackoverflow.com/questions/11215485/jax-ws-to-remove-empty-tags-from-request-xml – Ota

Odpowiedz

0

Tak, można je pominąć. Nie jestem pewien, czy zrozumiałem problem, z którym się mierzysz. Ale nie ma problemu z marszałkiem obiektu bez przestrzeni nazw.

+0

Zaktualizował pierwsze pytanie z dodatkowymi informacjami. Czy możesz określić JAK mogę pominąć nieużywane przestrzenie nazw? To, czy ma sens ich usunięcie, to kolejna debata, bo wiem, że jest poprawne pod względem syntaktycznym, że są one w XML ;-) – user2966436

+1

Czy możesz publikować adnotacje na klasach Foo, Bar i User? BTW, masz na myśli rozkazy, a nie unmarshalling, prawda? – rossa

0

To może nie być możliwe, ponieważ podczas tworzenia folderu hierarchii obiektów zdarza się, że w momencie tworzenia znacznika głównego informacja o tym, które obiekty są puste, v/s nie jest pusta, może być niedostępna.Każda próba uzyskania tych informacji z wyprzedzeniem może mieć również skutki uboczne związane z nim, ponieważ wywoływane są odpowiednie metody dostępu. W związku z tym JAXB statycznie wykorzystuje informacje z JAXBContext do zapełnienia tych informacji.

Powiązane problemy