Ошибки приложения ODL hello world при загрузке в Karaf - PullRequest
0 голосов
/ 09 ноября 2018

Я хотел бы воспроизвести приложение helloworld из официального документа. Мое приложение называется Testapp, и я создал его из org.opendaylight.controller groupId версии 1.5.0. После добавления примера кода (из официального документа) и запуска карафа, я получаю эту ошибку, связанную с брокером данных.

Статус: отказ светокопия 18.08.18 18:42 Исключение: Невозможно загрузить класс org.opendaylight.controller.md.sal.binding.api.DataBroker из рецепта ReferenceRecipe [name = 'dataBroker'] org.osgi.service.blueprint.container.ComponentDefinitionException: невозможно загрузить класс org.opendaylight.controller.md.sal.binding.api.DataBroker из рецепта ReferenceRecipe [name = 'dataBroker'] в org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe.loadType (AbstractServiceReferenceRecipe.java:309) в org.apache.aries.blueprint.di.AbstractRecipe.loadClass (AbstractRecipe.java:149) в org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe.getInterfaceClass (AbstractServiceReferenceRecipe.java:392) в org.apache.aries.blueprint.container.ReferenceRecipe.internalCreate (ReferenceRecipe.java:100) в org.apache.aries.blueprint.di.AbstractRecipe $ 1.call (AbstractRecipe.java:79) в java.util.concurrent.FutureTask.run (FutureTask.java:266) в org.apache.aries.blueprint.di.AbstractRecipe.create (AbstractRecipe.java:88) в org.apache.aries.blueprint.container.BlueprintRepository.createInstances (BlueprintRepository.java:255) в org.apache.aries.blueprint.container.BlueprintRepository.createAll (BlueprintRepository.java:186) в org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents (BlueprintContainerImpl.java:704) в org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun (BlueprintContainerImpl.java:410) в org.apache.aries.blueprint.container.BlueprintContainerImpl.run (BlueprintContainerImpl.java:275) в java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:511) в java.util.concurrent.FutureTask.run (FutureTask.java:266) в org.apache.aries.blueprint.container.ExecutorServiceWrapper.run (ExecutorServiceWrapper.java:106) в org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run (DiscardableRunnable.java:48) в java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:511) в java.util.concurrent.FutureTask.run (FutureTask.java:266) в java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 201 (ScheduledThreadPoolExecutor.java:180) в java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java:293) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624) на java.lang.Thread.run (Thread.java:748) Причина: java.lang.ClassNotFoundException: org.opendaylight.controller.md.sal.binding.api.DataBroker не может быть найдена org.opendaylight.testapp.impl_0.1.0 в org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal (BundleLoader.java:461) в org.eclipse.osgi.internal.loader.BundleLoader.findClass (BundleLoader.java:372) в org.eclipse.osgi.internal.loader.BundleLoader.findClass (BundleLoader.java:364) в org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass (ModuleClassLoader.java:161) в java.lang.ClassLoader.loadClass (ClassLoader.java:357) в org.eclipse.osgi.internal.framework.EquinoxBundle.loadClass (EquinoxBundle.java:564) в org.apache.aries.blueprint.container.BlueprintContainerImpl.loadClass (BlueprintContainerImpl.java:447) в org.apache.aries.blueprint.container.GenericType.parse (GenericType.java:137) в org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe.loadType (AbstractServiceReferenceRecipe.java:307) ... еще 22 * ​​1004 *

Декларативные услуги

Мой TestappProvider.java

package org.opendaylight.testapp.impl;

    import   org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext ;
    import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration;
    import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
    import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.testapp.rev170830.TestappService;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    public class TestappProvider implements BindingAwareProvider, AutoCloseable {

    private static final Logger LOG = LoggerFactory.getLogger(TestappProvider.class);
    private RpcRegistration<TestappService> helloService;

    @Override
    public void onSessionInitiated(ProviderContext session) {
        LOG.info("TestappProvider Session Initiated");
        helloService = session.addRpcImplementation(TestappService.class, new TestappImpl());
    }

    @Override
    public void close() throws Exception {
        LOG.info("TestappProvider Closed");
        if (helloService != null) {
            helloService.close();
        }
    }
}

My TestappImpl

package org.opendaylight.testapp.impl;

import java.util.concurrent.Future;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.testapp.rev170830.TestappService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.testapp.rev170830.HelloWorldInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.testapp.rev170830.HelloWorldOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.testapp.rev170830.HelloWorldOutputBuilder;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
public class TestappImpl implements TestappService {
@Override
public Future<RpcResult<HelloWorldOutput>> helloWorld(HelloWorldInput input) {
    HelloWorldOutputBuilder helloBuilder = new HelloWorldOutputBuilder();
    helloBuilder.setGreating("Hello " + input.getName());
    return RpcResultBuilder.success(helloBuilder.build()).buildFuture();
}
}
...