- public void read(final JsonReader in, final AbstractNodeDataWithSchema parent) throws IOException {
-
- final JsonToken peek = in.peek();
- Optional<String> value = Optional.absent();
- switch (peek) {
- case STRING:
- case NUMBER:
- value = Optional.of(in.nextString());
- break;
- case BOOLEAN:
- value = Optional.of(Boolean.toString(in.nextBoolean()));
- break;
- case NULL:
- in.nextNull();
- value = Optional.of((String) null);
- break;
- default:
- break;
- }
- if (value.isPresent()) {
- final Object translatedValue = translateValueByType(value.get(), parent.getSchema());
- ((SimpleNodeDataWithSchema) parent).setValue(translatedValue);
- }
-
- switch (peek) {
- case BEGIN_ARRAY:
- in.beginArray();
- while (in.hasNext()) {
- AbstractNodeDataWithSchema newChild = null;
- if (parent instanceof ListNodeDataWithSchema) {
- newChild = new ListEntryNodeDataWithSchema(parent.getSchema());
- ((CompositeNodeDataWithSchema) parent).addChild(newChild);
- } else if (parent instanceof LeafListNodeDataWithSchema) {
- newChild = new LeafListEntryNodeDataWithSchema(parent.getSchema());
- ((CompositeNodeDataWithSchema) parent).addChild(newChild);
- }
- read(in, newChild);
- }
- in.endArray();
- return;
- case BEGIN_OBJECT:
- Set<String> namesakes = new HashSet<>();
- in.beginObject();
- while (in.hasNext()) {
- final String jsonElementName = in.nextName();
- final NamespaceAndName namespaceAndName = resolveNamespace(jsonElementName);
- final String localName = namespaceAndName.getName();
- addNamespace(namespaceAndName.getUri());
- if (namesakes.contains(jsonElementName)) {
- throw new JsonSyntaxException("Duplicate name " + jsonElementName + " in JSON input.");
- }
- namesakes.add(jsonElementName);
- final Deque<DataSchemaNode> childDataSchemaNodes = findSchemaNodeByNameAndNamespace(parent.getSchema(),
- localName, getCurrentNamespace());
- if (childDataSchemaNodes.isEmpty()) {
- throw new IllegalStateException("Schema for node with name " + localName + " and namespace "
- + getCurrentNamespace() + " doesn't exist.");
+ private void traverseAnyXmlValue(final JsonReader in, final Document doc, final Element parentElement)
+ throws IOException {
+ switch (in.peek()) {
+ case STRING:
+ case NUMBER:
+ Text textNode = doc.createTextNode(in.nextString());
+ parentElement.appendChild(textNode);
+ break;
+ case BOOLEAN:
+ textNode = doc.createTextNode(Boolean.toString(in.nextBoolean()));
+ parentElement.appendChild(textNode);
+ break;
+ case NULL:
+ in.nextNull();
+ textNode = doc.createTextNode("null");
+ parentElement.appendChild(textNode);
+ break;
+ case BEGIN_ARRAY:
+ in.beginArray();
+ while (in.hasNext()) {
+ final Element childElement = doc.createElement(ANYXML_ARRAY_ELEMENT_ID);
+ parentElement.appendChild(childElement);
+ traverseAnyXmlValue(in, doc, childElement);