我正在尝试测试一个用Declaratice Services注释(org.OSGi.service.component.annotations
)注释的OSGi服务。我已经根据AEM多项目示例生成了我的项目。
public class PostServiceTest {
@Rule
public AemContext context = new AemContext((AemContextCallback) context -> {
context.registerInjectActivateService(new PostService());
}, ResourceResolverType.RESOURCERESOLVER_MOCK);
@Test
public void shouldFetchRandomPosts() {
final PostService postsService = context.getService(PostService.class);
final List<Post> posts = postsService.randomPosts(100);
assertEquals(100, posts.size());
}
}
每当我在IntelliJ中运行此测试时,OSGi Mock都会抱怨测试类中缺少SCR元数据。
org.apache.sling.testing.mock.osgi.NoScrMetadataException: No OSGi SCR metadata found for class com.example.PostServiceTest
at org.apache.sling.testing.mock.osgi.OsgiServiceUtil.injectServices(OsgiServiceUtil.java:381)
at org.apache.sling.testing.mock.osgi.MockOsgi.injectServices(MockOsgi.java:148)
at org.apache.sling.testing.mock.osgi.context.OsgiContextImpl.registerInjectActivateService(OsgiContextImpl.java:153)
at org.apache.sling.testing.mock.osgi.context.OsgiContextImpl.registerInjectActivateService(OsgiContextImpl.java:168)
at com.example.PostServiceTest.shouldReturnTheEnpointNamesWithValidConfigurationAsTheListOfAcceptableKeys(PostServiceTest.java:23)
这是否意味着我只能测试带有ApacheFelix附带的旧SCR注释的类?OSGi模拟的文档表明2.0版支持声明性服务注释。0及以上。我使用的版本符合此标准。
有趣的是,只有当我直接从IDE运行测试时,才会发生这种情况。事实证明,IntelliJ在编译我的类进行测试时并没有生成SCR元数据。
当我用Gradle编译被测试的类时,'com。cognifide。aem。bundle'
plugin用于生成SCR描述符并将其放在生成的Java归档文件中。这就是Gradle执行的单元测试工作正常的原因。只需单击IntelliJ中的Run按钮,就会导致错过此步骤。
为了让它工作,我最终设置了IntelliJ,允许我通过Gradle运行单元测试。
我去了布景
我正在将ApacheFelixSCR注释迁移到OSGI声明性服务[AEM]。在迁移过程中,我无法在DS中找到基数的精确替换。 现有的SCR实施: 现在它在OSGi声明性服务中迁移如下 在DS注释实现中,我必须映射@Property中存在的参数基数。请推荐我
创建服务接口,接口必须继承IService。 注意:在异步编程里,异步转同步调用是非常糟糕的,并且有可能死锁。为了避免这个问题,Uragano不支持同步方法,所有的服务方法必须是异步的。 [ServiceDiscoveryName("RPC")] [ServiceRoute("hello")] public interface IHelloService : IService { [Ser
问题内容: 我对Eclipse体系结构中的扩展/服务方法有些困惑。开发人员有两种选择: Eclipse插件扩展的使用-http: //www.eclipse.org/articles/Article-Plug-in-architecture/plugin_architecture.html 声明式服务的使用-http: //www.eclipse.org/equinox/bundles/ 什么时候
我有一个服务层类,它有annotation@Controller和我在线程中生成的服务调用,它正在更新数据库中的某些内容。我在thread的方法中使用了@transaction注释。但我遇到了hibernate异常“找不到会话”。我需要为线程添加任何注释吗? lient.runHibernateException:在lient.java:222没有找到当前线程的Session 4. SpringS
问题内容: 我正在尝试做这样的事情: 但这给了我这个例外: 是否可以将阶段定义为外部闭包? 问题答案: 您不能在声明式管道之外定义阶段。声明性管道的主要目的是提供经过简化且自以为是的语法,因此您可以专注于应该做什么(通过使用一些可用的步骤)而不是如何去做。 如果您对更灵活的管道实现方式感兴趣,可以选择“ 脚本化管道”方法,该语法在语法方面并不严格-仅受Groovy和CPS执行模块的限制。 您的示例
问题内容: 我想在DOCTYPE声明之前在HTML代码的顶部放置一个注释(样式)。这符合标准吗?主要浏览器都支持吗?这样做有什么陷阱吗? 问题答案: 编写 第一本书无疑是最佳实践。 我记得很久很久以前的奇怪问题,其中某些浏览器(可能是IE6)忽略了a, 因为之前似乎有些无辜- 我认为只是空白,但这也许是评论。无论如何,必须进行追踪是一个可怕的错误,而且绝对没有任何理由在 。之前添加注释或空格。 我