-
- @Override
- public HandlingPriority canHandle(final Document message) throws DocumentedException {
- OperationNameAndNamespace operationNameAndNamespace = null;
- operationNameAndNamespace = new OperationNameAndNamespace(message);
- return canHandle(operationNameAndNamespace.getOperationName(),
- operationNameAndNamespace.getNamespace());
- }
-
- @Override
- public Document handle(Document requestMessage,
- NetconfOperationChainedExecution subsequentOperation) throws DocumentedException {
- logger.debug("Reset rpc is received in netconfserver");
-
- final XmlElement requestElement = XmlElement.fromDomDocument(requestMessage);
-
- final String msgId = requestElement.getAttribute(XmlNetconfConstants.MESSAGE_ID);
- final Element element =
- requestMessage.createElementNS(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0,
- XmlNetconfConstants.RPC_REPLY_KEY);
- element.setAttribute("xmlns:ns1", getOperationNamespace());
- element.setAttribute("message-id", msgId);
-
- String requestXml = XmlUtility.convertDocumentToString(requestElement);
- logger.debug("reset rpc requestXml= {}", requestXml);
-
- NetConfServerProperties config =
- NetConfServiceBooter.getApplicationContext().getBean(NetConfServerProperties.class);
-
- final String baseUrl = config.getMapperPath() + "/reset";
- NetConfResponse restResponse =
- XmlUtility.invokeMapperCall(baseUrl, requestXml, deviceID, swVersion, hwVersion);
- Document respDoc = null;
-
- ErrorCodeDetails errorCode = restResponse.getErrorCode();
- if (errorCode != null && errorCode.getFaultCode() != null
- && !errorCode.getFaultCode().equalsIgnoreCase("0")) {
- logger.error("Error recevied : {}", errorCode);
- throw new DocumentedException(errorCode.getErrorMessage(),
- ErrorType.from(errorCode.getErrorType()), ErrorTag.from(errorCode.getErrorTag()),
- ErrorSeverity.from(errorCode.getErrorSeverity()));
- } else {
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
- factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");
- DocumentBuilder builder;
- try {
- Node child = requestMessage.createElement(XmlNetconfConstants.OK);
- element.appendChild(child);
- String xmlStr = XmlUtility.convertDocumentToString(element);
- try {
- builder = factory.newDocumentBuilder();
- respDoc = builder.parse(new InputSource(new StringReader(xmlStr)));
- } catch (Exception e) {
- logger.error("Error while converting String to element: {}", e.getMessage());
- throw new DocumentedException("Operation Aborted", ErrorType.from("application"),
- ErrorTag.from("operation-failed"), ErrorSeverity.from("ERROR"));
- }
- } catch (Exception e) {
- logger.error("Error while contruscting the response: {}", e.getMessage());
- throw new DocumentedException("Operation Aborted", ErrorType.from("application"),
- ErrorTag.from("operation-failed"), ErrorSeverity.from("ERROR"));
- }
- }
-
- return respDoc;
- }
-
- protected HandlingPriority canHandle(final String operationName,
- final String operationNamespace) {
- return operationName.equals(getOperationName())
- && operationNamespace.equals(getOperationNamespace())
- ? HandlingPriority.HANDLE_WITH_DEFAULT_PRIORITY.increasePriority(1100)
- : HandlingPriority.CANNOT_HANDLE;
- }
-
- public static final class OperationNameAndNamespace {
- private final String operationName;
- private final String namespace;
-
- private final XmlElement operationElement;
-
- public OperationNameAndNamespace(final Document message) throws DocumentedException {
- XmlElement requestElement = null;
- requestElement = getRequestElementWithCheck(message);
- operationElement = requestElement.getOnlyChildElement();
- operationName = operationElement.getName();
- namespace = operationElement.getNamespace();
- }
-
- public String getOperationName() {
- return operationName;
- }
-
- public String getNamespace() {
- return namespace;
- }
-
- public XmlElement getOperationElement() {
- return operationElement;
- }
-
- }
-
- protected static XmlElement getRequestElementWithCheck(final Document message)
- throws DocumentedException {
- return XmlElement.fromDomElementWithExpected(message.getDocumentElement(),
- XmlNetconfConstants.RPC_KEY, XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0);
- }
-
- protected String getOperationNamespace() {
- return OP_NAMESPACE;
- }
-
- protected String getOperationName() {
- return OP_NAME;
- }
-