java - 在 sling 中创建一个新的 mixin

标签 java jackrabbit jcr sling

我在使用下面的代码为 apache sling 中的 jackrabbit 创建新的自定义类型时遇到问题。这直接在 Jackrabbit 上工作得很好,但在 Apache Sling 上却不行。我对吊索的做法是否正确?谢谢

以下代码给了我一个“javax.jcr.InvalidItemStateException:冲突”。我使用的是独立吊带,并且是唯一的用户,因此绝对不存在冲突。

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);

最佳答案

如果您使用 Sling,您可以通过将 CND 文件放入 OSGi 包(您的 Java 代码应该驻留在其中)来避免这一切,并使用 header 告诉 Sling 在哪里可以找到它。

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

另请注意,无论如何,您在 Sling 中都不应该需要 JcrUtils.getRepository,获取存储库的正确方法是通过 SlingRepository OSGi 服务,该服务以一致的方式为所有 Sling 组件处理存储库登录和配置。您可以通过 java 代码中对 SlingRepository 的 @Reference 获取存储库,或者从 Sling 提供的资源获取 JCR session 以请求处理程序(如 servlet 和脚本)。 Slingbucks sample使用这两种机制。

关于java - 在 sling 中创建一个新的 mixin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14355861/

相关文章:

jackrabbit - 在 Jackrabbit 存储库之间复制 Lucene 索引

java - 即使类已放入类路径目录中,也会重复 ClassNotFoundException

java - "cannot find the file specified",检查多次并且看起来正确

java - 使用来自 GWT Java 的 javascript 变量

java - 如何使 Jackrabbit WebDAV servlet 允许使用 Microsoft Word 进行编辑?

java - 无法冒充 - Jackrabbit

content-management-system - JCR 存储库可用于 Junit 测试

jcr - SlingModel 未正确映射 JCR

java - 将多个 JCR 存储库连接到一个数据库(并保持更新)

java - 处理异常,如 Spring MVC 中的验证错误