3

I have a module in apache karaf 4.2.6 with java 11 that validates purchase receipts in Google Play. I'm using androidpublisher.

When it sends a request for the first time I get an error in OpenCensusUtils class:

androidPublisher.purchases().products().get(packageName, productId, purchaseToken).execute()

java.lang.ClassNotFoundException: io.opencensus.trace.propagation.TextFormat not found by wrap_file__Users_USER_NAME_.m2_repository_io_opencensus_opencensus-contrib-http-util_0.22.1_opencensus-contrib-http-util-0.22.1.jar

In subsequent times I get error in com.google.api.client.http.HttpRequest class at this point private final Tracer tracer = OpenCensusUtils.getTracer():

java.lang.NoClassDefFoundError: Could not initialize class com.google.api.client.http.OpenCensusUtils

Here is dependencies:

    <dependency>
        <groupId>com.google.apis</groupId>
        <artifactId>google-api-services-androidpublisher</artifactId>
        <version>v3-rev92-1.25.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.google.http-client</groupId>
        <artifactId>google-http-client</artifactId>
        <version>1.29.2</version>
    </dependency>

    <dependency>
        <groupId>io.opencensus</groupId>
        <artifactId>opencensus-api</artifactId>
        <version>0.22.1</version>
    </dependency>
    <dependency>
        <groupId>io.opencensus</groupId>
        <artifactId>opencensus-contrib-http-util</artifactId>
        <version>0.22.1</version>
    </dependency>

Also google-api-client, google-http-client-jackson2 and google-oauth-client has version 1.29.2

In karaf I see the library opencensus-api is exporting a package io.opencensus.trace.propagation that contains a class TextFormat.

What am I doing wrong?

Sergey
  • 31
  • 1
  • 5

1 Answers1

1

I resolved by adding io.opencensus and io.grpc to the Private-Package of the module's build area as follows. It made them embed locally.

....
 <build>
    <plugins>
      <plugin>
       ....
        <configuration>
          <instructions>
            <Bundle-SymbolicName> ${project.artifactId} </Bundle-SymbolicName>
            <Private-Package>
             META-INF.services;-split-package:=merge-first,
             com.google.*;-split-package:=merge-first,
             io.opencensus.*;-split-package:=merge-first,
             io.grpc.*;-split-package:=merge-first
            </Private-Package>
            ....
spiraleddy
  • 147
  • 10