标签: java-11

javax.net.ssl.SSLException:没有可用的PSK。无法恢复

我正在使用Jetty客户端发送外发请求。在Java 10下完美运行的代码突然在Java 11下获得以下异常:

javax.net.ssl.SSLException: No PSK available. Unable to resume.
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:129)
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:255)
    at java.base/sun.security.ssl.ServerHello$T13ServerHelloConsumer.consume(ServerHello.java:1224)
    at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.onServerHello(ServerHello.java:984)
    at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.consume(ServerHello.java:872)
    at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392)
    at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)
    at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1065)
    at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1052)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:999)
    at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.fill(SslConnection.java:511)
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:128)
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:73)
    at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:133)
    at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:155)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
    at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:411)
    at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:305)
    at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:159)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
Run Code Online (Sandbox Code Playgroud)

在这里向Jetty提交了错误报告,但我想知道:错误消息实际上是什么意思?我的环境有问题吗?或者该错误是否表示Jetty未正确配置连接?

ssl networking java-11

8
推荐指数
3
解决办法
2023
查看次数

如何用java 11运行Wildfly 14?

我在运行时配置中使用Wildfly 14和Java 11.当我启动服务器时,我得到了

org.jboss.modules.ModuleNotFoundException: java.se
    at org.jboss.modules.Module.addPaths(Module.java:1266)
    at org.jboss.modules.Module.link(Module.java:1622)
    at org.jboss.modules.Module.relinkIfNecessary(Module.java:1650)
    at org.jboss.modules.ModuleLoader.loadModule(ModuleLoader.java:296)
    at org.jboss.modules.Main.main(Main.java:437)
Run Code Online (Sandbox Code Playgroud)

如何使用java 11运行Wildfly 14?

java wildfly java-11

8
推荐指数
1
解决办法
5636
查看次数

替换对JDK 11的sun.misc.VM的访问权限

在OpenJDK的8,有可能访问sun.misc.VM和调用isDirectMemoryPageAlignedmaxDirectMemory.
isDirectMemoryPageAligned用于正确调整直接内存的大小,如DirectByteBuffer所做的那样.
maxDirectMemory用于报告内存统计信息以及提供配置值的访问权限-XX:MaxDirectMemorySize.在内部,它将限制直接内存的允许消耗.

从OpenJDK 9开始,类VM已移至jdk.internal.misc,除非--add-export java.base/jdk.internal.misc=xyz在运行应用程序时使用,否则不可用.

有没有"正确"的方法来做到这一点?

我已经尝试使用它ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage().getMax()作为替代,maxDirectMemory但它总是返回-1 - 意味着该值不可用.也可以java.nio.Bits#MAX_MEMORY通过反思访问,但它仍然是" hackish ".


请注意,一个可能非常非常脏,并执行以下操作 - 为OpenJDK,Zulu和Oracle 11.0.1工作 - 但这不是此问题的目标.

public static void tryExportInternal() {
    final String moduleName = "jdk.internal.misc";
    final Module javaLang = Integer.class.getModule();

    // Method used only for tests by the JDK...
    final Method exporter;
    try {
        exporter = Module.class.getDeclaredMethod("implAddExports", String.class);
        exporter.setAccessible(true);
        exporter.invoke(javaLang, moduleName);
    } catch (NoSuchMethodException | …
Run Code Online (Sandbox Code Playgroud)

java java-11

8
推荐指数
1
解决办法
621
查看次数

如何解决由以下原因引起:java.lang.ClassNotFoundException:javax.xml.bind.JAXBException迁移到Java 11(Openjdk-11.0.1)

我已经安装了OpenJDK 11.0.1,当我尝试使用mvn install运行我的应用程序时,我收到以下错误,我已经通过将javax.xml.bind添加到我的pom.xml中添加了必要的依赖项作为修复,但它没有似乎工作,任何人都面临这个问题?我还需要做其他事吗?我的mvn --version返回此

Maven home: /usr/local/Cellar/maven/3.5.2/libexec
Java version: 11.0.1, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
Default locale: en_GB, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.2", arch: "x86_64", family: "mac"
Run Code Online (Sandbox Code Playgroud)

我添加这个,但没有解决问题

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这就是我得到的

[INFO] --- maven-failsafe-plugin:2.20:integration-test (failsafe-integration-tests) @ name-sample-test ---
[WARNING] Error injecting: org.apache.maven.plugin.failsafe.IntegrationTestMojo
java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
    at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3138)
    at java.base/java.lang.Class.getDeclaredConstructors(Class.java:2358)
    at com.google.inject.spi.InjectionPoint.forConstructorOf(InjectionPoint.java:245)
    at com.google.inject.internal.ConstructorBindingImpl.create(ConstructorBindingImpl.java:99)
    at com.google.inject.internal.InjectorImpl.createUninitializedBinding(InjectorImpl.java:658)
    at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:882)
    at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:805)
    at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:282)
    at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:214)
    at com.google.inject.internal.InjectorImpl.getProviderOrThrow(InjectorImpl.java:1006)
    at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1038)
    at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1001) …
