Я хотел бы воспроизвести приложение 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();
}
}