标签: sling

Apache Sling脚本解析规则如何工作?

我的tst内容名称在页面中

sling:resourceType = news-portal/pages/test

页面结构(下/apps):

在此输入图像描述

测试了

sling:resourceSuperType = news-portal/pages/news-repo-main-page

在浏览器中我键入以下URL:

http://localhost:4502/cf#/content/tst.selector.pdf.html
Run Code Online (Sandbox Code Playgroud)

在此请求后,我看到了内容 selector.jsp

但我希望看到内容,selector.pdf.jsp 因为根据我的意见它更适合.

  1. 你能解释它是如何工作的吗?

  2. 有可以显示内容的URL selector.pdf.jsp吗?

  3. 内容的选择是否影响测试是 sling:resourceType 代替sling:resourceSuperType还是一起?(我尝试测试但看不到感情)

PS

我知道答案在这里:

在此输入图像描述

但我理解上有问题

PS

日志解析:

      0 (2014-03-28 13:18:31) TIMER_START{Request Processing}
      0 (2014-03-28 13:18:31) COMMENT timer_end format is {<elapsed msec>,<timer name>} <optional message>
      0 (2014-03-28 13:18:31) LOG Method=GET, PathInfo=/content/tst.selector.pdf.html
      0 (2014-03-28 13:18:31) TIMER_START{ResourceResolution}
      0 (2014-03-28 13:18:31) TIMER_END{0,ResourceResolution} URI=/content/tst.selector.pdf.html resolves to Resource=JcrNodeResource, type=cq:Page, superType=null, path=/content/tst
      0 (2014-03-28 13:18:31) LOG Resource Path Info: SlingRequestPathInfo: …
Run Code Online (Sandbox Code Playgroud)

java sling aem

6
推荐指数
1
解决办法
2838
查看次数

AEM中的选择器

Sling中选择器的用途是什么?

http://www.resourcePath.选择器 .extension

我在线阅读了有关选择器用法的文档:

  1. 一些文档说它用于缓存页面的响应,这在使用查询参数时是无法完成的.

  2. 有些人建议选择器用于使用相同的资源响应不同的条件.例如,我们有一个实现,如果页面(cq:page)是层次结构中的最后一页,它应该显示让我们说一个html块,而如果它不是最后一页(即如果它有子页面),它应该不显示所述块.这里我们在组件中使用了一个脚本,并根据条件在URL中将此脚本名称添加为选择器,无论它是否是最后一页.

但我不确定哪一个是真的.

提前感谢任何指导.

sling aem

6
推荐指数
1
解决办法
5336
查看次数

AEM中的OSGi容器和应用程序服务器容器

在独立的AEM安装中,felix OSGi容器是否存在于jetty servlet容器中?或者Jetty Server是作为Felix OSGi容器中的包安装的吗?

当AEM启动时,哪一个会首先启动?

对于基于WAR的安装,这将如何改变?

根据这个答案,两者都是可能的.但我想知道AEM采用了哪种方法.

osgi sling aem

6
推荐指数
1
解决办法
238
查看次数

如何在 Eclipse 中通过远程 Java 应用程序调试来调试 Groovy 代码

我正在努力调试一个构建为 Sling 捆绑包的应用程序。该应用程序几乎完全是 Groovy 代码(我有 Groovy Eclipse 插件),Eclipse(使用 Maven)正在构建 .jar 并将其安装在 Sling 中,没有任何问题。

但是,它无法调试。我已按照说明设置远程调试,我认为这是调试 Sling 应用程序所必需的 - 具体来说,我使用以下命令启动 Sling:

java -Xdebug -Xnoagent -Djava.io.tmpdir=/c/Users/nickgolding1/temp -Xmx1024m -Xrunjdwp:transport=dt_socket,address=30303,server=y,suspend=n -jar org.apache.sling.launchpad-6-SNAPSHOT-standalone.jar -p 8080
Run Code Online (Sandbox Code Playgroud)

...然后在 Eclipse 中设置一个调试配置,类型为“远程 Java 应用程序”,指向我的项目,连接类型为“标准(套接字连接)”,主机本地主机,端口 30303。此配置似乎启动正常 - 在至少,我没有收到任何反馈表明它没有 - 但我在 Groovy 代码中设置的断点实际上并没有中断对 Sling 应用程序的请求的执行。

