Why won't Google Cloud Storage work in AEM (for me)? | Community
Skip to main content
Level 3
February 24, 2020

Why won't Google Cloud Storage work in AEM (for me)?

  • February 24, 2020
  • 3 replies
  • 8234 views

I am trying to use the Google Cloud Storage Client Libraries for the Google Cloud Storage API within AEM 6.5. The eventual goal is for a job to export some AEM content straight into a Google bucket. But for now, I'm trying to run some tests, and it doesn't work. The bundle with the Google Cloud storage codel,refuses to activate due to the cloud storage not being able to be resolved.

 

com.google.cloud.storage -- Cannot be resolved

 

As per https://cloud.google.com/storage/docs/reference/libraries, in my main pom.xml file, I have this:

 

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>libraries-bom</artifactId>
      <version>3.2.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
...
  </dependencies>
</dependencyManagement>

 

And then in the bundles pom.xml file, I have

 

<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-storage</artifactId>
</dependency>

 

In my java file, I have

 

package com.company.lib;
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class AuthExample {
  static void authImplicit() {
    try {
      StorageOptions so = StorageOptions.getDefaultInstance();
      //Storage storage = so.getService();
      //Storage storage = StorageOptions.getDefaultInstance().getService();
    } catch (Exception e) {
    }
  }
  public static void main(String[] args) throws IOException {
    if (args.length == 0) {
      authImplicit();
      return;
    }
    authImplicit();
  }
}

 

The package with this code compiles the bundle into existence, but the if the line StorageOptions so = StorageOptions.getDefaultInstance(); is there, the bundle doesn't install. It gives this error:

21.02.2020 18:16:33.054 *ERROR* qtp325298061-4006 org.apache.felix.http.jetty %bundles.pluginTitle: Cannot start (org.osgi.framework.BundleException: Unable to resolve com.company.CompanyLibBundle [520](R 520.132): missing requirement [com.company.CompanyLibBundle [520](R 520.132)] osgi.wiring.package; (osgi.wiring.package=com.google.cloud.storage) Unresolved requirements: [[com.company.CompanyLibBundle [520](R 520.132)] osgi.wiring.package; (osgi.wiring.package=com.google.cloud.storage)])
org.osgi.framework.BundleException: Unable to resolve com.company.CompanyLibBundle [520](R 520.132): missing requirement [com.company.CompanyLibBundle [520](R 520.132)] osgi.wiring.package; (osgi.wiring.package=com.google.cloud.storage) Unresolved requirements: [[com.company.CompanyLibBundle [520](R 520.132)] osgi.wiring.package; (osgi.wiring.package=com.google.cloud.storage)]
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4368)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2281)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:984)
at org.apache.felix.webconsole.internal.core.BundlesServlet.doPost(BundlesServlet.java:359)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.felix.webconsole.internal.servlet.OsgiManager.service(OsgiManager.java:563)
at org.apache.felix.webconsole.internal.servlet.OsgiManager$3.run(OsgiManager.java:465)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.felix.webconsole.internal.servlet.OsgiManager.service(OsgiManager.java:461)
at org.apache.felix.http.base.internal.handler.ServletHandler.handle(ServletHandler.java:123)
at org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:86)
at com.adobe.granite.license.impl.LicenseCheckFilter.doFilter(LicenseCheckFilter.java:308)
at org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:142)
at org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:81)
at org.apache.sling.i18n.impl.I18NFilter.doFilter(I18NFilter.java:131)
at org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:142)
at org.apache.felix.http.base.internal.dispatch.InvocationChain.doFilter(InvocationChain.java:81)
at org.apache.felix.http.base.internal.dispatch.Dispatcher$1.doFilter(Dispatcher.java:146)
at org.apache.felix.http.base.internal.whiteboard.WhiteboardManager$2.doFilter(WhiteboardManager.java:1002)
at org.apache.sling.security.impl.ReferrerFilter.doFilter(ReferrerFilter.java:326)
at org.apache.felix.http.base.internal.handler.PreprocessorHandler.handle(PreprocessorHandler.java:136)
at org.apache.felix.http.base.internal.whiteboard.WhiteboardManager$2.doFilter(WhiteboardManager.java:1008)
at org.apache.felix.http.sslfilter.internal.SslFilter.doFilter(SslFilter.java:97)
at org.apache.felix.http.base.internal.handler.PreprocessorHandler.handle(PreprocessorHandler.java:136)
at org.apache.felix.http.base.internal.whiteboard.WhiteboardManager$2.doFilter(WhiteboardManager.java:1008)
at org.apache.felix.http.base.internal.whiteboard.WhiteboardManager.invokePreprocessors(WhiteboardManager.java:1012)
at org.apache.felix.http.base.internal.dispatch.Dispatcher.dispatch(Dispatcher.java:91)
at org.apache.felix.http.base.internal.dispatch.DispatcherServlet.service(DispatcherServlet.java:49)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:873)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:542)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1701)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1345)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1668)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1247)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:220)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:502)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:370)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:267)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
at java.lang.Thread.run(Thread.java:748)

 

