【发布时间】:2019-06-24 08:10:35
【问题描述】:
遇到一个让我发疯的问题。在 AEM (6.0 SP3) 中实施 Amakai Edgegrid 身份验证,它阻止了我的主要服务包启动,因为它不是 OSGi 包。
与this issue 中提到的完全相同的问题,但这并不能解决任何问题,因为我从未包含依赖项的范围......
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.3.2</version>
</dependency>
<dependency>
<groupId>com.akamai.edgegrid</groupId>
<artifactId>edgegrid-signer-core</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>com.akamai.edgegrid</groupId>
<artifactId>edgegrid-signer-apache-http-client</artifactId>
<version>2.1.0</version>
</dependency>
com.akamai.edgegrid.signer -- 无法解决 com.akamai.edgegrid.signer.apachehttpclient -- 无法解析
错误日志..
错误 [qtp1187594825-933] org.apache.felix.http.jetty %bundles.pluginTitle:无法启动 (org.osgi.framework.BundleException:捆绑中未解决的约束 com.aem.common-service [478]:无法解析 478.21: 缺少要求 [478.21] osgi.wiring.package; (osgi.wiring.package=com.akamai.edgegrid.signer)) org.osgi.framework.BundleException:捆绑中未解决的约束 com.aem.common-service [478]:无法解析 478.21: 缺少要求 [478.21] osgi.wiring.package; (osgi.wiring.package=com.akamai.edgegrid.signer) 在 org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3980) 在 org.apache.felix.framework.Felix.startBundle(Felix.java:2043) 在 org.apache.felix.framework.BundleImpl.start(BundleImpl.java:976) 在 org.apache.felix.framework.BundleImpl.start(BundleImpl.java:963) 在 org.apache.felix.webconsole.internal.core.BundlesServlet.doPost(BundlesServlet.java:364) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 在 org.apache.felix.webconsole.internal.servlet.OsgiManager.service(OsgiManager.java:526) 在 org.apache.felix.webconsole.internal.servlet.OsgiManager.service(OsgiManager.java:450) 在 org.apache.felix.http.base.internal.handler.ServletHandler.doHandle(ServletHandler.java:339) 在 org.apache.felix.http.base.internal.handler.ServletHandler.handle(ServletHandler.java:300) 在 org.apache.felix.http.base.internal.dispatch.ServletPipeline.handle(ServletPipeline.java:93) 在 org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:50) 在 org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31) 在 org.apache.sling.i18n.impl.I18NFilter.doFilter(I18NFilter.java:128) 在 org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:108) 在 org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:80) 在 org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:46) 在 org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31) 在 org.apache.felix.http.sslfilter.internal.SslFilter.doFilter(SslFilter.java:89) 在 org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:108) 在 org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:80) 在 org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:46) 在 org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31) 在 org.apache.felix.http.sslfilter.internal.SslFilter.doFilter(SslFilter.java:55) 在 org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:108) 在 org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:80) 在 org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:46) 在 org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31) 在 org.apache.sling.security.impl.ReferrerFilter.doFilter(ReferrerFilter.java:290) 在 org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:108) 在 org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:80) 在 org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:46) 在 org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31) 在 com.adobe.granite.license.impl.LicenseCheckFilter.doFilter(LicenseCheckFilter.java:300) 在 org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:108) 在 org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:80) 在 org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:46) 在 org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31) 在 org.apache.sling.featureflags.impl.FeatureManager.doFilter(FeatureManager.java:115) 在 org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:108) 在 org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:80) 在 org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:46) 在 org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31) 在 org.apache.sling.engine.impl.log.RequestLoggerFilter.doFilter(RequestLoggerFilter.java:75) 在 org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:108) 在 org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:80) 在 org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:46) 在 org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31) 在 org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:84) 在 org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:46) 在 org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:31) 在 org.apache.felix.http.base.internal.dispatch.FilterPipeline.dispatch(FilterPipeline.java:76) 在 org.apache.felix.http.base.internal.dispatch.Dispatcher.dispatch(Dispatcher.java:49) 在 org.apache.felix.http.base.internal.DispatcherServlet.service(DispatcherServlet.java:67) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 在 org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684) 在 org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501) 在 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229) 在 org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) 在 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428) 在 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) 在 org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) 在 org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) 在 org.eclipse.jetty.server.Server.handle(Server.java:370) 在 org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494) 在 org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982) 在 org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043) 在 org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865) 在 org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) 在 org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) 在 org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:667) 在 org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) 在 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) 在 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) 在 java.lang.Thread.run(Thread.java:748)
我还尝试使用 maven-bundle-plugin 使用 Export-Package 和 Embed-Dependency。这似乎一开始解决了这个问题,但它会级联到其他问题,这些问题也会阻止主包启动..
【问题讨论】:
-
对 edgegrid-signer(-core?) jar 使用 Embed-Dependency 是正确的做法。您只需要解决下一个问题,依此类推,直到它起作用。
-
我使用这些依赖项(通过 Gradle)与 Akamai 集成: libs 'edgegrid-auth:edgegrid-auth:1.0.0' libs 'com.google.http-client:google-http-client: 1.22.0' 有了这些,我能够编写 AEM 代码来调用 Akamai API,例如 Fast Purge。我不知道它是否会有所帮助,但你可以试试。
-
@gjoranv 我已经尝试过这样做。不幸的是,一旦我到达第三或第四个,它就会变成大约 30 多个未解决的捆绑包..
-
@Shawn 感谢您的提示,但我们并没有真正使用 gradle。我不想在混合中添加另一个变量。
-
我不是建议你使用 Gradle——只是你导入相同的依赖项。我列出了一个 Gradle 示例,因此您需要翻译语法。
标签: java maven osgi aem akamai