2011-08-06 17 views
9

I am using some non-standard extensions z implementacji JAXB przez EclipseLink, a aby włączyć tę implementację, muszę skonfigurować ją przy pomocy jaxb.properties. Działa dobrze.Czy mogę zastąpić jaxb.properties kodem?

Jednak z powodu błędu kompilacji plik właściwości nie został umieszczony we właściwym miejscu, co spowodowało użycie domyślnego JAXB, który bez żadnych błędów kontynuował analizowanie pliku XML, ignorując niestandardowe rozszerzenie, zostawiając mnie z niedziałającą fasolą.

Aby uczynić to bardziej niezawodnym, chciałbym pozbyć się pliku właściwości i określić konfigurację kontekstu w kodzie. Mam już zależność od kompilacji w EclipseLink z powodu ich adnotacji i nie potrzebuję tej części konfigurowalnej w czasie wdrażania (w rzeczywistości, widząc, co może pójść nie tak, nie chcę, żeby była konfigurowalna).

+0

rozważyć alternatywę: test na obecność jaxb.properties późno w budowie. –

Odpowiedz

12

Można wykonać następujące czynności, aby uzyskać EclipseLink JAXB (Moxy) JAXBContext bez pliku jaxb.properties:

import java.io.File; 

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.Marshaller; 
import javax.xml.bind.Unmarshaller; 

import org.eclipse.persistence.jaxb.JAXBContextFactory; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     //JAXBContext jc = JAXBContext.newInstance(Animals.class); 
     JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Animals.class}, null); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     File xml = new File("src/forum6871469/input.xml"); 
     Animals animals = (Animals) unmarshaller.unmarshal(xml); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(animals, System.out); 
    } 

} 
+0

Jak ustawić właściwość MarshallerProperties.JSON_INCLUDE_ROOT w powyższym kodzie? – Vivek

Powiązane problemy