在吊索中创建一个新的mixin

Nab*_*ilS 2 java jackrabbit jcr sling

我无法使用以下代码在apache吊索中为jackrabbit创建新的自定义类型.这在Jackrabbit上运行良好,但在Apache Sling上没有.我是否正确地为吊索做这件事?谢谢

以下代码为我提供了"javax.jcr.InvalidItemStateException:Conflict".我使用独立的吊索,是唯一的用户,所以绝对没有冲突.

Repository repository = JcrUtils.getRepository("http://localhost:8080/server");

Session session = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));

NamespaceRegistry registry = session.getWorkspace().getNamespaceRegistry();
registry.registerNamespace("my", "http://my.com/v1.0");

CndImporter.registerNodeTypes(new FileReader("C:\\test.cnd"), session);
Run Code Online (Sandbox Code Playgroud)

Ber*_*taz 5

如果你正在使用Sling,你可以通过将你的CND文件放在一个OSGi包中(你的java代码应该驻留在那里)来避免这一切,并使用一个标题告诉Sling在哪里找到它.

激活捆绑包后,将自动注册您的节点类型.有关此示例,请参阅event.snd文件,该文件在Sling-Nodetypes包头中声明,该头文件在该模块的pom.xml中设置(或者如果您不使用Maven ,则以任何其他方式).

另请注意,您不应该在Sling中使用JcrUtils.getRepository,获取存储库的正确方法是通过SlingRepository OSGi服务,该服务以一致的方式为所有Sling组件处理存储库登录和配置.您可以通过@Reference将存储库获取到Java代码中的SlingRepository,或者从Sling提供的Resource获取JCR会话以请求servlet和脚本等处理程序.该Slingbucks样品使用这两种机制.