我在使用HttpClient::send带有 custom 的Java 11 直接将 JSON 反序列化为自定义对象时遇到问题HttpResponse.BodyHandler。我在回答这个 SO question时遇到了这个问题。
我使用的版本:
我创建了一个简单的泛型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) 我在 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以下代码在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(发布候选版本)中测试.
我刚刚迁移到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) 我继承了一个Spring Boot项目,我们希望使用Java 11进行测试,因为Java 9和10(var和List.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) 我有一个具有以下结构的小项目:
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
请参考“ …
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) 我有一个 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)
应如何解决此警告?
刚刚从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 8 和 Java 11 一起运行时,我有一个非常奇怪的行为差异。
我正在使用 MSGraph API (1.7.0) 对 Onedrive API 进行多次调用。为了进行这些调用,我使用了 4 个并行线程来同步硬盘上的大量文件(大约 1000 个)。
当我使用 Java 8 执行程序时,我没有发现任何异常。当我使用 java 11 执行它时,我在大约 60% 的调用中收到了 Socket Timeout Exception。
要配置IGraphServiceClient,我使用的是默认配置。就我而言,在这种情况下,HTTP 提供程序是 OKHttp3。
有没有人经历过这样的事情?
[更新-1]
这些是我测试过的环境:
在此您有堆栈跟踪:
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)