Hi Carsten,

Thanks for doing that and that does solve the problem I had. You got your
changes committed before me.

I had similar local changes that also included resolving some sonar
warnings and some additional code coverage that I have now proposed as PR
#65 <https://github.com/apache/sling-org-apache-sling-api/pull/65>.

Regards,
Eric


On Sat, Jul 12, 2025 at 6:24 AM Carsten Ziegeler <cziege...@apache.org>
wrote:

> Hi Eric,
>
> I implemented https://issues.apache.org/jira/browse/SLING-12857 which
> should solve your problem.
>
> If you think that this is ok, I can release the new API.
>
> Regards
> Carsten
>
> On 11.07.2025 08:48, Carsten Ziegeler wrote:
> > Thinking about this for a little bit longer :)
> > Maybe the better way is actually to handle it in the wrappers. This
> > would be a single place to fix all of these.
> >
> > Regards
> > Carsten
> >
> > On 11.07.2025 08:17, Carsten Ziegeler wrote:
> >> Hi Eric,
> >>
> >> I think the wrappers are "ok". It is AuthenticationSupport which
> >> should handle null arguments and not wrap them.
> >> We might have a few cases of these here and there. Those which are
> >> covered by unit tests should work as expected, those which are not -
> >> like this one - need to be found and fixed. I think most methods in
> >> the API are annotated with requiring a request or response object to
> >> be passed. AuthenticationSupport seems to be an exception.
> >>
> >> Regards
> >> Carsten
> >>
> >> On 11.07.2025 06:51, Eric Norman wrote:
> >>> Carsten,
> >>>
> >>> What is the expectation regarding null request/response handling with
> >>> the
> >>> javax<->jakarta servlet conversion wrappers?  It doesn't look like the
> >>> JavaxToJakartaResponseWrapper methods are annotated to indicate if
> >>> null is
> >>> allowed for the args and return values or not.
> >>>
> >>> For example, I was trying to migrate my project to the latest
> >>> releases and
> >>> I ran into a scenario where it was using the (o.a.sling.auth.core)
> >>> AuthenticationSupport service in a JettyWebSocketCreator to handle
> >>> security
> >>> for a websocket upgrade request.  The call
> >>> to authSupport.handleSecurity(httpRequest, null) used to work but now
> >>> down
> >>> the call stack it throws a ClassCastException when
> >>> the
> >>>
> org.apache.sling.api.wrappers.JakartaToJavaxResponseWrapper#toJavaxResponse
> >>> creates
> >>> the wrong type of object to wrap the null response arg. The
> >>> ServletResponseWrapper object it created can't be cast to
> >>> HttpServletResponseWrapper.
> >>>
> >>> I was passing a null response argument because the
> >>> JettyServerUpgradeResponse in the JettyWebSocketCreator factory doesn't
> >>> expose the original http response anywhere.
> >>>
> >>> I could workaround the problem by providing a mock response object
> >>> instead
> >>> of null, or can we try to make a null response argument work as it did
> >>> before?
> >>>
> >>> For your reference, the top of the stack trace looked like this:
> >>>
> >>> Caused by: java.lang.ClassCastException: class
> >>> org.apache.felix.http.javaxwrappers.ServletResponseWrapper cannot be
> >>> cast
> >>> to class javax.servlet.http.HttpServletResponse
> >>> (org.apache.felix.http.javaxwrappers.ServletResponseWrapper is in
> >>> unnamed
> >>> module of loader
> >>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader
> @64e60e10;
> >>> javax.servlet.http.HttpServletResponse is in unnamed module of loader
> >>> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader
> @7646c397)
> >>> at
> >>>
> org.apache.sling.api.wrappers.JakartaToJavaxResponseWrapper.toJavaxResponse(JakartaToJavaxResponseWrapper.java:56)
> >>> [org.apache.sling.api:3.0.0]
> >>> at
> >>>
> org.apache.sling.auth.core.impl.AuthenticationHandlerWrapper$HandlerWrapper.extractCredentials(AuthenticationHandlerWrapper.java:64)
> >>> [org.apache.sling.auth.core:2.0.0]
> >>> at
> >>>
> org.apache.sling.auth.core.impl.AuthenticationHandlerHolder.doExtractCredentials(AuthenticationHandlerHolder.java:91)
> >>> [org.apache.sling.auth.core:2.0.0]
> >>> at
> >>>
> org.apache.sling.auth.core.impl.AbstractAuthenticationHandlerHolder.extractCredentials(AbstractAuthenticationHandlerHolder.java:57)
> >>> [org.apache.sling.auth.core:2.0.0]
> >>> at
> >>>
> org.apache.sling.auth.core.impl.SlingAuthenticator.getAuthenticationInfo(SlingAuthenticator.java:756)
> >>> [org.apache.sling.auth.core:2.0.0]
> >>> at
> >>>
> org.apache.sling.auth.core.impl.SlingAuthenticator.doHandleSecurity(SlingAuthenticator.java:513)
> >>> [org.apache.sling.auth.core:2.0.0]
> >>> at
> >>>
> org.apache.sling.auth.core.impl.SlingAuthenticator.handleSecurity(SlingAuthenticator.java:483)
> >>> [org.apache.sling.auth.core:2.0.0]
> >>> ...
> >>>
> >>>
> >>> Regards,
> >>> Eric
> >>>
> >>>
> >>> On Thu, Jun 26, 2025 at 9:49 AM Carsten Ziegeler <cziege...@apache.org
> >
> >>> wrote:
> >>>
> >>>> Some of the modules in the release vote, e.g. engine, servlets post
> >>>> have
> >>>> such API as well - and for all of those I duplicated the API to be
> able
> >>>> to write code using those APIs which does not rely on anything
> >>>> deprecated.
> >>>>
> >>>> The implementation (and same is true for the implementation of the
> API)
> >>>> directly implements the Jakarta variant. The javax variant is usually
> >>>> implemented by using wrappers and then invoking the Jakarta variant.
> >>>> In most cases this is very straight forward, but I agree that its not
> >>>> the nicest.
> >>>>
> >>>> Regards
> >>>> Carsten
> >>>>
> >>>> On 26.06.2025 09:46, Stefan Seifert wrote:
> >>>>> with the release of Sling API 3.0.0 we have deprecated all API
> >>>> interfaces based on the old servlet API, although they are still fully
> >>>> working.
> >>>>>
> >>>>> i suppose most of our other Sling modules' APIs have some reference
> to
> >>>> SlingHttpServletRequest and similar baked in their own API (i'm
> >>>> thinking
> >>>> e.g. of Sling Models, Context-Aware configuration). although still
> >>>> working,
> >>>> they are all now referencing deprecated parts of the API, and should
> >>>> give
> >>>> users the opportunity to switch to latest Jakarta Servlet API.
> >>>>>
> >>>>> does this mean we have to go through all of these modules, deprecated
> >>>> all APIs which are "tainted" with old Servlet API references and
> >>>> create a
> >>>> new parallel interface with Jakarta servlet API and release a new
> major
> >>>> version of the bundle; same as in the Sling API itself? that seems
> >>>> to be
> >>>> quite a lot of work, esp. keeping old and new versions of the
> >>>> interfaces
> >>>> running in parallel.
> >>>>>
> >>>>> maybe it would be helpful to create a wiki page with recommendation
> >>>>> how
> >>>> to create such a dual-faced API in the best-compatible way?
> >>>>>
> >>>>> (most of the models in the correct voting process that are released
> >>>> together with the API 3.0.0 do not have their own API, so we don't
> have
> >>>> much blueprints except the Sling AIP 3.0.0 itself)
> >>>>>
> >>>>> stefan
> >>>>
> >>>> --
> >>>> Carsten Ziegeler
> >>>> Adobe
> >>>> cziege...@apache.org
> >>>>
> >>>>
> >>>
> >>
> >
>
> --
> Carsten Ziegeler
> Adobe
> cziege...@apache.org
>
>

Reply via email to