Run Code Online (Sandbox Code Playgroud)

java spring-boot java-11

8
推荐指数
2
解决办法
3389
查看次数

使用流从内部对象分组Map属性?

我正在学习Java 8 - Java 11,我得到了一个代码,我正在转换为.我有以下课程:

class Resource {
   List<Capability> capabilities;
}

class Capability {
   String namespace;
   Map<String, Object> attributes;
}
Run Code Online (Sandbox Code Playgroud)

我有一个资源流,我想从两个不同的命名空间("a","b")中提取所有的功能属性到Map<Resource, Map<String, Object>>我确信没有重复键.

我做了很多尝试使用map,flatMap但是有了这些,我无法保留主要资源对象的引用.使用java9的新功能我可以进步,但我坚持下面的代码,我能够返回所有属性,但在一个集合.我还无法通过功能命名空间进行过滤,并将它们放在地图中:

Map<Resource, Set<Object>> result = pResolved.stream()
    .collect(groupingBy(t -> t, flatMapping(
            resource -> resource.getCapabilities(null).stream(),
            flatMapping(
                    cap -> cap.getAttributes().entrySet().stream(),
                    toSet()))));
Run Code Online (Sandbox Code Playgroud)

似乎我走在了正确的道路上.

java collections java-8 java-stream java-11

8
推荐指数
2
解决办法
212
查看次数

Tomcat 9.0.16:无法初始化组件[连接器[HTTP/1.1-8080]]

最近我下载了 JDK 11.0.2 和 Tomcat 9.0.16 并设置了环境变量,但是每当我启动 tomcat 时,它都会在控制台中显示以下异常,并且无法访问http://localhost:8080/ 。请帮忙。

    06-Mar-2019 03:34:43.186 SEVERE [main] org.apache.catalina.util.LifecycleBase.handleSubClassException Failed to initialize component [Connector[HTTP/1.1-8080]] org.apache.catalina.LifecycleException: Protocol handler initialization failed
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:983)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:535)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:1055)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:589)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:612)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:306)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:491)
Caused by: java.io.IOException: Unable to establish loopback connection
    at java.base/sun.nio.ch.PipeImpl$Initializer.run(PipeImpl.java:94)
    at java.base/sun.nio.ch.PipeImpl$Initializer.run(PipeImpl.java:61)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/sun.nio.ch.PipeImpl.<init>(PipeImpl.java:171)
    at java.base/sun.nio.ch.SelectorProviderImpl.openPipe(SelectorProviderImpl.java:50)
    at java.base/java.nio.channels.Pipe.open(Pipe.java:155)
    at java.base/sun.nio.ch.WindowsSelectorImpl.<init>(WindowsSelectorImpl.java:127)
    at …
Run Code Online (Sandbox Code Playgroud)

java tomcat tomcat9 java-11

8
推荐指数
1
解决办法
4万
查看次数

在 JDK 11 中全局注册 bouncycastle 安全提供程序

在 Java 8 中,我通过执行以下步骤全局注册了 Bouncy Castle 安全提供程序:

  1. 将 bouncycastle jar 复制到jre/lib/ext
  2. 添加security.provider.<N>=org.bouncycastle.jce.provider.BouncyCastleProvider jre/lib/security/java.security

一切都工作得很好!

java.security现在在 Java 11 中,我在 中找到了conf/security/,这很好,但lib/ext在 Java 11 中就没有了。

在Java 11中全局注册Bouncy Castle的方法是什么?

java bouncycastle java-11

8
推荐指数
2
解决办法
1万
查看次数

有条件地从流中删除第一个(索引为零)元素

