标签: java-11

如何在Java http客户端中自定义"主机"头

这是我的代码:

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("http://127.0.0.1:8081/"))
    .header("Host", "test.example.com")
    .build();
client.send(request, HttpResponse.BodyHandlers.ofString());
Run Code Online (Sandbox Code Playgroud)

结果我看到上面的代码发送:

GET / HTTP/1.1
Connection: Upgrade, HTTP2-Settings
Content-Length: 0
Host: 127.0.0.1:8081
HTTP2-Settings: AAEAAEAAAAIAAAABAAMAAABkAAQBAAAAAAUAAEAA
Upgrade: h2c
User-Agent: Java-http-client/10
Host: test.example.com
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它会发送两个Host标头(URI和我指定的Host标头),但我希望它发送我指定的标头,而不是URI中的标头.这个客户有可能吗?

编辑:在Java 11中,它变得更糟(你需要将client.send行改为:)client.send(request, HttpResponse.BodyHandlers.ofString());:

java.lang.IllegalArgumentException: restricted header name: "Host"
Run Code Online (Sandbox Code Playgroud)

如何自定义该标头(测试虚拟主机所需)?

我也试过setHeader并得到完全相同的问题(双头Host或异常).

编辑:我报告了一个JDK错误.

java http2 java-10 java-http-client java-11

7
推荐指数
1
解决办法
1822
查看次数

编译失败:找不到模块:org.apache.logging.log4j

我有一个用 Java 11 编写的简单应用程序。mvn clean verify(maven 3.6.0)执行时出错:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project parser: Compilation failure
[ERROR] ...src/main/java/module-info.java:[2,32] module not found: org.apache.logging.log4j  
Run Code Online (Sandbox Code Playgroud)

依赖项:

