apache / incubator-hugegraph-toolchain

HugeGraph toolchain - include a series useful graph modules
https://hugegraph.apache.org/
Apache License 2.0
88 stars 91 forks source link

[Bug] jdk8/jdk11 springboot2.X 引用hugegraph-client1.0.0 运行报错java.lang.ClassNotFoundException: jakarta.ws.rs.ProcessingException #445

Closed gudehuang closed 1 year ago

gudehuang commented 1 year ago

Bug Type (问题类型)

None

Before submit

Environment (环境信息)

Expected & Actual behavior (期望与实际表现)

项目pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.7</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.hugegraph</groupId>
            <artifactId>hugegraph-client</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

MyHugeConfig.java

package com.example.demo;

import org.apache.hugegraph.driver.HugeClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyHugeConfig {
    final static Logger logger = LoggerFactory.getLogger(MyHugeConfig.class);

    @Value("${hu.url}")
    private String huUrl;

    @Value("${hu.graph}")
    private String huGraph;

    @Value("${hu.username}")
    private String username;

    @Value("${hu.password}")
    private String password;

    @Bean
    public HugeClient hugeClient() {
        logger.info("huUrl:" + huUrl);
        logger.info("huGraph:" + huGraph);
        //HugeClient hugeClient = new HugeClient(huUrl, huGraph,username,password);
        HugeClient hugeClient = HugeClient.builder(huUrl, huGraph)
                .configUser(username, password)
                .build();
        return hugeClient;

    }

}

运行时报错

2023-03-28 10:48:35.722  WARN 39740 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hugeClient' defined in class path resource [com/example/demo/MyHugeConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.hugegraph.driver.HugeClient]: Factory method 'hugeClient' threw exception; nested exception is java.lang.NoClassDefFoundError: jakarta/ws/rs/ProcessingException
2023-03-28 10:48:35.724  INFO 39740 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2023-03-28 10:48:35.731  INFO 39740 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2023-03-28 10:48:35.750 ERROR 39740 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hugeClient' defined in class path resource [com/example/demo/MyHugeConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.hugegraph.driver.HugeClient]: Factory method 'hugeClient' threw exception; nested exception is java.lang.NoClassDefFoundError: jakarta/ws/rs/ProcessingException
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) ~[spring-beans-5.3.19.jar:5.3.19]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:486) ~[spring-beans-5.3.19.jar:5.3.19]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.19.jar:5.3.19]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.19.jar:5.3.19]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.19.jar:5.3.19]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.19.jar:5.3.19]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.19.jar:5.3.19]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.19.jar:5.3.19]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.19.jar:5.3.19]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.19.jar:5.3.19]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953) ~[spring-beans-5.3.19.jar:5.3.19]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.19.jar:5.3.19]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.19.jar:5.3.19]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.7.jar:2.6.7]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:740) [spring-boot-2.6.7.jar:2.6.7]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:415) [spring-boot-2.6.7.jar:2.6.7]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-2.6.7.jar:2.6.7]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1312) [spring-boot-2.6.7.jar:2.6.7]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) [spring-boot-2.6.7.jar:2.6.7]
    at com.example.demo.DemoApplication.main(DemoApplication.java:10) [classes/:na]
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.hugegraph.driver.HugeClient]: Factory method 'hugeClient' threw exception; nested exception is java.lang.NoClassDefFoundError: jakarta/ws/rs/ProcessingException
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.19.jar:5.3.19]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.19.jar:5.3.19]
    ... 19 common frames omitted
Caused by: java.lang.NoClassDefFoundError: jakarta/ws/rs/ProcessingException
    at org.apache.hugegraph.driver.HugeClient.<init>(HugeClient.java:64) ~[hugegraph-client-1.0.0.jar:1.0.0]
    at org.apache.hugegraph.driver.HugeClientBuilder.build(HugeClientBuilder.java:64) ~[hugegraph-client-1.0.0.jar:1.0.0]
    at com.example.demo.MyHugeConfig.hugeClient(MyHugeConfig.java:40) ~[classes/:na]
    at com.example.demo.MyHugeConfig$$EnhancerBySpringCGLIB$$ab22f7ae.CGLIB$hugeClient$0(<generated>) ~[classes/:na]
    at com.example.demo.MyHugeConfig$$EnhancerBySpringCGLIB$$ab22f7ae$$FastClassBySpringCGLIB$$1bae477c.invoke(<generated>) ~[classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.3.19.jar:5.3.19]
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) ~[spring-context-5.3.19.jar:5.3.19]
    at com.example.demo.MyHugeConfig$$EnhancerBySpringCGLIB$$ab22f7ae.hugeClient(<generated>) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_91]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_91]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_91]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.19.jar:5.3.19]
    ... 20 common frames omitted
Caused by: java.lang.ClassNotFoundException: jakarta.ws.rs.ProcessingException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_91]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_91]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_91]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_91]
    ... 33 common frames omitted

Process finished with exit code 1

项目jdk版本 image

项目结构 image

Vertex/Edge example (问题点 / 边数据举例)

No response

Schema [VertexLabel, EdgeLabel, IndexLabel] (元数据结构)

No response

gudehuang commented 1 year ago

@imbajin

和 jdk版本有关吗? 我使用了jdk1.8

项目只有两个依赖spring-boot-starter-web 和hugegraph-client;右侧依赖树没有看到有重复的依赖;

我根据错误提示"jakarta.ws.rs.ProcessingException;" 引入了jakarta.ws.rs-api依赖

    <dependency>
        <groupId>jakarta.ws.rs</groupId>
        <artifactId>jakarta.ws.rs-api</artifactId>
        <version>2.1.6</version>
    </dependency>

