[
https://issues.apache.org/jira/browse/CXF-8097?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17008109#comment-17008109
]
Andriy Redko commented on CXF-8097:
-----------------------------------
Thanks for checking it out, [~carsten.d]! I have done a minor refactorings to
extract the base comparison logic into *OperationResourceInfoComparatorBase* so
the example would look like:
{noformat}
public class QueryResourceInfoComparator extends
OperationResourceInfoComparatorBase implements ResourceComparator {
@Override
public int compare(OperationResourceInfo oper1, OperationResourceInfo
oper2, Message message)
{
// HTTP method
final String httpMethod = HttpUtils.getProtocolHeader(message,
Message.HTTP_REQUEST_METHOD, HttpMethod.POST, true);
// Check if CXF can make a decision
final int cxfResult = compare(oper1, oper2, httpMethod);
if (cxfResult != 0) {
return cxfResult;
}
...
}
}{noformat}
Unfortunately it is going to be available in the next release only (the
documentation will be updated accordingly as well), hopefully in a few weeks
timeframe. The in-place instantiation + delegation is more like a workaround to
address the issue at hand.
Thank you!
> Equal candidates for handling the current request (HEAD / GET)
> --------------------------------------------------------------
>
> Key: CXF-8097
> URL: https://issues.apache.org/jira/browse/CXF-8097
> Project: CXF
> Issue Type: Bug
> Components: JAX-RS
> Affects Versions: 3.3.2, 3.3.3, 3.3.4
> Reporter: Carsten D
> Assignee: Andriy Redko
> Priority: Major
> Attachments: Screenshot 2019-12-17 at 08.44.29.png, cxf-8097-mcve.zip
>
>
> I have just migrated a very outdated Spring backend to Spring 5 and with it
> upgraded CXF to first 3.3.2 and just now 3.3.3. I have a REST service class
> defining two different methods with the same path defined via
> {{javax.ws.rs.Path}} annotation, differentiated by {{javax.ws.rs.HEAD}} and
> {{javax.ws.rs.GET}} annotations. Both methods are annotated with
> {{@Produces(MediaType.APPLICATION_OCTET_STREAM)}}.
> When this method is called I get (redacted):
> {{WARN [JAXRSUtils.compare:129] Both ServiceRestImpl#getFile and
> ServiceRestImpl#getFileAsHeadRequest are equal candidates for handling the
> current request which can lead to unpredictable results}}
> The differentiation works: HEAD requests are handled by the {{@HEAD}}
> annotated method and GET requests by the {{@GET}} annotated one (this has
> always worked). Therefore the warning is false but will severely clutter
> production log output, possibly affect performance.
> Relevant dependencies:
> * Spring framework 5.1.8
> * "org.apache.cxf", "cxf-rt-rs-service-description", "3.3.3"
> * "javax.servlet", "javax.servlet-api", "4.0.1"
> * "javax.ws.rs", "javax.ws.rs-api", "2.0.1"
> I'd appreciate support. May be linked to:
> * CXF-7670
> * CXF-6684
--
This message was sent by Atlassian Jira
(v8.3.4#803005)