标签: java-11

使用 Java 11 HttpClient 和带有 Jackson 的自定义 BodyHandler 反序列化 JSON 停止并且不会继续

我在使用HttpClient::send带有 custom 的Java 11 直接将 JSON 反序列化为自定义对象时遇到问题HttpResponse.BodyHandler。我在回答这个 SO question时遇到了这个问题

我使用的版本:

  • OpenJDK 11
  • 杰克逊 2.9.9.3

我创建了一个简单的泛型JsonBodyHandler类,它实现HttpResponse.BodyHandler

public class JsonBodyHandler<W> implements HttpResponse.BodyHandler<W> {

    private final Class<W> wClass;

    public JsonBodyHandler(Class<W> wClass) {
        this.wClass = wClass;
    }

    @Override
    public HttpResponse.BodySubscriber<W> apply(HttpResponse.ResponseInfo responseInfo) {
        return asJSON(wClass);
    }

}
Run Code Online (Sandbox Code Playgroud)

asJSON方法定义为:

public static <W> HttpResponse.BodySubscriber<W> asJSON(Class<W> targetType) {
        HttpResponse.BodySubscriber<String> upstream = HttpResponse.BodySubscribers.ofString(StandardCharsets.UTF_8);

        return HttpResponse.BodySubscribers.mapping(
                upstream,
                (String body) -> {
                    try {
                        ObjectMapper objectMapper …
Run Code Online (Sandbox Code Playgroud)

java jackson java-http-client java-11

12
推荐指数
2
解决办法
8964
查看次数

在 Visual Studio Code (VsCode) 和 Java 11 中使用 SonarLint 时出错

我在 Visual Studio 代码中使用 SonarLint 时遇到问题,我 \xe2\x80\x99 在 java 8 中一直很好地使用这个插件,但上周,Vscode 需要 java 11 作为最低 java 版本,当我更新它时(我继续使用 java对于我的项目来说,根据Vscode可以使用两个版本),插件无法\xe2\x80\x99启动良好,这是一个错误:\n[Error - 16:57:02.682] Analysis failed.

\n

[错误 - 16:57:02.683] java.lang.IllegalStateException:没有匹配 'C:\\Users\\MyUser.m2\\repository\\com\\sun\\java\\tools\\11\ 的文件或目录\tools-11.jar'

\n

我知道tools.jar在java 11中不存在\xe2\x80\x99t,并且我无法\xe2\x80\x99t找到一个jar来替换它或解决这个问题的方法。\nI\xe2\x80\x99m使用最后一个sonarLint 插件版本 1.17.0

\n

感谢您的回答。

\n

java visual-studio-code sonarlint java-11

12
推荐指数
1
解决办法
3万
查看次数

有效证书上的JDK 11 SSL错误(在以前的版本中工作)

以下代码在JDK 11中引发错误:

    HttpURLConnection con = (HttpURLConnection) new URL("https://sis.redsys.es/sis/realizarPago").openConnection();
    con.setRequestMethod("GET");
    con.getResponseCode();
Run Code Online (Sandbox Code Playgroud)

错误是:

javax.net.ssl.SSLHandshakeException: extension (10) should not be presented in server_hello
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128)
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:312)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:268)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:259)
at java.base/sun.security.ssl.SSLExtensions.<init>(SSLExtensions.java:71)
at java.base/sun.security.ssl.ServerHello$ServerHelloMessage.<init>(ServerHello.java:169)
at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.consume(ServerHello.java:860)
at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:390)
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:445)
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:422)
at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:178)
at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164)
at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:877)
at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:810)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:383)
at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567)
Run Code Online (Sandbox Code Playgroud)

它在任何以前的JDK中工作(我在7,8,9和10中测试过).

证书似乎是有效的,因为它被浏览器识别或我在互联网上发现的大多数SSL测试.

我已经尝试禁用主机名验证,禁用cacerts,将DigiCert添加到cacerts文件中没有任何运气.

这似乎是openJDK中的一个错误.在构建版本26,27和28(发布候选版本)中测试.

