[ 
https://issues.apache.org/jira/browse/CXF-6369?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14513411#comment-14513411
 ] 

iris ding commented on CXF-6369:
--------------------------------

HI Sergey,

For the 2nd change:
//need to check whether existed already, If so, remove the old entry before 
hand -start here
Object duplicate = null;
for (Object o : providers.keySet())
{
if (o.getClass() == provider.getClass())
{ duplicate = o; break; }
}
providers.remove(duplicate);
////need to check whether existed already, If so, remove the old entry before 
hand – end here

The reason here is if we have a call like below:
config.register(GzipInterceptor.class, 6500);
config.register(GzipInterceptor.class, 7000);
Then finally GzipInterceptor.class, 7000 should take effect.  In other words, 
the priority should be overridden by the afterwards provider registration. 
if we simply check whether the given provider has already been registered and 
reject the registration the above usage scenario can not be satisfied.



> org.apache.cxf.jaxrs.impl.ConfigurationImpl does not comply with SPEC
> ---------------------------------------------------------------------
>
>                 Key: CXF-6369
>                 URL: https://issues.apache.org/jira/browse/CXF-6369
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 3.0.3, 3.0.4, 2.7.15
>            Reporter: iris ding
>            Assignee: Sergey Beryozkin
>             Fix For: 3.1.0, 3.0.5
>
>
> According to 
> http://docs.oracle.com/javaee/7/api/javax/ws/rs/core/Configurable.html
> As a general rule, for each JAX-RS component class there can be at most one 
> registration — class-based or instance-based — configured at any given 
> moment. Implementations MUST reject any attempts to configure a new 
> registration for a provider class that has been already registered in the 
> given configurable context earlier. Implementations SHOULD also raise a 
> warning to inform the user about the rejected component registration.
> For example:
>  config.register(GzipInterceptor.class, WriterInterceptor.class);
>  config.register(GzipInterceptor.class);       // Rejected by runtime.
>  config.register(new GzipInterceptor());       // Rejected by runtime.
>  config.register(GzipInterceptor.class, 6500); // Rejected by runtime.
> So we need to check whether the same class's instances have already been put 
> into config before hand.
> Also to check whether the class/instance has been registered via  public 
> boolean isRegistered(Class<?> cls) , we need to check whether the two class 
> is the same other than just isAssignableFrom.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to