in src/main/java/org/apache/commons/scxml2/io/SCXMLReader.java [2069:2126]
private static void readParsedValue(final XMLStreamReader reader, final Configuration configuration,
final ParsedValueContainer valueContainer, final boolean invokeContent)
throws XMLStreamException, ModelException {
final Element element = readElement(reader);
if (element.hasChildNodes()) {
final NodeList children = element.getChildNodes();
Node child = children.item(0);
final boolean cdata = child.getNodeType() == Node.CDATA_SECTION_NODE;
if (invokeContent) {
// search or and only use first <scxml> element
if (child.getNodeType() != Node.ELEMENT_NODE) {
for (int i = 1, size = children.getLength(); i < size; i++) {
child = children.item(i);
if (child.getNodeType() == Node.ELEMENT_NODE) {
break;
}
}
}
if (child.getNodeType() == Node.ELEMENT_NODE) {
if (SCXMLConstants.ELEM_SCXML.equals(child.getLocalName()) &&
SCXMLConstants.XMLNS_SCXML.equals(child.getNamespaceURI())) {
// transform <invoke><content><scxml> back to text
try {
valueContainer.setParsedValue(new NodeTextValue(ContentParser.DEFAULT_PARSER.toXml(child)));
} catch (final IOException e) {
throw new XMLStreamException(e);
}
}
}
if (valueContainer.getParsedValue() == null) {
reportIgnoredElement(reader, configuration, SCXMLConstants.ELEM_INVOKE, SCXMLConstants.XMLNS_SCXML,
SCXMLConstants.ELEM_CONTENT);
}
}
else if (children.getLength() == 1 && (cdata || child.getNodeType() == Node.TEXT_NODE )) {
final String text = ContentParser.trimContent(child.getNodeValue());
if (ContentParser.hasJsonSignature(text)) {
try {
valueContainer.setParsedValue(new JsonValue(configuration.contentParser.parseJson(text), cdata));
} catch (final IOException e) {
throw new ModelException(e);
}
}
else {
valueContainer.setParsedValue(new TextValue(ContentParser.spaceNormalizeContent(text),
cdata));
}
} else if (children.getLength() == 1) {
valueContainer.setParsedValue(new NodeValue(child));
} else {
final ArrayList<Node> nodeList = new ArrayList<>();
for (int i = 0, size = children.getLength(); i < size; i++) {
nodeList.add(children.item(i));
}
valueContainer.setParsedValue(new NodeListValue(nodeList));
}
}
}