J'utilise la même configuration de liaisons pour unmarshalling une fois en utilisant le Unmarshaler et une fois en utilisant un classeur. La première approche fonctionne bien, la seconde jette une exception. Quelle est la raison?EclipseLink MOXy: Liaisons fonctionnant avec Unmarshaller mais pas avec Binder
entrée:
<?xml version="1.0" encoding="UTF-8"?>
<foo:root xmlns:foo="http://www.domain.org/foo">test</foo:root>
Fixations:
<?xml version="1.0"?>
<xml-bindings
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
package-name="test">
<xml-schema element-form-default="QUALIFIED" namespace="http://www.domain.org/foo">
<xml-ns prefix="foo" namespace-uri="http://www.domain.org/foo" />
</xml-schema>
<java-types>
<java-type name="Root">
<xml-root-element name="root"/>
<java-attributes>
<xml-value java-attribute="text"/>
</java-attributes>
</java-type>
</java-types>
</xml-bindings>
Classes:
package test;
public class Root {
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
Démo:
Map<String, Object> jaxbContextProperties = new HashMap<String, Object>(1);
jaxbContextProperties.put(JAXBContextProperties.OXM_METADATA_SOURCE, "bindings.xml");
JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class[] { Root.class}, jaxbContextProperties);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Root root = (Root)unmarshaller.unmarshal(new File("input.xml"));
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = documentBuilder.parse(new File("input.xml"));
Binder<Node> binder = jaxbContext.createBinder();
root = (Root) binder.unmarshal(document);
Sortie:
Exception in thread "main" javax.xml.bind.UnmarshalException - with linked exception:
[Exception [EclipseLink-25008] (Eclipse Persistence Services - 2.5.0.v20130507- 3faac2b): org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: A descriptor with default root element foo:root was not found in the project]