我有以下代码:

Stream<String> lines = reader.lines();
Run Code Online (Sandbox Code Playgroud)

如果第一个字符串等于"email"我要从流中删除第一个字符串。对于流中的其他字符串,我不需要此检查。

我怎么能做到?

聚苯乙烯

当然,我可以将其转换为列表,然后使用旧式进行循环,但是进一步,我需要再次播放流。

java java-stream java-11

8
推荐指数
1
解决办法
184
查看次数

maven-plugin-plugin:3.2:descriptor failed: 索引 22273 超出长度 88 的范围

Jdk : JAVA 11

无法在项目构建工具上执行目标 org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor (default-descriptor): 执行目标 org.apache.maven.plugins:maven-plugin-plugin 的默认描述符: 3.2:descriptor failed: Index 22273 out of bounds for length 88 -> [Help 1]

<artifactId>buildtools</artifactId>
<packaging>maven-plugin</packaging>
<name>MYPojo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<executions>
<execution>
<id>mojo-descriptor</id>
<phase>process-classes</phase>
<goals>
<goal>descriptor</goal>
</goals>
</execution>
</executions>
</plugin>


<!-- for maven plugin -->
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.6.3</version>
</dependency>
<!-- dependencies to annotations -->
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
<version>3.6.3</version>
</dependency> …
Run Code Online (Sandbox Code Playgroud)

java maven-plugin maven java-11

8
推荐指数
3
解决办法
1885
查看次数

Unsafe.defineAnonymousClass 在创建 Lambda 时卡住的原因是什么?

我有一台正在运行的服务器由于在尝试创建 lambda 实例时陷入 Unsafe.defineAnonymousClass 中而多次崩溃。以下是其中一个堆栈跟踪的示例:

"MessageIterationThread (false, 1059)" #163386 prio=5 os_prio=0 cpu=56.89ms elapsed=28566.80s tid=0x00007fef183bb000 nid=0x78f6 runnable  [0x00007fece0693000]
   java.lang.Thread.State: RUNNABLE
    at jdk.internal.misc.Unsafe.defineAnonymousClass0(java.base@11.0.2/Native Method)
    at jdk.internal.misc.Unsafe.defineAnonymousClass(java.base@11.0.2/Unsafe.java:1223)
    at java.lang.invoke.InnerClassLambdaMetafactory.spinInnerClass(java.base@11.0.2/InnerClassLambdaMetafactory.java:320)
    at java.lang.invoke.InnerClassLambdaMetafactory.buildCallSite(java.base@11.0.2/InnerClassLambdaMetafactory.java:188)
    at java.lang.invoke.LambdaMetafactory.metafactory(java.base@11.0.2/LambdaMetafactory.java:329)
    at java.lang.invoke.LambdaForm$DMH/0x00000008002e6840.invokeStatic(java.base@11.0.2/LambdaForm$DMH)
    at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base@11.0.2/Invokers$Holder)
    at java.lang.invoke.BootstrapMethodInvoker.invoke(java.base@11.0.2/BootstrapMethodInvoker.java:127)
    at java.lang.invoke.CallSite.makeSite(java.base@11.0.2/CallSite.java:307)
    at java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(java.base@11.0.2/MethodHandleNatives.java:258)
    at java.lang.invoke.MethodHandleNatives.linkCallSite(java.base@11.0.2/MethodHandleNatives.java:248)
    at some random point in my code using this::someMethod
Run Code Online (Sandbox Code Playgroud)

崩溃意味着一个线程卡在了他阻止其他人并导致类似场景的僵局的点上。lamda 创建卡住的点似乎是完全随机的。甚至有多个线程卡在代码中完全不同的地方。其中至少有一个会危及整个服务器。

我发现这篇文章看起来像是一个可能相关的问题,并确保这不是问题。 如果 getStackTrace() 被一个线程调用并且 lambda 定义(通过 Unsafe.defineAnonymousClass)发生在另一个线程中,Java8 就会挂断

服务器在 上运行,Ubuntu 18.04.4 LTSJVM 是OpenJDK 64-Bit Server VM (11.0.2+9 mixed mode). 代码使用相同的 OpenJDK 编译。这些是起始参数:

-Xmx4000m …
Run Code Online (Sandbox Code Playgroud)

java java-11

8
推荐指数
0
解决办法
287
查看次数