Andy McCright commented on CXF-7638:

[~johndament] My understanding for that case (registering a component with one 
good and one bad interface) is that we should ignore the whole register call - 
and log a message indicating the problem.  I think the spec is taking a hard 
line and saying that if a user specifies the contracts for a given component, 
then it must not contain any contracts not implemented by the component (or a 
superclass of the component).  So the only advantage for specifying contracts 
(that I can see) would be to limit the component - i.e. a component implements 
MBW and MBR, but for a given case, we only want it registered as MBR.

> JAXRS CTS/TCK issue:  register(...) should ignore components when invalid 
> contracts are passed in
> -------------------------------------------------------------------------------------------------
>                 Key: CXF-7638
>                 URL: https://issues.apache.org/jira/browse/CXF-7638
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 3.2.2
>            Reporter: Andy McCright
>            Assignee: Andy McCright
>            Priority: Major
>             Fix For: 3.2.3
> We're seeing some failures when running the JAX-RS 2.1 TCK - particularly 
> around the register method. The javadoc states that the implementation MUST 
> ignore the component if the call to register specifies a contract (interface) 
> that the component does not implement.
> So, for example, suppose somebody calls code like this:
> public class MyProvider implements MessageBodyWriter<MyObject> ...
> Client c = ClientBuilder.newClient();
> c.register(MyProvider.class, ContainerRequestFilter.class); // should ignore
> c.register(new MyProvider, ExceptionMapper.class, MessageBodyReader.class); 
> // should ignore
> Map<Class, int> contractPriorityMap = new HashMap<>();
> contractPriorityMap.put(ClientResponseFilter.class, 20);
> c.register(MyProvider.class, contractPriorityMap); // should ignore
> c.register(new MyProvider.class, contractPriorityMap); // should ignore
> The TCK tests basically check that nothing gets registered when a passed-in 
> contract is not assignable to the provider class.  And scenarios like the 
> four mentioned above are failing.

This message was sent by Atlassian JIRA

Reply via email to