[
https://issues.apache.org/jira/browse/OPENJPA-2605?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jody Grassel resolved OPENJPA-2605.
-----------------------------------
Resolution: Fixed
Fix Version/s: 2.4.1
2.2.3
> 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.2.2, 2.4.0
> Reporter: Jody Grassel
> Assignee: Jody Grassel
> Fix For: 2.2.3, 2.4.1
>
> Attachments: OJ-2605.2.2.x.patch
>
>
> 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)