[
https://jira.jboss.org/jira/browse/JBSEAM-4020?page=com.atlassian.jira.pl...
]
Christian Bauer commented on JBSEAM-4020:
-----------------------------------------
This works OK if the StringProvider instance is a POJO but it can not be a Seam component.
The ResteasyProviderFactory SPI only offers two methods to register a StringConverter, one
takes a class and calls newInstance() and the other one expects an instance.
However, the version that expects an instance then inspects the interfaces to find the
generic type arguments, so that it can register the converter properly for that target
type:
public void addStringConverter(StringConverter provider)
{
providers.put(provider.getClass(), provider);
PropertyInjectorImpl injector = new PropertyInjectorImpl(provider.getClass(),
this);
injector.inject(provider);
Type[] intfs = provider.getClass().getGenericInterfaces();
This doesn't work if the provider instance is a Seam component, hence a Javassist
proxy:
GENERIC INTERFACES: interface org.jboss.seam.Instance
GENERIC INTERFACES: interface org.jboss.seam.intercept.Proxy
GENERIC INTERFACES: interface javax.servlet.http.HttpSessionActivationListener
GENERIC INTERFACES: interface org.jboss.seam.core.Mutable
GENERIC INTERFACES: interface javassist.util.proxy.ProxyObject
The knowledge of the real generic interface and the target type of a StringConverter is
only available outside of Resteasy, to Seam when we inspect the component metadata. So the
ResteasyProviderFactory SPI needs an additional method:
public void addStringConverter(StringConverter provider, Class convertedType)
...
stringConverters.put(convertedType, provider);
}
Custom RESTEasy StringConverter provider classes need special
registration
--------------------------------------------------------------------------
Key: JBSEAM-4020
URL:
https://jira.jboss.org/jira/browse/JBSEAM-4020
Project: Seam
Issue Type: Task
Components: WS
Reporter: Christian Bauer
Assignee: Christian Bauer
RESTEasy offers a custom StringConverter provider extension. Unlike normal providers, the
SPI in RESTEasy for registration of these providers is different:
if (StringConverter.class.isAssignableFrom(providerClass)) {
providerFactory.addStringConverter(providerClass);
} else {
providerFactory.registerProvider(providerClass);
}
This needs to be fixed in RestEasyDispatcher.java
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira