Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ jobs:
cache: maven
- name: Test with Maven
run: mvn clean install -Dmaven.test.skip=true -B -U --file pom.xml
- name: Test HTTP transport with Spring Boot 3.5.16 BOM first
run: mvn -B -ntp -f trpc-transport/trpc-transport-http/src/test/it/boot-bom-first/pom.xml test
JDK21:
runs-on: ubuntu-latest
steps:
Expand All @@ -48,6 +50,8 @@ jobs:
cache: maven
- name: Test with Maven
run: mvn clean install -Dmaven.test.skip=true -B -U --file pom.xml
- name: Test HTTP transport with Spring Boot 3.5.16 BOM first
run: mvn -B -ntp -f trpc-transport/trpc-transport-http/src/test/it/boot-bom-first/pom.xml test
JDK17-master:
runs-on: ubuntu-latest
steps:
Expand Down
84 changes: 8 additions & 76 deletions trpc-dependencies/trpc-dependencies-bom/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,7 @@
<jakarta.xml.bind-api.version>4.0.2</jakarta.xml.bind-api.version>
<javax.ws.rs.version>2.1.1</javax.ws.rs.version>
<javax.validation.version>2.0.1.Final</javax.validation.version>
<jetty.alpn.boot.version>8.1.13.v20181017</jetty.alpn.boot.version>
<jetty.version>11.0.25</jetty.version>
<jetty.version>12.0.36</jetty.version>
<joda-time.version>2.7</joda-time.version>

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SpringBoot 3.5 实际管理的 12.0.x,jetty是不是用12.0.x。SpringBoot 4.x应该有下一个trpc版本兼容,trpc2.x不用兼容这个

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

已在 3fcf823 把默认 Jetty 调整为 12.0.36,与 Spring Boot 3.5.16 管理的版本一致。这个 PR 的兼容范围收回到 Boot 3,Boot 4 留给后续版本处理。