java ssl openssl java-security java-11

11
推荐指数
1
解决办法
6185
查看次数

迁移到JDK 11后,Spring Boot因Hibernate错误而失败

我刚刚迁移到JDK 11以使用最新的Java LTS版本.如果我将Eclipse中的执行JRE从10更改为11(并且只有那时),当我尝试运行我的测试时,我得到以下异常堆栈跟踪(我删除了一些部分以方便阅读).

请注意,如果我切换回jdk-10,一切都按预期工作.显然我使用Spring启动和Hibernate作为我的ORM.我已经在http://in.relation.to/2018/09/13/using-hibernate-orm-with-jdk11/中检查了该文章,并尝试解决这些依赖性问题.我的pom.xml也在这里显示.

Spring Boot和/或Hibernate与jdk-11之间是否存在已知的不兼容性?也许pom.xml中缺少另一个引用?

编辑:正如@nullpointer正确指出的那样,Spring 5.1支持java 11.但是,我的问题显然是指Spring Boot.

pom.xml中:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.4.RELEASE</version>
</parent>


<dependencies>
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.3.0.1</version>
    </dependency>
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>
    <dependency>
        <groupId>javax.transaction</groupId>
        <artifactId>jta</artifactId>
        <version>1.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-model</artifactId>
        <version>3.5.4</version>
    </dependency>
    <dependency>
        <groupId>org.modelmapper</groupId>
        <artifactId>modelmapper</artifactId>
        <version>2.2.0</version>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <executable>true</executable>
                <skipTests>true</skipTests>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal> …
Run Code Online (Sandbox Code Playgroud)

java hibernate spring-boot java-11

11
推荐指数
1
解决办法
4325
查看次数

是什么让Maven想要使用Zulu Java 11的openjfx而不是Zulu Java 8的Spring Boot项目?

我继承了一个Spring Boot项目,我们希望使用Java 11进行测试,因为Java 9和10(varList.of(...))中添加了很好的功能.

Maven项目分为几个部分,其中为Java 8设置了生产代码,以及Java 11的测试代码.这在模块基础上可以很好地单独工作,全局构建与Java 8一起工作(测试失败除外)编译)和Java 10.

现在我想使用Java 11从根目录编译所有内容,因为这是LTS(Zulu,因为这是在Windows 10上),并且出于某种原因,Maven现在想要引入org.openjfx:javafx.base:jar:11.0. 0-快照

[INFO] Building mumble-data-service-parent 1.0.0-SNAPSHOT              
[1/8]
[INFO] --------------------------------[ pom ]---------------------------------
[WARNING] The POM for org.openjfx:javafx.base:jar:11.0.0-SNAPSHOT is missing, no dependency information available
[INFO]
Run Code Online (Sandbox Code Playgroud)

由于依赖关系不满意,我不能(至少不是我能想到的方式)让Maven告诉我为什么要这样做所以我不知道在哪里看,而且该项目似乎没有引用javafx in第一个地方(作为一个让我感到惊讶的Spring Boot微服务).因此这个问题.

是什么导致它,我该如何解决?


正如Karol正确推导出的这个问题之前已经出现过,修复是将hibernate验证器依赖项升级到更新版本.我需要的只是将以下属性添加到我的父pom中:

    <!-- needed for building with Java 11 -->
    <hibernate-validator.version>6.0.12.Final</hibernate-validator.version>
Run Code Online (Sandbox Code Playgroud)

java javafx maven azul-zulu java-11

11
推荐指数
1
解决办法
1271
查看次数

带有maven的Java 11/12 Javadoc无法生成用于测试的Javadocs

我有一个具有以下结构的小项目:

pom.xml

src/main/java/
  module-info.java
  de.ps.pl.te/
    package-info.java
    TE.java

src/test/java/
   de.ps.pl.te.test/
     package-info.java
     TETests.java
Run Code Online (Sandbox Code Playgroud)

