Path: csiph.com!usenet.pasdenom.info!gegeweb.org!eternal-september.org!feeder.eternal-september.org!mx02.eternal-september.org!.POSTED!not-for-mail From: Steven Simpson Newsgroups: comp.lang.java.programmer Subject: Re: Dynamic proxy causes downstream code to not find annotations. How to solve? Date: Tue, 17 Mar 2015 14:24:24 +0000 Organization: A noiseless patient Spider Lines: 59 Message-ID: References: <9a31318b-4de7-42cb-9d29-202a973ae557@googlegroups.com> <4f429c73-7025-44e2-aadb-f971fbeba006@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Injection-Info: mx02.eternal-september.org; posting-host="4972994621fb3afe08c00cbb5b80c57b"; logging-data="28757"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19LtAVEOH/2hR1WpYcgB/dicIfmjyoi1ew=" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 In-Reply-To: <4f429c73-7025-44e2-aadb-f971fbeba006@googlegroups.com> Cancel-Lock: sha1:0BckQqmCRGlneNyIxuBrWvkf8Z4= Xref: csiph.com comp.lang.java.programmer:31328 On 16/03/15 14:44, rupertlssmith@googlemail.com wrote: > class Test implements ITest { > public Integer someMethod() { > return 1; > } > } > > interface ITest { > T someMethod(); > } > > And got this output: > > public java.lang.Integer org.mygovscot.stars.client.Test.someMethod() > public java.lang.Object org.mygovscot.stars.client.Test.someMethod() > (... other methods on Object) (I'm confused about your problem now, because I thought you didn't have anything explicitly implementing your interface...) In the invocation handler, can you not look up the method on your target object? The simple way would be: obj.getClass().getMethod(method.getName(), method.getParameterTypes()) However, it might not find a method if your interface declares: void myMethod(String s); ...while the class declares: void myMethod(T s); // in MyClass ...and the instance is a MyClass. So, more generally, can you do your own look-up along these lines?: private static Method findMethod(Class clazz, String name, Class[] types) throws NoSuchMethodException { next_method: for (Method meth : clazz.getMethods()) { if (!meth.getName().equals(name)) continue; if (meth.getParameterCount() != types.length) continue; Class[] params = meth.getParameterTypes(); for (int i = 0; i < types.length; i++) { if (!params[i].isAssignableFrom(types[i])) continue next_method; } return meth; } throw new NoSuchMethodException(); } -- ss at comp dot lancs dot ac dot uk