public static Object nodeToObjectModel(Node n, Class declaredType) throws Docx4JException { if (n == null) { throw new Docx4JException("null input"); } // if (log.isDebugEnabled() ) { // System.out.println("IN: " + XmlUtils.w3CDomNodeToString(n)); // } Object jaxb = null; try { jaxb = XmlUtils.unmarshal(n, Context.jcPML, declaredType); } catch (JAXBException e1) { throw new Docx4JException("Couldn't unmarshall " + XmlUtils.w3CDomNodeToString(n), e1); } try { if (jaxb instanceof JAXBElement) { JAXBElement jb = (JAXBElement) jaxb; if (jb.getDeclaredType().getName().equals(declaredType.getName())) { return jb.getValue(); } else { log.error("UNEXPECTED " + XmlUtils.JAXBElementDebug(jb)); throw new Docx4JException( "Expected " + declaredType.getName() + " but got " + XmlUtils.JAXBElementDebug(jb)); } } else if (jaxb.getClass().getName().equals(declaredType.getName())) { return jaxb; } else { log.error(jaxb.getClass().getName()); throw new Docx4JException( "Expected " + declaredType.getName() + " but got " + jaxb.getClass().getName()); } } catch (ClassCastException e) { throw new Docx4JException( "Expected " + declaredType.getName() + " but got " + jaxb.getClass().getName(), e); } }