同样在我的maven pom中,我定义了javadoc插件,如下所示:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>3.1.0</version>
        <configuration>
          <show>protected</show>
          <failOnError>false</failOnError>
        </configuration>
      </plugin>
Run Code Online (Sandbox Code Playgroud)

现在我在跑步过程中得到了一些奇怪的输出

mvn clean install site
Run Code Online (Sandbox Code Playgroud)

[INFO]生成“ Javadoc”报告--- maven-javadoc-plugin:3.1.0:aggregate-no-fork [错误]提取链接时出错:D:\ work \ eclipse \ java \ FritzBox \ phplib \ target \ javadoc-捆绑选项。忽略它。

[...]

[INFO]生成“ Test Javadoc”报告--- maven-javadoc-plugin:3.1.0:test-aggregate-no-fork

[错误]提取链接时出错:D:\ work \ eclipse \ java \ FritzBox \ phplib \ target \ javadoc-bundle-options。忽略它。

正在加载软件包de.ps.pl.te.test的源文件...

1个错误

[错误]创建javadoc报告时出错:

退出代码:2-Javadoc:错误-软件包de.powerstat.phplib.templateengine.test没有源文件

命令行为:[...] javadoc.exe @options @packages

请参考“ [...]”目录中生成的Javadoc文件。

org.apache.maven.reporting.MavenReportException:

退出代码:2-javadoc:错误-没有软件包de.ps.pl.te.test的源文件

命令行为:[...] javadoc.exe @options @packages

请参考“ …

java javadoc maven java-11 java-12

11
推荐指数
1
解决办法
1607
查看次数

Spring boot 微服务 (jdk11) 抛出 hystrix.stream-actuator-endpoint 异常

spring boot服务迁移到2.1.3.RELEASEand后jdk11,出现hystrix流执行器相关异常。

例外是 ERROR org.apache.catalina.core.ContainerBase.[Tomcat-1].[localhost].[/].[hystrix.stream-actuator-endpoint] - Servlet.service() for servlet [hystrix.stream-actuator-endpoint] in context with path [] threw exception[]


Spring启动版本:2.1.3.RELEASE

Java 版本:11

公开所有执行器端点: management.endpoints.web.exposure.include=*

此外,hystrix.stream端点实际上已启用并提供流。尽管如此,日志中仍然会出现异常


堆栈跟踪:

java.nio.BufferOverflowException
    at java.base/java.nio.DirectByteBuffer.put(DirectByteBuffer.java:410)
    at java.base/java.nio.DirectByteBuffer.put(DirectByteBuffer.java:389)
    at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:74)
    at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:50)
    at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:466)
    at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:134)
    at org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:105)
    at org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:144)
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1223)
    at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:743)
    at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:696)
    at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:686)
    at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.flush(Http11OutputBuffer.java:553)
    at org.apache.coyote.http11.filters.ChunkedOutputFilter.flush(ChunkedOutputFilter.java:157)
    at org.apache.coyote.http11.Http11OutputBuffer.flush(Http11OutputBuffer.java:216)
    at org.apache.coyote.http11.Http11Processor.flush(Http11Processor.java:1149)
    at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:394)
    at org.apache.coyote.Response.action(Response.java:209)
    at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:295)
    at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:262)
    at org.apache.catalina.connector.CoyoteWriter.flush(CoyoteWriter.java:94)
    at org.apache.catalina.connector.CoyoteWriter.checkError(CoyoteWriter.java:119)
    at com.netflix.hystrix.contrib.sample.stream.HystrixSampleSseServlet.handleRequest(HystrixSampleSseServlet.java:165)
    at com.netflix.hystrix.contrib.sample.stream.HystrixSampleSseServlet.doGet(HystrixSampleSseServlet.java:74)
    at …
Run Code Online (Sandbox Code Playgroud)

java spring-boot hystrix java-11

11
推荐指数
1
解决办法
1057
查看次数

如何修复 Guice 错误,“发生了非法的反射访问操作”