2.1.6版本的包名是 javax.ws.rs

3.0.0版本的包名是 jakarta.ws.rs

引入3.0.0版本(包名是 jakarta.ws.rs) 运行报错

 Caused by: java.lang.ClassNotFoundException: javax.ws.rs.core.Configurable

说明 hugegraph-client里的代码有同时用到 javax.ws.rs 和jakarta.ws.rs, 但只能引入jakarta.ws.rs-api的一个版本,这个问题怎么处理?

imbajin commented 1 year ago

@zyxxoo 印象里兼容 java 11 的时候应该都换成 jakarta 了, 应该没有需要 javax 的地方了才对? (你从哪找到现在代码里有 javax.ws.rs的? GitHub 搜了下似乎也没有)

jdk8 应该也可以兼容吧, 虽然不确定你是不是换 java 11 能正常, 你先看看你说的同时使用是哪的代码

zyxxoo commented 1 year ago
    @Bean
    public HugeClient hugeClient() {
        logger.info("huUrl:" + huUrl);
        logger.info("huGraph:" + huGraph);
        //HugeClient hugeClient = new HugeClient(huUrl, huGraph,username,password);
        HugeClient hugeClient = HugeClient.builder(huUrl, huGraph)
                .configUser(username, password)
                .build();
        return hugeClient;

    }

跟 jdk 无关,估计可能跟 springboot 有关,可以 pom 中加下依赖试试

 <dependency>
      <groupId>org.glassfish.jersey.core</groupId>
      <artifactId>jersey-client</artifactId>
      <version>3.0.3</version>
    </dependency>
zyxxoo commented 1 year ago

建议升级 springboot 3.0

gudehuang commented 1 year ago

建议升级 springboot 3.0 @zyxxoo

升级springboot 3.0后,问题解决了.感谢解答!

springboot 3.0 jdk版本最少要求jdk17. 新版本hugegraph-client 现在是不支持springboot 2.0 和jdk 8 吗? 如果是,最好备注说明一下,避免重复踩坑

完整的pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.0</version>
<!--        <version>2.6.7</version>-->
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.hugegraph</groupId>
            <artifactId>hugegraph-client</artifactId>
            <version>1.0.0</version>
        </dependency>
        <!--       jdk17缺少包-->
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.0</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>
        </plugins>
    </build>

</project>
gudehuang commented 1 year ago
    @Bean
    public HugeClient hugeClient() {
        logger.info("huUrl:" + huUrl);
        logger.info("huGraph:" + huGraph);
        //HugeClient hugeClient = new HugeClient(huUrl, huGraph,username,password);
        HugeClient hugeClient = HugeClient.builder(huUrl, huGraph)
                .configUser(username, password)
                .build();
        return hugeClient;

    }

跟 jdk 无关,估计可能跟 springboot 有关,可以 pom 中加下依赖试试

<dependency>
     <groupId>org.glassfish.jersey.core</groupId>
     <artifactId>jersey-client</artifactId>
     <version>3.0.3</version>
   </dependency>

在springboot 2 中 加入该依赖,运行还是会报错.

mangoknight commented 1 year ago

如果使用 jdk8 springboot2.X 目前如何解决? 上面提供的方法都不生效

imbajin commented 1 year ago

如果使用 jdk8 springboot2.X 目前如何解决? 上面提供的方法都不生效

@mangoknight 有尝试使用 common-1.0.1 的版本么?(看相关issue,配置一下stage 仓库可拉取[当然也可以自己编译 common 1.0.1 的源码 install 到本地],然后exclude掉1.0.0的common 如果需要的话)

mangoknight commented 1 year ago

如果使用 jdk8 springboot2.X 目前如何解决? 上面提供的方法都不生效

@mangoknight 有尝试使用 common-1.0.1 的版本么?(看相关issue,配置一下stage 仓库可拉取[当然也可以自己编译 common 1.0.1 的源码 install 到本地],然后exclude掉1.0.0的common 如果需要的话)

尝试mvn install 1.0.1版本后,依旧报错,

        <dependency>
            <groupId>org.apache.hugegraph</groupId>
            <artifactId>hugegraph-client</artifactId>
            <version>1.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.hugegraph</groupId>
                    <artifactId>hugegraph-common</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.hugegraph</groupId>
            <artifactId>hugegraph-common</artifactId>
            <version>1.0.1</version>
        </dependency>

看起来 Jersey的版本 还是 老版本 image

imbajin commented 1 year ago

如果使用 jdk8 springboot2.X 目前如何解决? 上面提供的方法都不生效

@mangoknight 有尝试使用 common-1.0.1 的版本么?(看相关 issue,配置一下 stage 仓库可拉取 [当然也可以自己编译 common 1.0.1 的源码 install 到本地],然后 exclude 掉 1.0.0 的 common 如果需要的话)

尝试 mvn install 1.0.1 版本后,依旧报错,

        <dependency>
            <groupId>org.apache.hugegraph</groupId>
            <artifactId>hugegraph-client</artifactId>
            <version>1.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.hugegraph</groupId>
                    <artifactId>hugegraph-common</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.hugegraph</groupId>
            <artifactId>hugegraph-common</artifactId>
            <version>1.0.1</version>
        </dependency>

看起来 Jersey 的版本 还是 老版本 image

(收到 mail 了) 那把具体的报错内容信息贴一下? 试试缩小问题范围, 试试如果一个单独的 clean 项目, 只引入 springboot2 + client1.0 + common1.0.1 看看, 然后再逐步增加现在的依赖看看冲突是哪引入的

如果连裸的 sp2 + client + common 组合都会报错, 那麻烦单独开个 issue (better for english description)