// manually calling the adapter is required because XmlJavaTypeAdapter can't be used on XmlRootElement
// see: https://java.net/jira/browse/JAXB-117
Object temp = unmarshaller.unmarshal(xmlSnippet);
QualityAssessmentList qaList = (QualityAssessmentList) JAXBIntrospector.getValue(temp);
QualityAssessmentAdapter adapter = new QualityAssessmentAdapter();
QualityAssessment result = adapter.unmarshal(qaList);
// resolve references to Cv's (unmarshal them if required)
// use a cache of unmarshalled Cv's because we might encounter the same Cv multiple times
HashMap<String, Cv> cvCache = new HashMap<>();
adapter.resolveReferences(result, cvCache, index, unmarshaller);
// set the isSet flag based on the element name
if(unmarshaller.getIntrospector().getElementName(temp).getLocalPart().equals("setQuality"))
result.setSet(true);
else
result.setSet(false);
return result;
} catch (Exception e) {
logger.error("Unable to manually call the QualityAssessmentAdapter for XML snippet: {}\n{}", xmlSnippet.substring(0, xmlSnippet.indexOf('>')+1), e);
throw new IllegalStateException("Unable to manually call the QualityAssessmentAdapter: " + e);