我有一个 Kotlin 项目,它使用 Guice 进行 DI,最近从 JDK 8 -> 11 更新。它现在在运行时发出以下错误:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/Users/matt/.gradle/caches/modules-2/files-2.1/com.google.inject/guice/4.2.2/6dacbe18e5eaa7f6c9c36db33b42e7985e94ce77/guice-4.2.2.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Run Code Online (Sandbox Code Playgroud)

应如何解决此警告?

guice kotlin java-11

11
推荐指数
1
解决办法
7223
查看次数

Java,自从在 Linux 上迁移到 Java 14 后,无法执行 spawn helper 错误

刚刚从Java 11迁移到Java 14

以下代码现在在 linux 机器上失败:

String linux_exe  = System.getProperty("user.dir") + '/' + "fpcalc_arm32";
List<String> params = new ArrayList();
params.add(linux_exe);
params.add("-plain");
params.add("-length");
params.add(submittedSongLength);
params.add(file.getPath());
Process p = Runtime.getRuntime().exec(params.toArray(new String[1]));                    
Run Code Online (Sandbox Code Playgroud)

带堆栈跟踪

Cannot run program "/mnt/system/config/Apps/SongKong/songkong/fpcalc_arm32": error=0, Failed to exec spawn helper: pid: 13998, exit value: 127
java.io.IOException: Cannot run program "/mnt/system/config/Apps/SongKong/songkong/fpcalc_arm32": error=0, Failed to exec spawn helper: pid: 13998, exit value: 127
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
at java.base/java.lang.Runtime.exec(Runtime.java:590)
at java.base/java.lang.Runtime.exec(Runtime.java:449)
at com.jthink.songkong.analyse.acoustid.AcoustId.generateFingerprint(AcoustId.java:217)
at com.jthink.songkong.analyse.acoustid.AcoustId.createAcoustIdFingerprint(AcoustId.java:106)
Run Code Online (Sandbox Code Playgroud)

Java 14 发生了什么变化会导致这种情况?

我使用 …

java java-11 java-14

11
推荐指数
1
解决办法
1410
查看次数

Java 11 上的 SocketTimeout 而不是 Java 8

当我的 Java 程序与 Java 8 和 Java 11 一起运行时,我有一个非常奇怪的行为差异。

我正在使用 MSGraph API (1.7.0) 对 Onedrive API 进行多次调用。为了进行这些调用,我使用了 4 个并行线程来同步硬盘上的大量文件(大约 1000 个)。

当我使用 Java 8 执行程序时,我没有发现任何异常。当我使用 java 11 执行它时,我在大约 60% 的调用中收到了 Socket Timeout Exception。

要配置IGraphServiceClient,我使用的是默认配置。就我而言,在这种情况下,HTTP 提供程序是 OKHttp3。

有没有人经历过这样的事情?

[更新-1]

这些是我测试过的环境:

  • Oracle 的 JDK 1.8.0_192 --> 完美。在大约 400 次调用中没有错误
  • Openjdk 11.0.7 和 Oracle 的 jdk 11.0.3 --> 大量的 Sokcet 超时异常

在此您有堆栈跟踪:

com.microsoft.graph.core.ClientException: Error during http request
    at com.microsoft.graph.http.CoreHttpProvider.sendRequestInternal(CoreHttpProvider.java:422) ~[easybox-0.1-SNAPSHOT.jar:?]
    at com.microsoft.graph.http.CoreHttpProvider.send(CoreHttpProvider.java:204) ~[easybox-0.1-SNAPSHOT.jar:?]
    at com.microsoft.graph.http.CoreHttpProvider.send(CoreHttpProvider.java:184) ~[easybox-0.1-SNAPSHOT.jar:?]
    at com.microsoft.graph.http.BaseStreamRequest.send(BaseStreamRequest.java:85) ~[easybox-0.1-SNAPSHOT.jar:?]
    at com.microsoft.graph.requests.extensions.DriveItemStreamRequest.get(DriveItemStreamRequest.java:55) …
Run Code Online (Sandbox Code Playgroud)

java java-8 okhttp java-11

11
推荐指数
1
解决办法
1219
查看次数