[ https://issues.apache.org/jira/browse/CXF-6369?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14510572#comment-14510572 ]
iris ding commented on CXF-6369: -------------------------------- The proposed change is in org.apache.cxf.jaxrs.impl.ConfigurationImpl, Two methods need be modified: @Override public boolean isRegistered(Class<?> cls) { for (Object o : getInstances()) { // if (cls.isAssignableFrom(o.getClass())) { if (cls == (o.getClass())) { return true; } } return false; } public void register(Object provider, Map<Class<?>, Integer> contracts) { //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 if (provider.getClass() == Class.class) { provider = createProvider((Class<?>) provider); } Map<Class<?>, Integer> metadata = providers.get(provider); if (metadata == null) { metadata = new HashMap<Class<?>, Integer>(); providers.put(provider, metadata); } for (Class<?> contract : contracts.keySet()) { if (contract.isAssignableFrom(provider.getClass())) { metadata.put(contract, contracts.get(contract)); } } } > 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 > > 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)