java.lang.NoSuchMethodError: com.google.common.base.CharMatcher.ascii()

自作多情 提交于 2019-12-23 23:13:49

问题


I got this error on glassfish server

java.lang.NoSuchMethodError: com.google.common.base.CharMatcher.ascii()Lcom/google/common/base/CharMatcher;
at com.google.common.io.BaseEncoding$Alphabet.<init>(BaseEncoding.java:453)
at com.google.common.io.BaseEncoding$Base64Encoding.<init>(BaseEncoding.java:892)
at com.google.common.io.BaseEncoding.<clinit>(BaseEncoding.java:317)
at com.google.cloud.storage.StorageImpl.create(StorageImpl.java:133)
at utils.GoogleCouldBucket_Utils.initGoogleBucket(GoogleCouldBucket_Utils.java:52)
at controllers.proTektantController.loggedInTryingToRegister(proTektantController.java:783)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at javax.el.ELUtil.invokeMethod(ELUtil.java:332)
at javax.el.BeanELResolver.invoke(BeanELResolver.java:537)
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
at com.sun.el.parser.AstValue.invoke(AstValue.java:283)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at com.sun.faces.facelets.tag.jsf.core.DeclarativeSystemEventListener.processEvent(EventHandler.java:128)
at javax.faces.component.UIComponent$ComponentSystemEventListenerAdapter.processEvent(UIComponent.java:2584)
at javax.faces.event.SystemEvent.processListener(SystemEvent.java:108)
at javax.faces.event.ComponentSystemEvent.processListener(ComponentSystemEvent.java:118)
at com.sun.faces.application.ApplicationImpl.processListeners(ApplicationImpl.java:2169)
at com.sun.faces.application.ApplicationImpl.invokeComponentListenersFor(ApplicationImpl.java:2114)
at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:287)
at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:245)
at javax.faces.application.ApplicationWrapper.publishEvent(ApplicationWrapper.java:726)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:107)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
at java.lang.Thread.run(Thread.java:748)

I am making website on glassfish. I already added amazon bucket support. It works but I had issue with them so I moved to google cloud platform. I try to add google bucket.

public static boolean initGoogleBucket()
{
    try {
        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        InputStream iStream = externalContext.getResourceAsStream("/WEB-INF/googleBucket.json");
        if(iStream == null) {
            return false;
        }
        Credentials credentials = GoogleCredentials.fromStream(iStream);
        storage = StorageOptions.newBuilder().setCredentials(credentials).setProjectId(GCP_PROJECT).build().getService();

        BlobId blobId = BlobId.of(GCP_BUCKET,"blob_name3");
        BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setContentType("text/plain").build();
        String str = "Hello, Cloud Storage!";

        Blob blob = storage.create(blobInfo, str.getBytes());
        System.out.println("time:="+blob.getCreateTime() + ", link:"+blob.getMediaLink());
        return true;
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return false;
    }
}

In debugger i found it failed at "storage.create"

I read online and only one reason which I found is "google-collet.jar". I can not find this jar in my libraries. May be is have other dependence.

Here list of my jars:

glassfish4.1.1/glassfish/domains/domain1/eclipseApps/<project>/WEB-INF/lib$ ls
BootsFaces-OSP-dist-0.7.0.jar
api-common-1.7.0.jar
aspectjrt-1.8.2.jar
aspectjweaver.jar
aws-java-sdk-1.11.285-javadoc.jar
aws-java-sdk-1.11.285-sources.jar
aws-java-sdk-1.11.285.jar
aws-java-sdk.jar
aws-swf-build-tools-1.1.jar
bootstrap-1.0.10.jar
commons-beanutils-1.8.3.jar
commons-codec-1.9.jar
commons-collections-3.2.jar
commons-digester-1.8.jar
commons-logging-1.1.3.jar
freemarker-2.3.9.jar
gax-1.30.0.jar
gax-httpjson-0.47.0.jar
gmaps4jsf-core-3.0.0.jar
google-api-client-1.24.1.jar
google-api-services-storage-v1-rev135-1.24.1.jar
google-auth-library-credentials-0.10.0.jar
google-auth-library-oauth2-http-0.10.0.jar
google-cloud-core-1.40.0.jar
google-cloud-core-http-1.40.0.jar
google-cloud-storage-1.40.0.jar
google-http-client-1.24.1.jar
google-http-client-appengine-1.24.1.jar
google-http-client-jackson-1.24.1.jar
google-http-client-jackson2-1.24.1.jar
google-oauth-client-1.24.1.jar
grpc-context-1.12.0.jar
gson-2.7.jar
guava-23.0.jar
httpclient-4.5.2.jar
httpcore-4.4.4.jar
ion-java-1.0.2.jar
jackson-annotations-2.6.0.jar
jackson-core-2.6.7.jar
jackson-core-asl-1.9.11.jar
jackson-databind-2.6.7.1.jar
jackson-dataformat-cbor-2.6.7.jar
javax.el.jar
javax.mail-api-1.4.6.jar
jmespath-java-1.11.285.jar
joda-time-2.8.1.jar
joda-time-2.9.2.jar
jsf-facelets.jar
jsr305-3.0.2.jar
jstl-1.2.jar
jstl-api-1.2.jar
jstl-impl.jar
jstl.jar
myfaces-api-2.1.5.jar
myfaces-bundle-2.1.5.jar
myfaces-impl-2.1.5.jar
mysql-connector-java-5.1.9.jar
netty-buffer-4.1.17.Final.jar
netty-codec-4.1.17.Final.jar
netty-codec-http-4.1.17.Final.jar
netty-common-4.1.17.Final.jar
netty-handler-4.1.17.Final.jar
netty-resolver-4.1.17.Final.jar
netty-transport-4.1.17.Final.jar
opencensus-api-0.15.0.jar
opencensus-contrib-http-util-0.15.0.jar
primefaces-6.2.jar
proto-google-common-protos-1.12.0.jar
proto-google-iam-v1-0.12.0.jar
protobuf-java-3.6.0.jar
protobuf-java-util-3.6.0.jar
spring-beans-3.0.7.RELEASE.jar
spring-context-3.0.7.RELEASE.jar
spring-core-3.0.7.RELEASE.jar
spring-test-3.0.7.RELEASE.jar
threetenbp-1.3.3.jar

also I have "Glassfish System Libraries" and "JRE System Library[Java Se 8 [1.8.0_161]]"

I am using eclipse. I am familiar with Marven.

Please


回答1:


This is caused by a collision in your Guava dependencies. Some other dependency in your classpath is using a different version of Guava.

I would suggest running mvn dependency:tree -Dverbose -Dincludes=guava and mvn dependency:tree -Dverbose -Dincludes=guava-jdk5. This will allow you to find dependency conflicts in your classpath. The guava-jdk5 dependency is a common culprit that causes this particular error.

More information on conflict resolvement is also available on the Maven site; https://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html

Once you have identified which dependency is causing the conflict, you can introduce exclusion rules in that dependency in your pom.xml to exclude the dependencies causing the issue, for example;

<exclusions>
    <exclusion>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
    </exclusion>
    <exclusion>
        <groupId>com.google.guava</groupId>
        <artifactId>guava-jdk5</artifactId>
    </exclusion>
</exclusions>



回答2:


I solved problem but downgrade google cloud libraries and use inputstream instead of bytes array. google deprecated this method but with downgraded libraries and with @SuppressWarnings("deprecation") it works.



来源:https://stackoverflow.com/questions/54058695/java-lang-nosuchmethoderror-com-google-common-base-charmatcher-ascii

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!