import java.util.ArrayList;
import java.util.List;
import java.util.Set;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.dom.DOMSource;
import org.opendaylight.controller.md.sal.dom.api.DOMNotification;
import org.opendaylight.controller.md.sal.dom.api.DOMNotificationListener;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.messagebus.eventsource.rev141202.EventSourceStatus;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.messagebus.eventsource.rev141202.EventSourceStatusNotification;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.messagebus.eventsource.rev141202.EventSourceStatusNotificationBuilder;
+import org.opendaylight.yangtools.util.xml.UntrustedXML;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
private final DOMNotificationListener domNotificationListener;
- public ConnectionNotificationTopicRegistration(String SourceName, DOMNotificationListener domNotificationListener) {
+ public ConnectionNotificationTopicRegistration(final String SourceName,
+ final DOMNotificationListener domNotificationListener) {
super(NotificationSourceType.ConnectionStatusChange, SourceName,
EVENT_SOURCE_STATUS_PATH.getLastComponent().getNamespace().toString());
this.domNotificationListener = Preconditions.checkNotNull(domNotificationListener);
setReplaySupported(false);
}
- @Override public void close() throws Exception {
+ @Override
+ public void close() {
if (isActive()) {
LOG.debug("Connection notification - publish Deactive");
publishNotification(EventSourceStatus.Deactive);
}
}
- @Override void activateNotificationSource() {
+ @Override
+ void activateNotificationSource() {
LOG.debug("Connection notification - publish Active");
publishNotification(EventSourceStatus.Active);
}
- @Override void deActivateNotificationSource() {
+ @Override
+ void deActivateNotificationSource() {
LOG.debug("Connection notification - publish Inactive");
publishNotification(EventSourceStatus.Inactive);
}
- @Override void reActivateNotificationSource() {
+ @Override
+ void reActivateNotificationSource() {
LOG.debug("Connection notification - reactivate - publish active");
publishNotification(EventSourceStatus.Active);
}
- @Override boolean registerNotificationTopic(SchemaPath notificationPath, TopicId topicId) {
+ @Override
+ boolean registerNotificationTopic(final SchemaPath notificationPath, final TopicId topicId) {
if (!checkNotificationPath(notificationPath)) {
LOG.debug("Bad SchemaPath for notification try to register");
return false;
return true;
}
- @Override synchronized void unRegisterNotificationTopic(TopicId topicId) {
+ @Override
+ synchronized void unRegisterNotificationTopic(final TopicId topicId) {
List<SchemaPath> notificationPathToRemove = new ArrayList<>();
for (SchemaPath notifKey : notificationTopicMap.keySet()) {
Set<TopicId> topicList = notificationTopicMap.get(notifKey);
}
}
- private void publishNotification(EventSourceStatus eventSourceStatus) {
+ private void publishNotification(final EventSourceStatus eventSourceStatus) {
final EventSourceStatusNotification notification = new EventSourceStatusNotificationBuilder()
.setStatus(eventSourceStatus).build();
domNotificationListener.onNotification(createNotification(notification));
}
- private DOMNotification createNotification(EventSourceStatusNotification notification) {
+ private static DOMNotification createNotification(final EventSourceStatusNotification notification) {
final ContainerNode cn = Builders.containerBuilder().withNodeIdentifier(EVENT_SOURCE_STATUS_ARG)
.withChild(encapsulate(notification)).build();
DOMNotification dn = new DOMNotification() {
return dn;
}
- private AnyXmlNode encapsulate(EventSourceStatusNotification notification) {
-
- DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder docBuilder;
-
- try {
- docBuilder = docFactory.newDocumentBuilder();
- } catch (ParserConfigurationException e) {
- throw new IllegalStateException("Can not create XML DocumentBuilder");
- }
-
- Document doc = docBuilder.newDocument();
+ private static AnyXmlNode encapsulate(final EventSourceStatusNotification notification) {
+ Document doc = UntrustedXML.newDocumentBuilder().newDocument();
final Optional<String> namespace = Optional.of(EVENT_SOURCE_STATUS_ARG.getNodeType().getNamespace().toString());
final Element rootElement = createElement(doc, "EventSourceStatusNotification", namespace);
return Builders.anyXmlBuilder().withNodeIdentifier(EVENT_SOURCE_STATUS_ARG)
.withValue(new DOMSource(rootElement)).build();
-
}
// Helper to create root XML element with correct namespace and attribute
- private Element createElement(final Document document, final String qName, final Optional<String> namespaceURI) {
+ private static Element createElement(final Document document, final String qName,
+ final Optional<String> namespaceURI) {
if (namespaceURI.isPresent()) {
final Element element = document.createElementNS(namespaceURI.get(), qName);
String name = XMLNS_ATTRIBUTE_KEY;
import static org.junit.Assert.assertNotNull;
import java.util.Date;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
import org.junit.Test;
+import org.opendaylight.yangtools.util.xml.UntrustedXML;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
@Test
public void testWrapNotification() throws Exception {
- final DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
- final DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
-
- final Document document = docBuilder.newDocument();
+ final Document document = UntrustedXML.newDocumentBuilder().newDocument();
final Element rootElement = document.createElement("test-root");
document.appendChild(rootElement);
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
-import javax.xml.parsers.DocumentBuilderFactory;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.controller.config.util.xml.XmlUtil;
NetconfMessage userNotification;
- @SuppressWarnings("deprecation")
@Before
public void setup() throws Exception {
- final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- factory.setNamespaceAware(true);
InputStream notifyPayloadStream = getClass().getResourceAsStream("/notification-payload.xml");
assertNotNull(notifyPayloadStream);
userNotification = new NetconfMessage(doc);
}
- static SchemaContext getNotificationSchemaContext(Class<?> loadClass, boolean getExceptionTest) throws Exception {
+ static SchemaContext getNotificationSchemaContext(final Class<?> loadClass, final boolean getExceptionTest) throws Exception {
final List<InputStream> modelsToParse = new ArrayList<>();
if (getExceptionTest) {
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
-import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
import org.opendaylight.protocol.framework.ReconnectStrategy;
-import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
import org.opendaylight.protocol.framework.TimedReconnectStrategy;
+import org.opendaylight.yangtools.util.xml.UntrustedXML;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.RpcError;
import org.opendaylight.yangtools.yang.common.RpcResult;
@SuppressWarnings("unchecked")
private ListenableFuture<RpcResult<NetconfMessage>> sendRequest( final String messageID, final boolean doLastTest ) throws Exception {
- Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
+ Document doc = UntrustedXML.newDocumentBuilder().newDocument();
Element element = doc.createElement( "request" );
element.setAttribute( "message-id", messageID );
doc.appendChild( element );
public void testSendRequest() throws Exception {
setupSession();
- NetconfMessage message = new NetconfMessage(
- DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument() );
+ NetconfMessage message = new NetconfMessage(UntrustedXML.newDocumentBuilder().newDocument());
QName rpc = QName.create( "mock rpc" );
ArgumentCaptor<GenericFutureListener> futureListener =
@Test
public void testSendRequestWithNoSession() throws Exception {
- NetconfMessage message = new NetconfMessage(
- DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument() );
+ NetconfMessage message = new NetconfMessage(UntrustedXML.newDocumentBuilder().newDocument());
QName rpc = QName.create( "mock rpc" );
ListenableFuture<RpcResult<NetconfMessage>> resultFuture = communicator.sendRequest( message, rpc );
public void testSendRequestWithWithSendFailure() throws Exception {
setupSession();
- NetconfMessage message = new NetconfMessage(
- DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument() );
+ NetconfMessage message = new NetconfMessage(UntrustedXML.newDocumentBuilder().newDocument());
QName rpc = QName.create( "mock rpc" );
ArgumentCaptor<GenericFutureListener> futureListener =
}
private static NetconfMessage createSuccessResponseMessage( final String messageID ) throws ParserConfigurationException {
- Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
+ Document doc = UntrustedXML.newDocumentBuilder().newDocument();
Element rpcReply = doc.createElementNS( URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0, XmlMappingConstants.RPC_REPLY_KEY);
rpcReply.setAttribute( "message-id", messageID );
Element element = doc.createElementNS( "ns", "data" );
final NetconfReconnectingClientConfiguration cfg = NetconfReconnectingClientConfigurationBuilder.create()
.withAddress(new InetSocketAddress("localhost", 65000))
.withReconnectStrategy(reconnectStrategy)
- .withConnectStrategyFactory(new ReconnectStrategyFactory() {
- @Override
- public ReconnectStrategy createReconnectStrategy() {
- return reconnectStrategy;
- }
- })
+ .withConnectStrategyFactory(() -> reconnectStrategy)
.withAuthHandler(new LoginPassword("admin", "admin"))
.withConnectionTimeoutMillis(10000)
.withProtocol(NetconfClientConfiguration.NetconfClientProtocol.SSH)
"</rpc-reply>";
ByteArrayInputStream bis = new ByteArrayInputStream( xmlStr.getBytes() );
- Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse( bis );
+ Document doc = UntrustedXML.newDocumentBuilder().parse(bis);
return new NetconfMessage( doc );
}
import com.google.common.util.concurrent.Futures;
import java.net.InetSocketAddress;
import java.util.Collections;
-import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.dom.DOMSource;
import org.junit.Assert;
import org.opendaylight.controller.md.sal.dom.spi.DefaultDOMRpcResult;
import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
+import org.opendaylight.yangtools.util.xml.UntrustedXML;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.RpcError;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
final YangInstanceIdentifier.NodeIdentifier childId = YangInstanceIdentifier.NodeIdentifier.create(
QName.create("urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring", "2010-10-04", "data")
);
- Document xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
+ Document xmlDoc = UntrustedXML.newDocumentBuilder().newDocument();
Element root = xmlDoc.createElement("data");
root.setTextContent("module test {}");
final DOMSource v = new DOMSource(root);
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.Provider;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
import org.opendaylight.netconf.sal.rest.api.Draft02;
import org.opendaylight.netconf.sal.rest.api.RestconfService;
import org.opendaylight.netconf.sal.restconf.impl.InstanceIdentifierContext;
import org.opendaylight.netconf.sal.restconf.impl.RestconfError.ErrorTag;
import org.opendaylight.netconf.sal.restconf.impl.RestconfError.ErrorType;
import org.opendaylight.restconf.utils.RestconfConstants;
+import org.opendaylight.yangtools.util.xml.UntrustedXML;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlUtils;
public class XmlNormalizedNodeBodyReader extends AbstractIdentifierAwareJaxRsProvider implements MessageBodyReader<NormalizedNodeContext> {
private final static Logger LOG = LoggerFactory.getLogger(XmlNormalizedNodeBodyReader.class);
- private static final DocumentBuilderFactory BUILDERFACTORY;
-
- static {
- final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- try {
- factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
- factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
- factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
- factory.setXIncludeAware(false);
- factory.setExpandEntityReferences(false);
- } catch (final ParserConfigurationException e) {
- throw new ExceptionInInitializerError(e);
- }
- factory.setNamespaceAware(true);
- factory.setCoalescing(true);
- factory.setIgnoringElementContentWhitespace(true);
- factory.setIgnoringComments(true);
- BUILDERFACTORY = factory;
- }
@Override
public boolean isReadable(final Class<?> type, final Type genericType, final Annotation[] annotations,
return new NormalizedNodeContext(path, null);
}
- final DocumentBuilder dBuilder;
- try {
- dBuilder = BUILDERFACTORY.newDocumentBuilder();
- } catch (final ParserConfigurationException e) {
- throw new RuntimeException("Failed to parse XML document", e);
- }
- final Document doc = dBuilder.parse(entityStream);
-
- return parse(path,doc);
+ final Document doc = UntrustedXML.newDocumentBuilder().parse(entityStream);
+ return parse(path, doc);
}
private NormalizedNodeContext parse(final InstanceIdentifierContext<?> pathContext,final Document doc) {
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.Provider;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
import org.opendaylight.netconf.sal.rest.api.Draft02;
import org.opendaylight.netconf.sal.rest.api.RestconfService;
import org.opendaylight.netconf.sal.restconf.impl.InstanceIdentifierContext;
import org.opendaylight.netconf.sal.restconf.impl.RestconfDocumentedException;
import org.opendaylight.netconf.sal.restconf.impl.RestconfError.ErrorTag;
import org.opendaylight.netconf.sal.restconf.impl.RestconfError.ErrorType;
+import org.opendaylight.yangtools.util.xml.UntrustedXML;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
MessageBodyReader<PATCHContext> {
private final static Logger LOG = LoggerFactory.getLogger(XmlToPATCHBodyReader.class);
- private static final DocumentBuilderFactory BUILDERFACTORY;
-
- static {
- final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- try {
- factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
- factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
- factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
- factory.setXIncludeAware(false);
- factory.setExpandEntityReferences(false);
- } catch (final ParserConfigurationException e) {
- throw new ExceptionInInitializerError(e);
- }
- factory.setNamespaceAware(true);
- factory.setCoalescing(true);
- factory.setIgnoringElementContentWhitespace(true);
- factory.setIgnoringComments(true);
- BUILDERFACTORY = factory;
- }
@Override
public boolean isReadable(final Class<?> type, final Type genericType,
return new PATCHContext(path, null, null);
}
- final DocumentBuilder dBuilder;
- try {
- dBuilder = BUILDERFACTORY.newDocumentBuilder();
- } catch (final ParserConfigurationException e) {
- throw new IllegalStateException("Failed to parse XML document", e);
- }
- final Document doc = dBuilder.parse(entityStream);
-
+ final Document doc = UntrustedXML.newDocumentBuilder().parse(entityStream);
return parse(path, doc);
} catch (final RestconfDocumentedException e) {
throw e;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.Date;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.ParserConfigurationException;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
import org.opendaylight.restconf.handlers.SchemaContextHandler;
import org.opendaylight.restconf.handlers.TransactionChainHandler;
import org.opendaylight.restconf.parser.IdentifierCodec;
+import org.opendaylight.yangtools.util.xml.UntrustedXML;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
* @return {@link Document} document.
*/
protected static Document createDocument() {
- final DocumentBuilder bob;
- try {
- bob = ListenersConstants.DBF.newDocumentBuilder();
- } catch (final ParserConfigurationException e) {
- return null;
- }
- return bob.newDocument();
+ return UntrustedXML.newDocumentBuilder().newDocument();
}
/**
import java.text.SimpleDateFormat;
import java.util.regex.Pattern;
-import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.TransformerFactory;
/**
*/
class ListenersConstants {
- static final DocumentBuilderFactory DBF = DocumentBuilderFactory.newInstance();
static final TransformerFactory FACTORY = TransformerFactory.newInstance();
static final Pattern RFC3339_PATTERN = Pattern.compile("(\\d\\d)(\\d\\d)$");
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.Provider;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
import org.opendaylight.netconf.sal.restconf.impl.InstanceIdentifierContext;
import org.opendaylight.netconf.sal.restconf.impl.NormalizedNodeContext;
import org.opendaylight.netconf.sal.restconf.impl.RestconfDocumentedException;
import org.opendaylight.netconf.sal.restconf.impl.RestconfError.ErrorType;
import org.opendaylight.restconf.Rfc8040;
import org.opendaylight.restconf.utils.RestconfConstants;
+import org.opendaylight.yangtools.util.xml.UntrustedXML;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlUtils;
public class XmlNormalizedNodeBodyReader extends AbstractIdentifierAwareJaxRsProvider implements MessageBodyReader<NormalizedNodeContext> {
private final static Logger LOG = LoggerFactory.getLogger(XmlNormalizedNodeBodyReader.class);
- private static final DocumentBuilderFactory BUILDERFACTORY;
-
- static {
- final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- try {
- factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
- factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
- factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
- factory.setXIncludeAware(false);
- factory.setExpandEntityReferences(false);
- } catch (final ParserConfigurationException e) {
- throw new ExceptionInInitializerError(e);
- }
- factory.setNamespaceAware(true);
- factory.setCoalescing(true);
- factory.setIgnoringElementContentWhitespace(true);
- factory.setIgnoringComments(true);
- BUILDERFACTORY = factory;
- }
@Override
public boolean isReadable(final Class<?> type, final Type genericType, final Annotation[] annotations,
return new NormalizedNodeContext(path, null);
}
- final DocumentBuilder dBuilder;
- try {
- dBuilder = BUILDERFACTORY.newDocumentBuilder();
- } catch (final ParserConfigurationException e) {
- throw new RuntimeException("Failed to parse XML document", e);
- }
- final Document doc = dBuilder.parse(entityStream);
-
+ final Document doc = UntrustedXML.newDocumentBuilder().parse(entityStream);
return parse(path,doc);
} catch (final RestconfDocumentedException e){
throw e;
final DomToNormalizedNodeParserFactory parserFactory =
- DomToNormalizedNodeParserFactory.getInstance(XmlUtils.DEFAULT_XML_CODEC_PROVIDER, pathContext.getSchemaContext());
+ DomToNormalizedNodeParserFactory.getInstance(XmlUtils.DEFAULT_XML_CODEC_PROVIDER,
+ pathContext.getSchemaContext());
if (isPost() && !isRpc) {
final Deque<Object> foundSchemaNodes = findPathToSchemaNodeByName(schemaNode, docRootElm, docRootNamespace);
NormalizedNode<?, ?> parsed = null;
if (schemaNode instanceof ContainerSchemaNode) {
- parsed = parserFactory.getContainerNodeParser().parse(Collections.singletonList(doc.getDocumentElement()), (ContainerSchemaNode) schemaNode);
+ parsed = parserFactory.getContainerNodeParser().parse(Collections.singletonList(doc.getDocumentElement()),
+ (ContainerSchemaNode) schemaNode);
} else if(schemaNode instanceof ListSchemaNode) {
final ListSchemaNode casted = (ListSchemaNode) schemaNode;
parsed = parserFactory.getMapEntryNodeParser().parse(elements, casted);
final YangInstanceIdentifier fullIIToData = YangInstanceIdentifier.create(Iterables.concat(
pathContext.getInstanceIdentifier().getPathArguments(), iiToDataList));
- outIIContext = new InstanceIdentifierContext<>(fullIIToData, pathContext.getSchemaNode(), pathContext.getMountPoint(),
+ outIIContext = new InstanceIdentifierContext<>(fullIIToData, pathContext.getSchemaNode(),
+ pathContext.getMountPoint(),
pathContext.getSchemaContext());
return new NormalizedNodeContext(outIIContext, parsed);
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.Provider;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
import org.opendaylight.netconf.sal.restconf.impl.InstanceIdentifierContext;
import org.opendaylight.netconf.sal.restconf.impl.PATCHContext;
import org.opendaylight.netconf.sal.restconf.impl.PATCHEditOperation;
import org.opendaylight.netconf.sal.restconf.impl.RestconfError.ErrorType;
import org.opendaylight.restconf.Rfc8040;
import org.opendaylight.restconf.utils.RestconfConstants;
+import org.opendaylight.yangtools.util.xml.UntrustedXML;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
MessageBodyReader<PATCHContext> {
private final static Logger LOG = LoggerFactory.getLogger(XmlToPATCHBodyReader.class);
- private static final DocumentBuilderFactory BUILDERFACTORY;
-
- static {
- final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- try {
- factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
- factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
- factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
- factory.setXIncludeAware(false);
- factory.setExpandEntityReferences(false);
- } catch (final ParserConfigurationException e) {
- throw new ExceptionInInitializerError(e);
- }
- factory.setNamespaceAware(true);
- factory.setCoalescing(true);
- factory.setIgnoringElementContentWhitespace(true);
- factory.setIgnoringComments(true);
- BUILDERFACTORY = factory;
- }
-
@Override
public boolean isReadable(final Class<?> type, final Type genericType,
final Annotation[] annotations, final MediaType mediaType) {
return new PATCHContext(path, null, null);
}
- final DocumentBuilder dBuilder;
- try {
- dBuilder = BUILDERFACTORY.newDocumentBuilder();
- } catch (final ParserConfigurationException e) {
- throw new IllegalStateException("Failed to parse XML document", e);
- }
- final Document doc = dBuilder.parse(entityStream);
-
+ final Document doc = UntrustedXML.newDocumentBuilder().parse(entityStream);
return parse(path, doc);
} catch (final RestconfDocumentedException e) {
throw e;
*/
private String prepareNonCondXpath(@Nonnull final DataSchemaNode schemaNode, @Nonnull final String target,
@Nonnull final Element value, @Nonnull final String namespace,
- @Nonnull String revision) {
+ @Nonnull final String revision) {
final Iterator<String> args = Splitter.on("/").split(target.substring(target.indexOf(':') + 1)).iterator();
final StringBuilder nonCondXpath = new StringBuilder();
import java.util.Collection;
import java.util.Collections;
import java.util.List;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
import org.opendaylight.controller.sal.rest.impl.test.providers.TestJsonBodyWriter;
import org.opendaylight.netconf.sal.restconf.impl.ControllerContext;
import org.opendaylight.netconf.sal.restconf.impl.InstanceIdentifierContext;
import org.opendaylight.netconf.sal.restconf.impl.NormalizedNodeContext;
+import org.opendaylight.yangtools.util.xml.UntrustedXML;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlUtils;
import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.parser.DomToNormalizedNodeParserFactory;
private static final Logger LOG = LoggerFactory.getLogger(TestRestconfUtils.class);
- private static final DocumentBuilderFactory BUILDERFACTORY;
-
- static {
- final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- try {
- factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
- factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
- factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
- factory.setXIncludeAware(false);
- factory.setExpandEntityReferences(false);
- } catch (final ParserConfigurationException e) {
- throw new ExceptionInInitializerError(e);
- }
- factory.setNamespaceAware(true);
- factory.setCoalescing(true);
- factory.setIgnoringElementContentWhitespace(true);
- factory.setIgnoringComments(true);
- BUILDERFACTORY = factory;
- }
-
private TestRestconfUtils() {
throw new UnsupportedOperationException("Test utility class");
}
final InstanceIdentifierContext<?> iiContext = ControllerContext.getInstance().toInstanceIdentifier(uri);
final InputStream inputStream = TestJsonBodyWriter.class.getResourceAsStream(pathToInputFile);
try {
- final DocumentBuilder dBuilder = BUILDERFACTORY.newDocumentBuilder();
- final Document doc = dBuilder.parse(inputStream);
+ final Document doc = UntrustedXML.newDocumentBuilder().parse(inputStream);
final NormalizedNode<?, ?> nn = parse(iiContext, doc);
return new NormalizedNodeContext(iiContext, nn);
} catch (final Exception e) {
final String path = TestRestconfUtils.class.getResource(resourceDirectory).getPath();
final File testDir = new File(path);
final String[] fileList = testDir.list();
- final List<File> testFiles = new ArrayList<File>();
+ final List<File> testFiles = new ArrayList<>();
if (fileList == null) {
throw new FileNotFoundException(resourceDirectory);
}
- for (int i = 0; i < fileList.length; i++) {
- final String fileName = fileList[i];
+ for (final String fileName : fileList) {
if (new File(testDir, fileName).isDirectory() == false) {
testFiles.add(new File(testDir, fileName));
}
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;
import javax.xml.namespace.NamespaceContext;
-import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import org.opendaylight.netconf.sal.restconf.impl.RestconfError;
import org.opendaylight.netconf.sal.restconf.impl.RestconfError.ErrorTag;
import org.opendaylight.netconf.sal.restconf.impl.RestconfError.ErrorType;
+import org.opendaylight.yangtools.util.xml.UntrustedXML;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
/**
* Unit tests for RestconfDocumentedExceptionMapper.
}
}
+ private static final Logger LOG = LoggerFactory.getLogger(RestconfDocumentedExceptionMapperTest.class);
static RestconfService mockRestConf = mock(RestconfService.class);
static XPath XPATH = XPathFactory.newInstance().newXPath();
errorInfoVerifier);
}
- private Document parseXMLDocument(final InputStream stream) throws IOException {
- final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- factory.setNamespaceAware(true);
- factory.setCoalescing(true);
- factory.setIgnoringElementContentWhitespace(true);
- factory.setIgnoringComments(true);
-
+ private static Document parseXMLDocument(final InputStream stream) throws IOException, SAXException {
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
ByteStreams.copy(stream, bos);
- System.out.println("XML: " + bos.toString());
+ LOG.debug("XML: " + bos.toString());
- Document doc = null;
- try {
- doc = factory.newDocumentBuilder().parse(new ByteArrayInputStream(bos.toByteArray()));
- } catch (final Exception e) {
- throw new IllegalArgumentException("Invalid XML response:\n" + bos.toString(), e);
- }
- return doc;
+ return UntrustedXML.newDocumentBuilder().parse(new ByteArrayInputStream(bos.toByteArray()));
}
void verifyXMLErrorNode(final Node errorNode, final ErrorType expErrorType, final ErrorTag expErrorTag,
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
+import org.opendaylight.yangtools.util.xml.UntrustedXML;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
public static SchemaContext loadSchemaContext(final String... yangPath)
throws FileNotFoundException, ReactorException {
final List<InputStream> files = new ArrayList<>();
- for (int i = 0; i < yangPath.length; i++) {
- final String path = yangPath[i];
+ for (final String path : yangPath) {
final String pathToFile = TestUtils.class.getResource(path).getPath();
final File testDir = new File(pathToFile);
final String[] fileList = testDir.list();
throw new FileNotFoundException(pathToFile);
}
- for (int j = 0; j < fileList.length; j++) {
- final String fileName = fileList[j];
+ for (final String fileName : fileList) {
final File file = new File(testDir, fileName);
if (file.isDirectory() == false) {
files.add(new NamedFileInputStream(file, file.getPath()));
public static Document loadDocumentFrom(final InputStream inputStream) {
try {
- final DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
- final DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
- return docBuilder.parse(inputStream);
- } catch (SAXException | IOException | ParserConfigurationException e) {
+ return UntrustedXML.newDocumentBuilder().parse(inputStream);
+ } catch (SAXException | IOException e) {
LOG.error("Error during loading Document from XML", e);
return null;
}
return matcher.matches();
}
- public static YangInstanceIdentifier.NodeIdentifier getNodeIdentifier(final String localName, final String namespace,
+ public static NodeIdentifier getNodeIdentifier(final String localName, final String namespace,
final String revision) throws ParseException {
- return new YangInstanceIdentifier.NodeIdentifier(QName.create(namespace, revision, localName));
+ return new NodeIdentifier(QName.create(namespace, revision, localName));
}
- public static YangInstanceIdentifier.NodeIdentifierWithPredicates getNodeIdentifierPredicate(final String localName,
+ public static NodeIdentifierWithPredicates getNodeIdentifierPredicate(final String localName,
final String namespace, final String revision, final Map<String, Object> keys) throws ParseException {
final Map<QName, Object> predicate = new HashMap<>();
for (final String key : keys.keySet()) {
predicate.put(QName.create(namespace, revision, key), keys.get(key));
}
- return new YangInstanceIdentifier.NodeIdentifierWithPredicates(
-
- QName.create(namespace, revision, localName), predicate);
+ return new NodeIdentifierWithPredicates(QName.create(namespace, revision, localName), predicate);
}
- public static YangInstanceIdentifier.NodeIdentifierWithPredicates getNodeIdentifierPredicate(final String localName,
+ public static NodeIdentifierWithPredicates getNodeIdentifierPredicate(final String localName,
final String namespace, final String revision, final String... keysAndValues) throws ParseException {
- if ((keysAndValues.length % 2) != 0) {
- new IllegalArgumentException("number of keys argument have to be divisible by 2 (map)");
- }
+ Preconditions.checkArgument((keysAndValues.length % 2) == 0,
+ "number of keys argument have to be divisible by 2 (map)");
final Map<QName, Object> predicate = new HashMap<>();
int i = 0;
predicate.put(QName.create(namespace, revision, keysAndValues[i++]), keysAndValues[i++]);
}
- return new YangInstanceIdentifier.NodeIdentifierWithPredicates(QName.create(namespace, revision, localName),
- predicate);
+ return new NodeIdentifierWithPredicates(QName.create(namespace, revision, localName), predicate);
}
static NormalizedNode<?,?> prepareNormalizedNodeWithIetfInterfacesInterfacesData() throws ParseException {
final String ietfInterfacesDate = "2013-07-04";
final String namespace = "urn:ietf:params:xml:ns:yang:ietf-interfaces";
- final DataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> mapEntryNode = ImmutableMapEntryNodeBuilder.create();
+ final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryNode =
+ ImmutableMapEntryNodeBuilder.create();
final Map<String, Object> predicates = new HashMap<>();
predicates.put("name", "eth0");