After patching WebLogic 12.2.1.4.0 with the patch set named "Oracle® WLS Patch Set Update 12.2.1.4.240704" we are facing to the following exception:

Caused By: java.lang.NoSuchMethodException: weblogic.websocket.tyrus.TyrusServletWriter.<init>(weblogic.websocket.tyrus.TyrusMuxableWebSocket, weblogic.websocket.tyrus.TyrusServletWriter$CloseListener, boolean)
    at java.lang.Class.getConstructor0(Class.java:3082)
    at java.lang.Class.getDeclaredConstructor(Class.java:2178)
    at org.springframework.web.socket.server.standard.WebLogicRequestUpgradeStrategy$WebLogicServletWriterHelper.<clinit>(WebLogicRequestUpgradeStrategy.java:227)

The init method of the class TyrusServletWriter contains now 4 parameters and not 3 as previously like this: TyrusServletWriter(TyrusMuxableWebSocket socket, ExecutorService executorService, CloseListener closeListener, boolean isProtected)

Our WebSockets created with the annotation @EnableWebSocket are not working anymore.

Thanks in advance for your help.

Comment From: jhoeller

I assume you are using Spring Framework 5.3.x there? It's a shame that WebLogic breaks those signatures in a patch release but we might be able to adapt to that still for our 5.3.38 (which will be the last OSS release!) - we just need to know what kind of ExecutorService is expected there: Can this be null? Or are we supposed to take that executor from somewhere specific?

Fortunately those server-specific WebSocket adapters are phased out in 6.x since a standard upgrade strategy is available as of Jakarta WebSocket 2.1 now. We can only support those server-specific classes on a best-effort basis without any guarantees.

Comment From: snicoll

@legnou1978 we need to know that you're using an OSS supported version. Can you please confirm you're using Spring Framework 5.3?

Comment From: legnou1978

Yes, we are using Spring Framework 5.3.29.

Comment From: legnou1978

Is it possible to have a retro-compatible solution ? I know that you are doing your best but when can we expect to have a solution ?

Thanks for your help.

Comment From: snicoll

@legnou1978 for a start, reading the comment from Juergen should provide some insights. And answering all of his questions would be helpful.

Comment From: legnou1978

I have created a ticket for the Oracle support. This is the first reply:

Indeed, the following classes were changed in the July PSU

weblogic/websocket/tyrus/TyrusServletWriter.class
weblogic/websocket/tyrus/TyrusMuxableWebSocket.class weblogic/websocket/tyrus/TyrusServletFilter They are part of ORACLE_HOME/wlserver/modules/com.oracle.weblogic.websocket.jar Were changed after fixing the bug Bug 31120816 - JAVAX.WEBSOCKET.REMOTEENDPOINT.ASYNC#SENDBINARY() DOES NOT FOLLOW SPEC

The workaround tested by another customer was to copy the ORACLE_HOME/wlserver/modules/com.oracle.weblogic.websocket.jar from a non-patched environment when servers are down, or you can rollback the July patches, copy the jar, then re-install the July patches and replace the jar. Are you using Tyrus in your environment? If yes, what version?
We are discussing now with internal development team to see what they recommend.

Comment From: jhoeller

Since there is no clear documentation on those internal Oracle APIs and apparently no specific intention behind the change, after having worked for a long time as-is, we do not intend to take an action for our 5.3.38 release in August. If specific advice is being given by Oracle to that effect, you could patch Spring's WebLogicRequestUpgradeStrategy class yourself for the time being. The easier solution for Oracle might be to re-introduce the previous constructor side by side with the new constructor.

Comment From: legnou1978

Form Oracle, the executorService is coming from the TyrusContainer. The TyrusContainer can be obtained from the ServletContext as: servletContainer = servletContext.getAttribute(javax.websocket.server.ServerContainer.getClass().getName()); ExecutorService executorService = ((TyrusContainer) servletContainer).getExecutorService();

Comment From: OsvaEC

I hope this is useful to solve the problem:

The same error occurs using Spring Boot in its version: 2.7.18

I tried to use Spring WebSocket separately in Spring Boot in its version less than 5.2, when deploying everything was successful, the problem is that when accessing the socket from a client it needs "Access-Control-Allow-Origin" and is solved with "setAllowedOriginPatterns(*)", but this property is available in its version 5.3 x and when performing the deployment test, it shows the same error "java.lang.NoSuchMethodException: weblogic.websocket.tyrus.TyrusServletWriter.(weblogic.websocket.tyrus.TyrusMuxableWebSocket, weblogic.websocket.tyrus.TyrusServletWriter$CloseListener, boolean)".

Thank you for your help and we are waiting for a solution from you, who are our only hope.

Comment From: bclozel

@OsvaEC Spring Boot 2.7 is out of OSS support and is not meant to be used with Spring Framework 5.2 (which is EOL completely). If you are a customer I would suggest getting in touch with WebLogic support and follow Juergen's advice.

Comment From: OsvaEC

@bclozel I really appreciate your comments. Kind Regards

Comment From: yogregg

@legnou1978 can you please provide a link to the issue you created with Oracle? I am having same issue and would like to follow along with how they respond.

Comment From: piotrs2024

Oracle created patch for this issue:

Patch Details

Patch 36947150: FIX REGRESSION IN 31120816 Last Updated Aug 30, 2024 9:31 AM (Friday)

Product Oracle WebLogic Server Release Oracle WebLogic Server 12.2.1.4.0 Platform Generic Platform