import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
-import java.net.URI;
-import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import org.opendaylight.netconf.api.xml.XmlElement;
import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder;
import org.opendaylight.yangtools.yang.data.codec.xml.XmlCodecFactory;
import org.opendaylight.yangtools.yang.data.util.codec.TypeAwareCodec;
import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
* @throws DocumentedException if filter content validation failed
*/
public YangInstanceIdentifier validate(final XmlElement filterContent) throws DocumentedException {
+ final XMLNamespace namespace;
+ try {
+ namespace = XMLNamespace.of(filterContent.getNamespace());
+ } catch (final IllegalArgumentException e) {
+ throw new RuntimeException("Wrong namespace in element + " + filterContent.toString(), e);
+ }
+
try {
- final URI namespace = new URI(filterContent.getNamespace());
final Module module = schemaContext.getCurrentContext().findModules(namespace).iterator().next();
final DataSchemaNode schema = getRootDataSchemaNode(module, namespace, filterContent.getName());
final FilterTree filterTree = validateNode(
filterContent, schema, new FilterTree(schema.getQName(), Type.OTHER, schema));
return getFilterDataRoot(filterTree, filterContent, YangInstanceIdentifier.builder());
- } catch (final URISyntaxException e) {
- throw new RuntimeException("Wrong namespace in element + " + filterContent.toString(), e);
} catch (final ValidationException e) {
LOG.debug("Filter content isn't valid", e);
throw new DocumentedException("Validation failed. Cause: " + e.getMessage(), e,
* @return child data node schema
* @throws DocumentedException if child with given name is not present
*/
- private DataSchemaNode getRootDataSchemaNode(final Module module, final URI nameSpace, final String name)
+ private DataSchemaNode getRootDataSchemaNode(final Module module, final XMLNamespace nameSpace, final String name)
throws DocumentedException {
for (final DataSchemaNode childNode : module.getChildNodes()) {
final QName qName = childNode.getQName();
for (final XmlElement childElement : childElements) {
try {
final Deque<DataSchemaNode> path = findSchemaNodeByNameAndNamespace(parentNodeSchema,
- childElement.getName(), new URI(childElement.getNamespace()));
+ childElement.getName(), XMLNamespace.of(childElement.getNamespace()));
if (path.isEmpty()) {
throw new ValidationException(element, childElement);
}
}
final DataSchemaNode childSchema = path.getLast();
validateNode(childElement, childSchema, subtree);
- } catch (URISyntaxException | MissingNameSpaceException e) {
+ } catch (IllegalArgumentException | MissingNameSpaceException e) {
throw new RuntimeException("Wrong namespace in element + " + childElement.toString(), e);
}
}
if (keyType instanceof IdentityrefTypeDefinition || keyType instanceof LeafrefTypeDefinition) {
final Document document = filterContent.getDomElement().getOwnerDocument();
final NamespaceContext nsContext = new UniversalNamespaceContextImpl(document, false);
- final XmlCodecFactory xmlCodecFactory =
- XmlCodecFactory.create(schemaContext.getCurrentContext());
- final TypeAwareCodec<?, NamespaceContext, XMLStreamWriter> typeCodec =
- xmlCodecFactory.codecFor(listKey);
+ final EffectiveModelContext modelContext = schemaContext.getCurrentContext();
+ final XmlCodecFactory xmlCodecFactory = XmlCodecFactory.create(modelContext);
+ final TypeAwareCodec<?, NamespaceContext, XMLStreamWriter> typeCodec = xmlCodecFactory.codecFor(
+ listKey, SchemaInferenceStack.ofInstantiatedPath(modelContext, listKey.getPath()));
final Object deserializedKeyValue = typeCodec.parseValue(nsContext, keyValue.get());
keys.put(qualifiedName, deserializedKeyValue);
} else {