<jprotobuf.version>2.4.14</jprotobuf.version>
<junit.version>5.12.2</junit.version>
Expand Down Expand Up @@ -577,85 +576,18 @@
<version>${javax.servlet-api.version}</version>
</dependency>
<dependency>
<artifactId>jetty-server</artifactId>
<groupId>org.eclipse.jetty</groupId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<artifactId>jetty-servlet</artifactId>
<groupId>org.eclipse.jetty</groupId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<artifactId>jetty-io</artifactId>
<groupId>org.eclipse.jetty</groupId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<artifactId>jetty-util</artifactId>
<groupId>org.eclipse.jetty</groupId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<artifactId>jetty-util-ajax</artifactId>
<groupId>org.eclipse.jetty</groupId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<artifactId>jetty-security</artifactId>
<groupId>org.eclipse.jetty</groupId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<artifactId>jetty-http</artifactId>
<groupId>org.eclipse.jetty</groupId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<artifactId>http2-server</artifactId>
<groupId>org.eclipse.jetty.http2</groupId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<artifactId>http2-common</artifactId>
<groupId>org.eclipse.jetty.http2</groupId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<artifactId>http2-hpack</artifactId>
<groupId>org.eclipse.jetty.http2</groupId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<artifactId>jetty-alpn-server</artifactId>
<groupId>org.eclipse.jetty</groupId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<artifactId>jetty-alpn-conscrypt-server</artifactId>
<groupId>org.eclipse.jetty</groupId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<artifactId>jetty-alpn-java-server</artifactId>
<groupId>org.eclipse.jetty</groupId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<artifactId>jetty-alpn-openjdk8-server</artifactId>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-bom</artifactId>
<version>${jetty.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<groupId>org.eclipse.jetty.ee10</groupId>
<artifactId>jetty-ee10-bom</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<artifactId>alpn-boot</artifactId>
<groupId>org.mortbay.jetty.alpn</groupId>
<scope>runtime</scope>
<version>${jetty.alpn.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--javassist opensource dependencies-->
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,9 @@
import com.tencent.trpc.core.rpc.def.DefProviderInvoker;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image 这两个问题帮改一下?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HTTP/1.1 回退已改用 httpsConfig,与同一端口上的 HTTP/2 共用 HTTPS 配置。补了实际协商到 HTTP/1.1 的测试,确认 Servlet 读到的 scheme 是 https,isSecure() 为 true。

Host 校验这边保留了 Jetty 默认行为。确认过 setSniRequired(false) 不会关闭证书与请求 Host 的匹配检查,Jetty 11 也已有这项检查。这次补了证书与 Host 不匹配时返回 400 的用例。考虑到默认关闭会放宽现有校验,建议后续有明确的 IP 直连兼容需求时,再单独讨论配置开关。

import com.tencent.trpc.core.utils.NetUtils;
import com.tencent.trpc.proto.standard.common.TRPCProtocol;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import javax.ws.rs.HttpMethod;
import org.eclipse.jetty.server.HttpChannel;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Response;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
Expand Down Expand Up @@ -69,9 +68,8 @@
connector.setAcceptQueueSize(60);
server.addConnector(connector);

HttpChannel httpChannel = org.mockito.Mockito.mock(HttpChannel.class);
Request request = org.mockito.Mockito.mock(Request.class);
Response response = org.mockito.Mockito.mock(Response.class);
HttpServletRequest request = org.mockito.Mockito.mock(HttpServletRequest.class);
HttpServletResponse response = org.mockito.Mockito.mock(HttpServletResponse.class);

Check warning on line 72 in trpc-proto/trpc-proto-http/src/test/java/com/tencent/trpc/proto/http/server/DefaultHttpExecutorTest.java

View workflow job for this annotation

GitHub Actions / checkstyle

[checkstyle] reported by reviewdog 🐶 变量'response'声明及第一次使用距离6行(最多:3 行)。若需要存储该变量的值,请将其声明为final的(方法调用前声明以避免副作用影响原值)。 Raw Output: /github/workspace/trpc-proto/trpc-proto-http/src/test/java/com/tencent/trpc/proto/http/server/DefaultHttpExecutorTest.java:72:9: warning: 变量'response'声明及第一次使用距离6行(最多:3 行)。若需要存储该变量的值,请将其声明为final的(方法调用前声明以避免副作用影响原值)。 (com.puppycrawl.tools.checkstyle.checks.coding.VariableDeclarationUsageDistanceCheck)

org.mockito.Mockito.when(request.getMethod()).thenReturn(HttpMethod.GET);
org.mockito.Mockito.when(request.getPathInfo()).thenReturn("/trpc.test.rpc.Hello/sayHello");
Expand Down
6 changes: 3 additions & 3 deletions trpc-spring-support/trpc-spring-cloud-gateway/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@
<artifactId>trpc-rpc-support</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<groupId>org.eclipse.jetty.ee10</groupId>
<artifactId>jetty-ee10-webapp</artifactId>
</dependency>
<dependency>
<groupId>com.tencent.trpc</groupId>
Expand All @@ -64,4 +64,4 @@
</dependency>
</dependencies>

</project>
</project>
11 changes: 3 additions & 8 deletions trpc-transport/trpc-transport-http/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,22 +25,17 @@
<artifactId>jetty-server</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<groupId>org.eclipse.jetty.ee10</groupId>
<artifactId>jetty-ee10-servlet</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.http2</groupId>
<artifactId>http2-server</artifactId>
<artifactId>jetty-http2-server</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-alpn-server</artifactId>
</dependency>
<dependency>
<groupId>org.mortbay.jetty.alpn</groupId>
<artifactId>alpn-boot</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-alpn-conscrypt-server</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ protected ServerConnector buildServerConnector(Server server, ProtocolConfig con

// 4. Config the connector of h2
ServerConnector http2Connector = new ServerConnector(server, ssl, alpn, h2,
new HttpConnectionFactory(httpConfig));
new HttpConnectionFactory(httpsConfig));
http2Connector.setHost(config.getIp());
http2Connector.setPort(config.getPort());
http2Connector.setAcceptQueueSize(config.getMaxConns());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@
import com.tencent.trpc.transport.http.ExecutorDispatcher;
import com.tencent.trpc.transport.http.HttpExecutor;
import com.tencent.trpc.transport.http.common.ServletManager;
import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
import org.eclipse.jetty.ee10.servlet.ServletHandler;
import org.eclipse.jetty.ee10.servlet.ServletHolder;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.util.thread.QueuedThreadPool;

/**
Expand Down Expand Up @@ -120,9 +120,10 @@ private ServletContextHandler getServletContextHandler(Server server) {
servletHandler.addServletWithMapping(ExecutorDispatcher.class, "/*");
servletHolder.setAsyncSupported(true);
servletHolder.setInitOrder(1);
ServletContextHandler context =
new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.setServletHandler(servletHandler);
server.setHandler(context);
return context;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Spring Boot BOM compatibility regression

This consumer reproduces the dependency-management order from issue
[#152](https://github.com/trpc-group/trpc-java/issues/152): Spring Boot 3.5.16's BOM precedes
tRPC's BOM. It reuses the transport tests against the installed tRPC artifacts,
covering HTTP/1.1, HTTPS, h2c, h2 with ALPN, request bodies and asynchronous Servlet
responses. All server sockets bind explicitly to `127.0.0.1`.

Run from the repository root with JDK 17 or 21:

```sh
mvn -B -ntp -pl trpc-dependencies/trpc-dependencies-bom,trpc-dependencies/trpc-bom,trpc-transport/trpc-transport-http -am -Dmaven.test.skip=true install
mvn -B -ntp -f trpc-transport/trpc-transport-http/src/test/it/boot-bom-first/pom.xml test
```

To test the released implementation as a negative control, add
`-Dtrpc.version=2.0.5` to the second command. With Spring Boot 3.5.16 this mixes
Jetty 12 core artifacts with Jetty 11 Servlet/HTTP2 artifacts and fails during
server initialization. The fixed snapshot uses Jetty 12 core and EE10 BOMs,
EE10 Servlet coordinates, and the renamed HTTP/2 artifacts.

The JDK 17 and JDK 21 Maven install jobs run this consumer regression with Spring Boot
3.5.16 after installing the tRPC artifacts. Both BOMs manage Jetty 12.0.36.
100 changes: 100 additions & 0 deletions trpc-transport/trpc-transport-http/src/test/it/boot-bom-first/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.tencent.trpc.tests</groupId>
<artifactId>jetty-boot-bom-first</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<trpc.version>2.0.5-SNAPSHOT</trpc.version>
<spring-boot.version>3.5.16</spring-boot.version>
<maven.compiler.release>17</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<!-- Model an application that gives Spring Boot's dependency management priority. -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.tencent.trpc</groupId>
<artifactId>trpc-dependencies-bom</artifactId>
<version>${trpc.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>com.tencent.trpc</groupId>
<artifactId>trpc-transport-http</artifactId>
<version>${trpc.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.core5</groupId>
<artifactId>httpcore5-h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<!-- Exercise the same transport contract with the consumer's resolved dependencies. -->
<testSourceDirectory>${project.basedir}/../../java</testSourceDirectory>
<testResources>
<testResource>
<directory>${project.basedir}/../../resources</directory>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M9</version>
<configuration>
<failIfNoTests>true</failIfNoTests>
</configuration>
</plugin>
</plugins>
</build>
</project>
Loading
Loading