[
https://issues.apache.org/jira/browse/CXF-7647?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dennis Kieselhorst updated CXF-7647:
------------------------------------
Component/s: (was: JAX-WS Runtime)
JAX-RS
> MethodDispatcher may return invalid method for OperationResourceInfo object
> ---------------------------------------------------------------------------
>
> Key: CXF-7647
> URL: https://issues.apache.org/jira/browse/CXF-7647
> Project: CXF
> Issue Type: Bug
> Components: JAX-RS
> Affects Versions: 3.2.2
> Reporter: Martin Basovnik
> Priority: Major
>
> Imagine the following JAX-RS resource classes:
> {code:java}
> public interface VersionedResource<CDTO, UDTO, ID extends RequestParam<UUID>>
> extends Resource<CDTO, ID> {
> Response update(ID idParam, IfMatchHeader ifMatchHeader, UDTO updateDto);
> @Deprecated
> default Response updateByPost(ID idParam, IfMatchHeader ifMatchHeader,
> UDTO updateDto) {
> return update(idParam, ifMatchHeader, updateDto);
> }
> }
> {code}
> {code:java}
> @Path(BASE_PATH + USERS_PATH)
> public interface UserResource extends VersionedResource<UserCreateDto,
> UserUpdateDto, UserIdParam> {
> ...
>
> @PATCH
> @Path(UserId.PATH)
> @Override
> Response update(
> @BeanParam UserIdParam userIdParam,
> @BeanParam IfMatchHeader ifMatchHeader,
> @Valid UserUpdateDto userUpdateDto
> );
> @POST
> @Path(UserId.PATH)
> @Override
> default Response updateByPost(
> @BeanParam UserIdParam userIdParam,
> @BeanParam IfMatchHeader ifMatchHeader,
> @Valid UserUpdateDto userUpdateDto) {
> return VersionedResource.super.updateByPost(userIdParam,
> ifMatchHeader, userUpdateDto);
> }
>
> ...
>
> }
> {code}
> [MethodDispatcher|https://github.com/apache/cxf/blob/master/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/MethodDispatcher.java#L29]
> contains its internal collections in *non-deterministic* order.
> There are two mappings for method {{updateByPost}} and two possible returned
> methods:
> *a)*
> {code:java}
> public default Response UserResource.updateByPost(RequestParam,
> IfMatchHeader, java.lang.Object)
> {code}
> {{RequestParam}} is abstract class which results in
> {{InstantiationException}}
> [later|https://github.com/apache/cxf/blob/cxf-3.1.11/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java#L1054].
> *b)*
> {code:java}
> public default Response UserResource.updateByPost(UserIdParam, IfMatchHeader,
> java.lang.Object)
> {code}
> In this case everything works.
> Is it possible to somehow detect overridden methods and filter them from
> evaluation?
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)