Hi
You are right, thanks for spotting this issue and for your patch
Cheers, Sergey
On 20/04/15 04:17, iris ding wrote:
Hi Sergey,
Let's take a look about the implementation details in
ServiceUnavailableException.getRetryTime():
public Date getRetryTime(Date requestTime)
{
RuntimeDelegate.HeaderDelegate dateDelegate;
String value = getResponse().getHeaderString("Retry-After");
if (value == null)
return null;
try
{
Long interval = Long.valueOf(Long.parseLong(value));
return new Date(requestTime.getTime() + interval.longValue() * 1000L);
}
catch (NumberFormatException dateDelegate)
{
dateDelegate =
RuntimeDelegate.getInstance().createHeaderDelegate(Date.class);
}
return ((Date)dateDelegate.fromString(value));
}
If you pass a Date object to it, it will go into this:
dateDelegate =
RuntimeDelegate.getInstance().createHeaderDelegate(Date.class);
org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl is CXF implementation for
RuntimeDelegate, In this class, you can see it does not register a provider
to handle Date type:
public RuntimeDelegateImpl() {
headerProviders.put(MediaType.class, new MediaTypeHeaderProvider());
headerProviders.put(CacheControl.class, new
CacheControlHeaderProvider());
headerProviders.put(EntityTag.class, new EntityTagHeaderProvider());
headerProviders.put(Cookie.class, new CookieHeaderProvider());
headerProviders.put(NewCookie.class, new NewCookieHeaderProvider());
}
So the NPE occurs and the API call fails.
The fix I proposed here is to add a DateHeaderProvider to handle Date type.
I do not think NPE here is correct. If so, does it mean we do not support
this API( ServiceUnavailableException.getRetryTime()) call at all?
Thanks & Best Regards,
Iris Ding
--
View this message in context:
http://cxf.547215.n5.nabble.com/NPE-when-calling-ServiceUnavailableException-getRetryTime-tp5756231p5756249.html
Sent from the cxf-dev mailing list archive at Nabble.com.