问题描述
我正在尝试在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()
遇到了同样的错误,因此我将其注释掉以查看是否有帮助。
所以
- 我是否可以参考任何文档/ javadocs来理解对操作数据存储区执行READ之后返回的Optional ?
- 是否存在基于当前原型的示例,因为NCMount基于旧版本的Opendaylight ?
任何帮助将不胜感激。谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)