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)

Reply via email to