You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "iris ding (JIRA)" <ji...@apache.org> on 2015/04/24 08:54:38 UTC
[jira] [Commented] (CXF-6369)
org.apache.cxf.jaxrs.impl.ConfigurationImpl does not comply with SPEC
[ 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)