Opendaylight-找不到符号getNode

问题描述

我正在尝试在Opendaylight中创建一个基本的Hello-World应用程序。我按照https://docs.opendaylight.org/en/stable-magnesium/developer-guide/developing-apps-on-the-opendaylight-controller.html中的步骤创建了应用。

我能够像本教程中一样运行基本的Hello-World RPC,并尝试扩展该应用程序,以便它可以返回存在于等效/restconf/operational/network-topology:network-topology/topology/topology-netconf/上的Netconf节点。为此,我指的是https://github.com/opendaylight/coretutorials/tree/master/ncmount中的NCMount示例。

尝试进行Maven构建时,出现以下错误

/home/ubuntu/ghost/odlapps/1.3.0-SS/hello/impl/src/main/java/org/opendaylight/hello/impl/HelloWorldImpl.java:[58,21] cannot find symbol
[ERROR]   symbol:   method getNode()
[ERROR]   location: class java.util.Optional<org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology>

我的HelloWorldImpl.java如下:

package org.opendaylight.hello.impl;

import com.google.common.util.concurrent.ListenableFuture;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;

import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev191127.HelloService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev191127.HelloWorldInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev191127.HelloWorldOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev191127.HelloWorldOutputBuilder;

import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.common.QName;

import org.opendaylight.mdsal.binding.api.Databroker;
import org.opendaylight.mdsal.binding.api.ReadTransaction;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.mdsal.common.api.ReadFailedException;

import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;


public class HelloWorldImpl implements HelloService {

    private static final Logger LOG = LoggerFactory.getLogger(HelloWorldImpl.class);
    private final Databroker databroker;
    public static final InstanceIdentifier<Topology> NETCONF_TOPO_IID =
            InstanceIdentifier
                    .create(NetworkTopology.class)
                    .child(Topology.class,new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())));

    @Override
    public ListenableFuture<RpcResult<HelloWorldOutput>> helloWorld(HelloWorldInput input) {

        HelloWorldOutputBuilder helloBuilder = new HelloWorldOutputBuilder();
        ReadTransaction tx = databroker.newReadOnlyTransaction();
        List<Node> nodes;

        // Get All nodes from Operational Database
        try {
            nodes = tx.read(LogicalDatastoreType.OPERATIONAL,NETCONF_TOPO_IID)
//                    .checkedGet()
                    .get()
                    .getNode();
        } catch (ReadFailedException e) {
            LOG.error("Failed to read node config from datastore",e);
            throw new IllegalStateException(e);
        }

        List<String> results = new ArrayList<>();
        for (Node node : nodes) {
                LOG.info("Node: {}",node);
                NetconfNode nnode = node.augmentation(NetconfNode.class);
                if (nnode != null) {
                        // We have a device
                        ConnectionStatus csts = nnode.getConnectionStatus();
                }
                results.add(node.getNodeId().getValue());
        }

        helloBuilder.setGreeting(results);
        return RpcResultBuilder.success(helloBuilder.build()).buildFuture();
    }
}

我不确定org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology返回什么,因为我似乎无法在任何地方找到该软件包的apidoc。 getChecked()遇到了同样的错误,因此我将其注释掉以查看是否有帮助。

所以

  1. 我是否可以参考任何文档/ javadocs来理解对操作数据存储区执行READ之后返回的Optional
  2. 是否存在基于当前原型的示例,因为NCMount基于旧版本的Opendaylight

任何帮助将不胜感激。谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)