我在各个论坛上看到过一些帖子,这些帖子显示人们在通过远程 Java 应用程序配置调试 Groovy 代码时遇到问题,而他们在 Java 代码方面没有问题。不幸的是,我的应用程序都是 Groovy 而没有 Java,所以我无法验证这里的情况是否如此。

任何想法表示赞赏!

java eclipse groovy remote-debugging sling

5
推荐指数
1
解决办法
7277
查看次数

如何防止 AEM/Sling 向无扩展名 URL 添加尾部斜杠?

站点上所有解析为实际节点的无扩展名 URL 都被重定向(使用 301 代码)到它们的版本,并添加了尾部斜杠。它将对前端 Web 服务器的请求量加倍,因此我们希望解决此问题。

我们确实使用 Apache mod_rewrite 将所有传入的 URL(带或不带斜杠)重写为它们的 .html 等效项,以使调度程序缓存一致,但实际处理有点奇怪。

一般来说,我们分三种情况:

  1. URL 有一个扩展名(即 /content/xxx/yyy.html ) - 它被立即处理,没有重定向
  2. URL 尾部有斜杠 ( /content/xxx/yyy/ ) - 它被 mod_rewrite 处理并成功重写到 /content/xxx/yyy.html。没有重定向
  3. 无扩展 URL ( /content/xxx/yyy ) - 由 mod_rewrite 处理,重写为 /content/xxx/yyy.html 并立即重定向到 /content/xxx/yyy/,然后从上面的第 2 点开始执行例程。

为了排除源自 Apache 的重定向,我们禁用了几乎所有模块,例如 mod_dir、mod_negotiation、mod_autoindex 等,以避免由于内容协商或目录索引而导致的重定向,但请求仍在被重定向。

我们的应用程序不包含任何基于 URL 的重定向,所以我想知道是否有任何 OSGI 服务或隐藏的配置设置会触发此类重定向?

我们在站点上还有一组快捷方式,Apache 将它们重写为实际的 URL,并且它们不会被重定向。例如,如果请求 URL 是 /aboutus,它会成功映射到 /content/xxx/yyy/operations/aboutus.html 并在一个循环中处理,无需任何额外的重定向。上述问题仅在 JCR 中存在实际对应节点且请求无扩展性时才有效。

apache mod-rewrite sling aem

5
推荐指数
0
解决办法
1594
查看次数

获取对 (Mock)ResourceResolverFactory 的引用

我有一个 Sling 模型类,其中包含对我的服务的引用:

\n\n
@OSGiService\nPlanService planService;\n
Run Code Online (Sandbox Code Playgroud)\n\n

该服务引用 ResourceResolverFactory,以获取具有“管理员用户”的 ResourceResolver:

\n\n
@Reference\nprivate ResourceResolverFactory resolverFactory;\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在编写一个单元测试来测试我的模型类上的 adjustment。我试图像这样注入对 PlanService 的引用:

\n\n
@Rule\npublic final OsgiContext osgiContext = new OsgiContext();\n\nosgiContext.registerInjectActivateService(new PlanServiceImpl());\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我不知道如何注入对 ResourceResolverFactory 的引用。

\n\n

我已经尝试过这样的:

\n\n
osgiContext.registerInjectActivateService(new MockResourceResolverFactory());\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我收到这个错误:

\n\n
org.apache.sling.testing.mock.osgi.NoScrMetadataException: No OSGi SCR metadata found in classpath at OSGI-INF/org.apache.sling.testing.resourceresolver.MockResourceResolverFactory.xml\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在文档和所有可用的模拟选项中找不到如何注入此服务并自动获取引用。任何帮助都会非常有帮助,谢谢!

\n\n

编辑:\n感谢 J\xc3\xa9r\xc3\xa9mie\ 的回答,ResourceResolverFactory 被注入到 PlanService 中。然而,我现在面临这个问题:

\n\n
[main] WARN org.apache.sling.models.impl.ModelAdapterFactory - Required properties [c.r.o.c.s.j.PlanService c.r.o.c.m.Plan.planService] on model class class c.r.o.c.m.Plan were not able to be injected.\n
Run Code Online (Sandbox Code Playgroud)\n\n …

