Jody Grassel created OPENJPA-2605:
-------------------------------------
Summary: DelegatingConnection.unwrap() doesn't adhere to
java.sql.Wrapper.unwrap() contract
Key: OPENJPA-2605
URL: https://issues.apache.org/jira/browse/OPENJPA-2605
Project: OpenJPA
Issue Type: Bug
Components: lib
Affects Versions: 2.4.0, 2.2.2
Reporter: Jody Grassel
Assignee: Jody Grassel
The implementation of DelegatingConnection.unwrap() checks if the delegate is
assignable to the class type provided in the unwrap argument() and returns null
if it is not. The negative result is not consistent with the unwrap() contract
as specified by the Wrapper.unwrap() contract, as specified:
"Returns an object that implements the given interface to allow access to
non-standard methods, or standard methods not exposed by the proxy. If the
receiver implements the interface then the result is the receiver or a proxy
for the receiver. If the receiver is a wrapper and the wrapped object
implements the interface then the result is the wrapped object or a proxy for
the wrapped object. Otherwise return the the result of calling unwrap
recursively on the wrapped object or a proxy for that result. If the receiver
is not a wrapper and does not implement the interface, then an SQLException is
thrown."
Since DelegatingConnection is effectively a wrapper, it should check if the
delegate is assignable to the type specified by the argument and return the
delegate if it is, otherwise it should call the delegate's unwrap() method with
the type argument provided as the argument to the underlying unwrap() call.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)