Ostatnio spotkałem się z dość (nie)ciekawym problemem konwersji XML do Java objektów.
Jeśli uzywasz XML bez Namespace to raczej nie powinno być problemów z wcztaniem dokumentu XML. Sprawa wygląda zgoła inaczej jeśli XML posiada Namespace. komplikuje się dodatkowo, gdy nie możesz edytować schematów (np. XSD).
Ponieważ całość zajęła mi kilka chwil, pomyślałem iż warto się podzielić rozwiązaniem z innymi
Poniżej kod, który wcztuje XML do obiektów JAXB.
Ważne: jeśli generujesz obiekty ze schematów, to w paczce gdzie znajdują się wygenerowane klasy musi znajdować się klasa ObjectFactory. Większośc generatorów generuje ObjectFactory w domyślnych ustawieniach.
import org.w3c.dom.Document;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
public class JaxbUnmashaller {
public
try {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document doc = documentBuilder.parse(file);
JAXBContext context = JAXBContext.newInstance(declaredType);
Unmarshaller unmarshaller = context.createUnmarshaller();
JAXBElement
return (T) jaxbElement.getValue();
}
catch (Exception blad) {
throw new RuntimeException(blad);
}
}
}