diff --git a/client/src/main/java/org/asynchttpclient/netty/handler/WebSocketHandler.java b/client/src/main/java/org/asynchttpclient/netty/handler/WebSocketHandler.java index faf3beebf..2c7cb3b4f 100755 --- a/client/src/main/java/org/asynchttpclient/netty/handler/WebSocketHandler.java +++ b/client/src/main/java/org/asynchttpclient/netty/handler/WebSocketHandler.java @@ -80,13 +80,14 @@ private void upgrade(Channel channel, NettyResponseFuture future, WebSocketUp // if it comes in the same frame as the HTTP Upgrade response Channels.setAttribute(channel, future); - handler.setWebSocket(new NettyWebSocket(channel, responseHeaders)); + final NettyWebSocket webSocket = new NettyWebSocket(channel, responseHeaders); + handler.setWebSocket(webSocket); channelManager.upgradePipelineForWebSockets(channel.pipeline()); // We don't need to synchronize as replacing the "ws-decoder" will // process using the same thread. try { - handler.onOpen(); + handler.onOpen(webSocket); } catch (Exception ex) { logger.warn("onSuccess unexpected exception", ex); } diff --git a/client/src/main/java/org/asynchttpclient/ws/WebSocketUpgradeHandler.java b/client/src/main/java/org/asynchttpclient/ws/WebSocketUpgradeHandler.java index 6e1e5546d..b4c6e1a44 100644 --- a/client/src/main/java/org/asynchttpclient/ws/WebSocketUpgradeHandler.java +++ b/client/src/main/java/org/asynchttpclient/ws/WebSocketUpgradeHandler.java @@ -20,6 +20,7 @@ import org.asynchttpclient.HttpResponseBodyPart; import org.asynchttpclient.HttpResponseStatus; import org.asynchttpclient.netty.ws.NettyWebSocket; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; @@ -32,7 +33,7 @@ public class WebSocketUpgradeHandler implements AsyncHandler { private final List listeners; - private NettyWebSocket webSocket; + private @Nullable NettyWebSocket webSocket; public WebSocketUpgradeHandler(List listeners) { this.listeners = listeners; @@ -78,7 +79,7 @@ public final State onBodyPartReceived(HttpResponseBodyPart bodyPart) throws Exce } @Override - public final NettyWebSocket onCompleted() throws Exception { + public final @Nullable NettyWebSocket onCompleted() throws Exception { onCompleted0(); return webSocket; } @@ -99,7 +100,11 @@ public final void setWebSocket(NettyWebSocket webSocket) { setWebSocket0(webSocket); } - public final void onOpen() { + /** + * @param webSocket this parameter is the same object as the field webSocket, + * but guaranteed to be not null. This is done to satisfy NullAway requirements + */ + public final void onOpen(NettyWebSocket webSocket) { onOpen0(); for (WebSocketListener listener : listeners) { webSocket.addWebSocketListener(listener); diff --git a/client/src/test/java/org/asynchttpclient/PerRequestRelative302Test.java b/client/src/test/java/org/asynchttpclient/PerRequestRelative302Test.java index e2f9f644f..4c119779c 100644 --- a/client/src/test/java/org/asynchttpclient/PerRequestRelative302Test.java +++ b/client/src/test/java/org/asynchttpclient/PerRequestRelative302Test.java @@ -80,15 +80,15 @@ public void runAllSequentiallyBecauseNotThreadSafe() throws Exception { public void redirected302Test() throws Exception { isSet.getAndSet(false); try (AsyncHttpClient c = asyncHttpClient()) { - Response response = c.prepareGet(getTargetUrl()).setFollowRedirect(true).setHeader("X-redirect", "https://www.microsoft.com/").execute().get(); + Response response = c.prepareGet(getTargetUrl()).setFollowRedirect(true).setHeader("X-redirect", "https://www.google.com/").execute().get(); assertNotNull(response); - assertEquals(response.getStatusCode(), 200); + assertEquals(200, response.getStatusCode()); - String anyMicrosoftPage = "https://www.microsoft.com[^:]*:443"; + String anyGooglePage = "https://www.google.com[^:]*:443"; String baseUrl = getBaseUrl(response.getUri()); - assertTrue(baseUrl.matches(anyMicrosoftPage), "response does not show redirection to " + anyMicrosoftPage); + assertTrue(baseUrl.matches(anyGooglePage), "response does not show redirection to " + anyGooglePage); } } diff --git a/pom.xml b/pom.xml index 4546845d6..06beec486 100644 --- a/pom.xml +++ b/pom.xml @@ -233,7 +233,7 @@ -Xep:NullOptional:ERROR -XepExcludedPaths:.*/src/test/java/.* -XepOpt:NullAway:AnnotatedPackages=org.asynchttpclient - -XepOpt:NullAway:UnannotatedSubPackages=org.asynchttpclient.netty,org.asynchttpclient.request,org.asynchttpclient.ws + -XepOpt:NullAway:UnannotatedSubPackages=org.asynchttpclient.netty,org.asynchttpclient.request -XepOpt:NullAway:AcknowledgeRestrictiveAnnotations=true -Xep:NullAway:ERROR