What am I doing wrong? What am I missing?

 

Thanks.

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.

3 replies

Matt-H-Author
Level 3
February 24, 2020

As per https://www.albinsblog.com/2015/02/comgooglegsonversion223-cannot-be.html#.XlQM5ihKiHs, I have also tried adding to the pom.xml file:

 

<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-Activator>com.sample.activator.Activator</Bundle-Activator>
<Import-Package>*,com.sample.*</Import-Package>
<Export-Package>com.sample.*,com.google.cloud.*</Export-Package>
<Bundle-SymbolicName>com.sample</Bundle-SymbolicName>
<Bundle-Vendor>Sample</Bundle-Vendor>
<Bundle-Category>Sample</Bundle-Category>
<Embed-Directory>dependencies</Embed-Directory>
<Embed-Transitive>true</Embed-Transitive>
</instructions>
</configuration>
</plugin>

 

and then I tried

 

<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<configuration>
<instructions>
<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
<Embed-Directory>OSGI-INF/lib</Embed-Directory>
<Embed-Transitive>true</Embed-Transitive>
</instructions>
</configuration>
</plugin>

 

Neither worked. And lastly, I tried installing the jar directly, which failed because of a server error:

 

java.io.IOException: Bundle-SymbolicName header missing, cannot install bundle

Matt-H-Author
Level 3
February 28, 2020

I tried following the example shown here: https://wiki.eclipse.org/Creating_OSGi_Bundles_from_Third-Party_JARs to modify the MANIFEST.MF file and install the Google Cloud Storage jar. It was relatively successful, in that the google cloud jar installed and our custom bundle no longer failed to activate due to Google Cloud. But it instead failed to activate due to another incompatibility -

 

javax.annotation, version=[3.0,4) -- Cannot be resolved.

 

It's definitely related/connected to the Google Cloud jar/code, since it didn't exist at all before then. I briefly tried to do the same thing and make javax.annotation an installable jar, but it didn't work, and I tried tracing it in the Cloud code. But at this point, trying to track this down isn't worth it, so we've decided to go a different direction and not work with google cloud storage inside our AEM code.

If anyone has any ideas, they are welcome to comment.

June 30, 2020

Hi Matt,

 

Did you got any solution for this, even i am facing such kind of issues.

I could able to resolve conflict issues in bundle but iam getting below error while establishing connectivity.

-----------------------------------------------------

javax/net/ssl/HttpsURLConnection

Cannot serve request to /bin/googlecloudconnection in com.test.package.core.servlets.GoogleCloudConnectivityServlet

Exception:

java.lang.NoClassDefFoundError: javax/net/ssl/HttpsURLConnection
	at com.google.api.client.http.javanet.NetHttpTransport.buildRequest(NetHttpTransport.java:153)
	at com.google.api.client.http.javanet.NetHttpTransport.buildRequest(NetHttpTransport.java:55)
	at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:871)
	at com.google.auth.oauth2.ServiceAccountCredentials.refreshAccessToken(ServiceAccountCredentials.java:358)
	at com.google.auth.oauth2.OAuth2Credentials.refresh(OAuth2Credentials.java:165)
	at com.google.auth.oauth2.OAuth2Credentials.getRequestMetadata(OAuth2Credentials.java:151)
	at com.google.auth.http.HttpCredentialsAdapter.initialize(HttpCredentialsAdapter.java:96)
	at com.google.cloud.http.HttpTransportOptions$1.initialize(HttpTransportOptions.java:159)
	at com.google.cloud.http.CensusHttpModule$CensusHttpRequestInitializer.initialize(CensusHttpModule.java:109)
	at com.google.api.client.http.HttpRequestFactory.buildRequest(HttpRequestFactory.java:88)
	at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.buildHttpRequest(AbstractGoogleClientRequest.java:430)
	at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:549)
	at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:482)
	at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:599)
	at com.google.cloud.storage.spi.v1.HttpStorageRpc.get(HttpStorageRpc.java:400)
	at com.google.cloud.storage.StorageImpl$4.call(StorageImpl.java:213)
	at com.google.cloud.storage.StorageImpl$4.call(StorageImpl.java:210)
	at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:105)
	at com.google.cloud.RetryHelper.run(RetryHelper.java:76)
	at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:50)
	at com.google.cloud.storage.StorageImpl.get(StorageImpl.java:209)

-----------------------------------------------------

Thanks

Matt-H-Author
Level 3
July 16, 2020

Unfortunately, I never got this to work in AEM. I ended up side-stepping AEM, and developed a java app outside of AEM to handle the file uploads up to the Google cloud storage bucket.

Level 3
May 31, 2022

Hi @matt-h- Were you able to solve this issue?  we are running into a similar issue.

Thanks,
Mrudul

Matt-H-Author
Level 3
June 8, 2022

Unfortunately, I never got this to work in AEM. I ended up side-stepping AEM, and developed a java app outside of AEM to handle the file uploads up to the Google cloud storage bucket.