osgi sling sling-models

5
推荐指数
1
解决办法
4402
查看次数

在吊索URL中使用后缀有什么用处

Sling提供了一种简化资源解析的功能.它能够解析我们需要的精确资源表示在基于内容的应用程序中非常有用.

但是我无法理解一个问题是使用后缀.

例:

http://localhost:4502/content/app/mycomponent.large.html/something.html
Run Code Online (Sandbox Code Playgroud)

这里,"something.html"是后缀.我想知道在什么情况下我会选择后缀?与将信息作为选择器传递相比,我们获得了哪些优势?

sling aem

5
推荐指数
1
解决办法
1227
查看次数

JCR API或Apache Sling

我阅读了很多文章,比如JCR和Apache Sling,我对使用什么感到困惑.一些作者建议使用JCR API,例如更多性能优化,其余的都在Apache Sling一边,因为它的编写速度更快,而且从长远来看,可读性和可维护性更高.我有一些问题:

  • 从你的角度来看,哪种做法更好?
  • 什么在生产项目中经常使用?

jcr sling aem

5
推荐指数
1
解决办法
1308
查看次数

AEM Resources 缺少吊索:resourceType

我的内容存储库在 2 年的时间里积累了许多过时的组件资源。组件节点缺少 sling:resourceType 属性。这些组件节点如下所示:

缺少吊索:资源类型

由于这种糟糕的资源,页面抛出以下异常:

14.09.2017 12:33:21.079 *ERROR* [172.21.142.98 [1505392399461] GET /content/xx/en_ca/home.html HTTP/1.1] 
org.apache.sling.servlets.get.impl.DefaultGetServlet No renderer for extension html, cannot render resource Paragraph, 
path=/content/xx/en_ca/home/jcr:content/par-sidebar/contentbox_c540/rightRailContentPar/contentbox_f1fd, 
type=nt:unstructured, cssClass=default, column=0/0, diffInfo=[null], 
resource=[JcrNodeResource, type=nt:unstructured, superType=null, 
path=/content/xx/en_ca/home/jcr:content/par-sidebar/contentbox_c540/rightRailContentPar/contentbox_f1fd]
Run Code Online (Sandbox Code Playgroud)

进一步挖掘我发现有人写了一个工具来清理这些过时的资源。

虽然查询和清理这些无效节点很容易,但我的问题是这些资源是如何在存储库中结束的?我试图通过移动组件,从页面中删除组件来模拟但徒劳无功。没有删除 sling:resourceType 的自定义脚本。这个问题只有我一个人遇到吗?或者是否有任何产品问题/用例可以清除资源类型?

我正在运行 AEM 6.0 SP2。

sling aem

5
推荐指数
1
解决办法
4432
查看次数

在 Maven 中使用 OSGI 包时如何隐藏嵌入的依赖项?

有没有办法将 OSGI 包用作 maven 依赖项,而无需将所有包从中获取到它甚至不导出的类路径中?

问题背景:我们刚刚将org.apache.sling.xss包作为 maven 依赖项添加到我们的项目中。正如您在 pom.xml 中看到,它只是导出包 org.apache.sling.xss 但将各种依赖项作为Private-Package直接嵌入到它的jar中。虽然 OSGI 对其他包隐藏了这些东西,但 maven 没有。所以我们得到了冲突:org.apache.sling.xss 嵌入了例如commons-beanutils 的1.7.0 版本,它与我们一直使用的commons-beanutils 的新版本不兼容,所以我们现在得到编译错误。

有没有什么好的解决方案 - 从我们的角度来看,从 org.apache.sling.xss 包的维护者的角度来看?理想情况下,如果您使用该包,您只会将导出的 org.apache.sling.xss 包放入类路径中。所以也许一个好的解决方案是 org.apache.sling.xss 提供一个单独的 API jar,只包含那个类?有没有标准的方法来做到这一点,或者其他解决方案?我们可以以某种方式告诉 maven 只将该包包含在类路径中吗?(我知道 maven 有依赖排除,但这在这里没有帮助,因为有问题的东西不是 sling.xss 的传递依赖,而是实际上包含在 org.apache.sling.xss jar 中。)

java osgi maven sling osgi-bundle

5
推荐指数
1
解决办法
186
查看次数