JAXB unmarshal z zadeklarowanym typem nie zapełnia wynikowego obiektu danymi

Próbuję unieważnić dany XML:

<FHcomment>
 <TX>rewriting of file</TX>
 <tool_id>toolA</tool_id>
 <tool_vendor>Company</tool_vendor>
 <tool_version>1.7.36.0</tool_version>
</FHcomment>

Schemat został już skompilowany do klas JAXB, zobacz tutaj:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
 "tx",
 "toolId",
 "toolVendor",
 "toolVersion",
 "userName",
 "commonProperties",
 "extensions"
})
@XmlRootElement(name = "FHcomment")
public class FHcomment {

@XmlElement(name = "TX", required = true)
protected TX tx;
@XmlElement(name = "tool_id", required = true)
protected BaseName toolId;
@XmlElement(name = "tool_vendor", required = true)
protected BaseName toolVendor;
@XmlElement(name = "tool_version", required = true)
protected BaseVersion toolVersion;
@XmlElement(name = "user_name")
protected BaseName userName;
@XmlElement(name = "common_properties")
protected CommonPropertiesType commonProperties;
protected ExtensionsType extensions;
@XmlAnyAttribute
private Map<QName, String> otherAttributes = new HashMap<QName, String>();

.....
/*
 * GETTERS and SETTERS for the fields have been removed here
 */
.....
}

Mój kod unieważniający XML jest następujący:

JAXBContext jc = JAXBContext.newInstance(FHcomment.class);
String s = "<FHcomment>....</Fhcomment>";
Unmarshaller unmarshaller = jc.createUnmarshaller();
XMLInputFactory fac = XMLInputFactory.newFactory();
XMLStreamReader xsr = fac.createXMLStreamReader(new StringReader(s));
JAXBElement<FHcomment> foo = unmarshaller.unmarshal(xsr, FHcomment.class);
FHcomment val = foo.getValue();

Problem: Wynikowy obiekt FHcomment nie zawiera elementów potomnych FHcomment. Wszystkie są zerowe, co nie jest pożądanym wynikiem.

Jak mogę powiedzieć JAXB, aby całkowicie unieważnił dany XML w obiekcie?

EDYTOWAĆ: Po dodaniu ValidationHandler do Unmsarshallera zbliżyłem się do problemu:

nieoczekiwany element (uri: „”, local: „TX”). Oczekiwane elementy to <{htp: //www.example.com/mdf/v4} tool_id>, <{htp: //www.example.com/mdf/v4} TX>, <{htp: //www.www .example.com / mdf / v4} common_properties>, <{htp: //www.example.com/mdf/v4} tool_version>, <{htp: //www.example.com/mdf/v4} rozszerzenia>, <{htp: //www.example.com/mdf/v4} tool_vendor>, <{htp: //www.example.com/mdf/v4} nazwa_użytkownika>

nieoczekiwany element (uri: „”, local: „tool_id”). Oczekiwane elementy to ....

Okazuje się, że JAXB nie podoba się faktowi, że dostarczony XML nie zawiera informacji o przestrzeni nazw. Jak więc mogę powiedzieć unmarshallerowi, aby zignorował przestrzenie nazw?

EDIT2:

Po kilku dalszych badaniach nie udało mi się znaleźć sposobu na oszukanie JAXB do pracy bez weryfikacji przestrzeni nazw. Użyłem samouczka na stroniehttp://cooljavablogs.blogspot.de/2008/08/how-to-instruct-jaxb-to-ignore.html ominąć mój problem. Nie jest to miłe rozwiązanie, ale najlepsze pod ręką ...

questionAnswers(4)

yourAnswerToTheQuestion