<log4j.version>2.11.1</log4j.version>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>${log4j.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>${log4j.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

模块信息.java:

module abc {
    requires org.apache.logging.log4j;
}
Run Code Online (Sandbox Code Playgroud)

Log4j2 配置是默认的并且在 .xml 文件中。用法:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

private static final Logger logger = LogManager.getLogger(Abc.class); 

logger.info("Boom!");
Run Code Online (Sandbox Code Playgroud)

我在 stackoverflow 上尝试了所有相关问题,但没有成功。

java maven log4j2 java-module java-11

7
推荐指数
1
解决办法
2873
查看次数

是否可以导入两个相同包装的罐子?

我正在将项目从Java 8迁移到Java 11,并且java 9中引入的模块化让我头疼.情侣罐有相同的包,但不同的类.这给了我错误

module SomeModule reads package my.package from both ModuleA and ModuleB
Run Code Online (Sandbox Code Playgroud)

我想知道如何处理这样的情况,因为并非所有的罐子都在我的控制之下,重构不是解决方案.

java java-9 java-module java-11

7
推荐指数
1
解决办法
130
查看次数

在Java 11中HttpClient如何解决受限制的头名:Date

以下java 11代码:

HttpRequest request = HttpRequest.newBuilder()
            .uri(uri)
            .header("Digest", digest)
            .header("Date", date)  
            .build();
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

Exception in thread "main" java.lang.IllegalArgumentException: restricted header name: "Date"
Run Code Online (Sandbox Code Playgroud)

问题是摘要是基于日期的,所以我不能简单地依赖于http客户端日期,因为这会使摘要无效.我需要一种方法来设置Date标头,或者检索Date标头,然后设置摘要.标准java 11似乎都不可能.

java http java-http-client java-11

7
推荐指数
1
解决办法
282
查看次数

Java 11软件包javax.xml.soap不存在

我正在尝试使用SOAP创建一条简单的消息:

MessageFactory mf = MessageFactory.newInstance();
SOAPMessage message = mf.createMessage();
Run Code Online (Sandbox Code Playgroud)

当我使用Java 8构建项目时,可以,但是使用Java 11构建项目失败,并出现编译错误:

package javax.xml.soap does not exist
Run Code Online (Sandbox Code Playgroud)

如何解决此问题?

java jax-ws java-11

7
推荐指数
1
解决办法
8401
查看次数

使类公开,但对JAR文件保持私有

有没有办法让Java类公开但只公开一个JAR文件?AKA,它不是私有包,而是公共包,但它不是公共JAR?

说我有这样的结构:

project/
  package1/
    One.java
  package2/
    Two.java
  package3/
    Three.java
Run Code Online (Sandbox Code Playgroud)

由于3 .java文件在不同的包中,我需要公开.但有没有办法让它们只对包含该项目的JAR公开?这样如果另一个项目导入JAR,它就看不到某些公共类/字段?

java maven java-platform-module-system java-11

7
推荐指数
2
解决办法
131
查看次数

为什么此示例程序中的OpenJDK 11 Java垃圾收集器“减少”了可用内存?

当我使用OpenJDK 11(在Windows 10上为Zulu发行版)编译并运行以下非常简单的Java程序时:

public class GCTest {
    public static void main(String[] args) {
        System.out.println("Free memory before garbage collection: " + Runtime.getRuntime().freeMemory());
        Runtime.getRuntime().gc();
        System.out.println("Free memory  after garbage collection: " + Runtime.getRuntime().freeMemory());
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来垃圾回收正在减少可用内存量:

Free memory before garbage collection: 266881496
Free memory  after garbage collection: 7772200
Run Code Online (Sandbox Code Playgroud)

当我使用Oracle Java 8运行它时,不会发生这种情况:

Free memory before garbage collection: 254741016
Free memory  after garbage collection: 255795064
Run Code Online (Sandbox Code Playgroud)

这是为什么?

java garbage-collection azul-zulu java-11

7
推荐指数
1
解决办法
943
查看次数

Java Maven 项目“不再支持源选项 5。使用 6 或更高版本。”

我正在学习 Bryan Hansen 的 PluralSight 课程“Spring 框架:Spring 基础知识”。我完全按照演示进行操作(我相信),但收到错误消息“错误:java:不再支持源选项 5。使用 6 或更高版本。”。

我正在使用最新版本的 IntelliJ,具有以下配置:

  • 在“首选项 > 构建、执行、部署 > 编译器 > Java 编译器”下,我将项目字节码版本设置为 Java 11,并将每个模块字节码版本设置为“与语言级别相同”。
  • 在“文件 > 项目结构 > 项目”下,我将项目 SDK 设置为 11,并将项目语言级别设置为 11。
  • 我的 pom.xml 具有以下构建设置:

    <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>11</source>
                        <target>11</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>

Run Code Online (Sandbox Code Playgroud)

我看过其他一些类似的帖子,他们有时似乎将上述配置设置为 1.6 而不是 11,但我正在尝试密切关注本教程。我仍然对这里的差异感到好奇。

不确定是什么导致抛出此错误,据我所知,我已经正确设置了所有内容,但显然情况并非如此。任何帮助,将不胜感激。

java intellij-idea maven java-11

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

Gradle 7 和 Java 11:找不到请求过滤器的兼容工具链

从 Gradle 6.7.1 升级到 Gradle 7.4 后,出现以下错误:


FAILURE: Build failed with an exception.

* What went wrong:
Could not determine the dependencies of task ':example-project:compileJava'.
> Failed to query the value of extension 'example-extension' property 'enabled'.
   > Failed to calculate the value of task ':example-project:compileJava' property 'javaCompiler'.
      > No compatible toolchains found for request filter: {languageVersion=11, vendor=any, implementation=vendor-specific} (auto-detect true, auto-download false)
Run Code Online (Sandbox Code Playgroud)

java gradle java-11

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

bouncycastle bcprov、bcpkix 和 bctips 之间有什么区别?

我熟悉java中的基本密码学,但对bouncycastle零经验,最近我遇到一个需求,需要从FTP读取加密和签名的文件。

发件人指示我使用bctips电子书来阅读这些加密和签名的文件。我浏览了充气城堡网站的下载页面,但我对很多我无法理解的术语感到困惑,而且我不知道应该使用哪个jar文件。

bcprov我想知道andbcpkix和有什么区别bcfips

如果有人指出我正确的道路,我会很感激。

java spring cryptography bouncycastle java-11

7
推荐指数
1
解决办法
5578
查看次数