@DataProvider public Iterator<Object[]> testData() throws ProcessingException, JsonPointerException { final List<Object[]> list = Lists.newArrayList(); JsonNode digest; String memberName; List<JsonPointer> ret; for (final JsonNode node: testNode) { digest = node.get("digest"); memberName = node.get("memberName").textValue(); ret = Lists.newArrayList(); for (final JsonNode element: node.get("ret")) ret.add(new JsonPointer(element.textValue())); list.add(new Object[]{ digest, memberName, ret }); } return list.iterator(); }
/** * Build an instance validator tied to a subschema from a main schema * * <p>Note that the validity of the schema is <b>not</b> checked. Use {@link * #getSyntaxValidator()} if you are not sure.</p> * * @param schema the schema * @param ptr a JSON Pointer as a string * @return a {@link JsonSchema} * @throws ProcessingException {@code ptr} is not a valid JSON Pointer, or * resolving the pointer against the schema leads to a {@link MissingNode} * @throws NullPointerException schema is null, or pointer is null */ public JsonSchema getJsonSchema(final JsonNode schema, final String ptr) throws ProcessingException { BUNDLE.checkNotNull(schema, "nullSchema"); CORE_BUNDLE.checkNotNull(ptr, "nullPointer"); final JsonPointer pointer; try { pointer = new JsonPointer(ptr); return validator.buildJsonSchema(schema, pointer); } catch (JsonPointerException ignored) { // Cannot happen } throw new IllegalStateException("How did I get there??"); }
@DataProvider public Iterator<Object[]> testData() throws ProcessingException, JsonPointerException { final List<Object[]> list = Lists.newArrayList(); JsonNode digest; int elementIndex; List<JsonPointer> ret; for (final JsonNode node: testNode) { digest = node.get("digest"); elementIndex = node.get("elementIndex").intValue(); ret = Lists.newArrayList(); for (final JsonNode element: node.get("ret")) ret.add(new JsonPointer(element.textValue())); list.add(new Object[]{ digest, elementIndex, ret }); } return list.iterator(); }
@Override public void validate(final ProcessingReport report, final MessageBundle bundle, final FullData data) throws ProcessingException { final String value = data.getInstance().getNode().textValue(); try { new JsonPointer(value); } catch (JsonPointerException ignored) { report.error(newMsg(data, bundle, "err.format.jsonpointer.invalid") .putArgument("value", value)); } } }
/** * Return the immediate parent of this JSON Pointer * * <p>The parent of the empty pointer is itself.</p> * * @return a new JSON Pointer representing the parent of the current one */ public JsonPointer parent() { final int size = tokenResolvers.size(); return size <= 1 ? EMPTY : new JsonPointer(tokenResolvers.subList(0, size - 1)); }
/** * Return the immediate parent of this JSON Pointer * * <p>The parent of the empty pointer is itself.</p> * * @return a new JSON Pointer representing the parent of the current one */ public JsonPointer parent() { final int size = tokenResolvers.size(); return size <= 1 ? EMPTY : new JsonPointer(tokenResolvers.subList(0, size - 1)); }
/** * Return a new pointer with another pointer appended * * @param other the other pointer * @return a new pointer * @throws NullPointerException other pointer is null */ public JsonPointer append(final JsonPointer other) { BUNDLE.checkNotNull(other, "nullInput"); final List<TokenResolver<JsonNode>> list = Lists.newArrayList(tokenResolvers); list.addAll(other.tokenResolvers); return new JsonPointer(list); }
/** * Return a new pointer with another pointer appended * * @param other the other pointer * @return a new pointer * @throws NullPointerException other pointer is null */ public JsonPointer append(final JsonPointer other) { BUNDLE.checkNotNull(other, "nullInput"); final List<TokenResolver<JsonNode>> list = Lists.newArrayList(tokenResolvers); list.addAll(other.tokenResolvers); return new JsonPointer(list); }
/** * Return a new pointer with a new token appended * * @param raw the raw token to append * @return a new pointer * @throws NullPointerException input is null */ public JsonPointer append(final String raw) { final ReferenceToken refToken = ReferenceToken.fromRaw(raw); final JsonNodeResolver resolver = new JsonNodeResolver(refToken); final List<TokenResolver<JsonNode>> list = Lists.newArrayList(tokenResolvers); list.add(resolver); return new JsonPointer(list); }
/** * Return a new pointer with a new token appended * * @param raw the raw token to append * @return a new pointer * @throws NullPointerException input is null */ public JsonPointer append(final String raw) { final ReferenceToken refToken = ReferenceToken.fromRaw(raw); final JsonNodeResolver resolver = new JsonNodeResolver(refToken); final List<TokenResolver<JsonNode>> list = Lists.newArrayList(tokenResolvers); list.add(resolver); return new JsonPointer(list); }
try { ptr = fragment.isEmpty() ? JsonPointer.empty() : new JsonPointer(fragment); } catch (JsonPointerException ignored) { ptr = null;
try { ptr = fragment.isEmpty() ? JsonPointer.empty() : new JsonPointer(fragment); } catch (JsonPointerException ignored) { ptr = null;
/** * Build a JSON Pointer out of a series of reference tokens * * <p>These tokens can be everything; be sure however that they implement * {@link Object#toString()} correctly!</p> * * <p>Each of these tokens are treated as <b>raw</b> tokens (ie, not * encoded).</p> * * @param first the first token * @param other other tokens * @return a JSON Pointer * @throws NullPointerException one input token is null */ public static JsonPointer of(final Object first, final Object... other) { final List<ReferenceToken> tokens = Lists.newArrayList(); tokens.add(ReferenceToken.fromRaw(first.toString())); for (final Object o: other) tokens.add(ReferenceToken.fromRaw(o.toString())); return new JsonPointer(fromTokens(tokens)); }
/** * Build a JSON Pointer out of a series of reference tokens * * <p>These tokens can be everything; be sure however that they implement * {@link Object#toString()} correctly!</p> * * <p>Each of these tokens are treated as <b>raw</b> tokens (ie, not * encoded).</p> * * @param first the first token * @param other other tokens * @return a JSON Pointer * @throws NullPointerException one input token is null */ public static JsonPointer of(final Object first, final Object... other) { final List<ReferenceToken> tokens = Lists.newArrayList(); tokens.add(ReferenceToken.fromRaw(first.toString())); for (final Object o: other) tokens.add(ReferenceToken.fromRaw(o.toString())); return new JsonPointer(fromTokens(tokens)); }
try { if (!searchUri.getFragment().isEmpty()) { JsonPointer pointer = new JsonPointer(searchUri.getFragment()); searchUri = searchUri.resolve("#" + pointer.parent().toString()); } else {
/** * Get the {@link SchemaTree} for the given {@code uri}. * * This is similar to {@link SchemaLoader#get(URI)}, but allows {@code uri} to contain a fragment. * * @param uri * @return * @throws ProcessingException */ // XXX: Should this be the default behavior of SchemaLoader#get()? @VisibleForTesting protected SchemaTree getSchema(SchemaLoader schemaLoader, URI uri) throws ProcessingException { String fragment = uri.getFragment(); if (fragment == null) { return schemaLoader.get(uri); } else { try { URI schemaTreeUri = new URI(uri.getScheme(), uri.getSchemeSpecificPart(), null); JsonPointer pointer = new JsonPointer(fragment); SchemaTree schema = schemaLoader.get(schemaTreeUri); return schema.setPointer(pointer); } catch (URISyntaxException|JsonPointerException e) { assert false : "Was a valid before, we split things up!"; throw new RuntimeException(e); } } } }
@DataProvider public Iterator<Object[]> getLookups() throws JsonReferenceException, JsonPointerException { final Set<Object[]> set = Sets.newHashSet(); for (final JsonNode lookup: lookups) set.add(new Object[] { JsonRef.fromString(lookup.get("id").textValue()), new JsonPointer(lookup.get("ptr").textValue()) }); return set.iterator(); }
@Test( dependsOnMethods = "keywordIsSupportedInThisDictionary", dataProvider = "getPointerTests" ) public final void pointerDelegationWorksCorrectly(final JsonNode schema, final ArrayNode expectedPointers) throws ProcessingException, JsonPointerException { final SchemaTree tree = new CanonicalSchemaTree(SchemaKey.anonymousKey(), schema); checker.checkSyntax(pointers, BUNDLE, report, tree); final List<JsonPointer> expected = Lists.newArrayList(); for (final JsonNode node: expectedPointers) expected.add(new JsonPointer(node.textValue())); assertEquals(pointers, expected); }
@Test(dataProvider = "getContexts") public void pointerAppendCorrectlyCalculatesContext(final String path, final String s) throws JsonPointerException, JsonReferenceException { final JsonPointer ptr = new JsonPointer(path); final JsonRef scope = JsonRef.fromString(s); final SchemaTree tree = new CanonicalSchemaTree(SchemaKey.anonymousKey(), schema); assertEquals(tree.append(ptr).getContext(), scope); }
@Test(dataProvider = "getContexts") public void pointerSetCorrectlyCalculatesContext(final String path, final String s) throws JsonPointerException, JsonReferenceException { final JsonPointer ptr = new JsonPointer(path); final JsonRef scope = JsonRef.fromString(s); SchemaTree tree = new CanonicalSchemaTree(SchemaKey.anonymousKey(), schema); final JsonRef origRef = tree.getContext(); tree = tree.setPointer(ptr); assertEquals(tree.getContext(), scope); tree = tree.setPointer(JsonPointer.empty()); assertEquals(tree.getContext(), origRef); }