git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/branches/common/common-gcore-stubs/1.0@119516 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
3637558618
commit
4c23f0c489
|
@ -1,13 +1,15 @@
|
|||
The gCube System - ${name}
|
||||
----------------------
|
||||
|
||||
This work has been partially supported by the following European projects: DILIGENT (FP6-2003-IST-2), D4Science (FP7-INFRA-2007-1.2.2),
|
||||
D4Science-II (FP7-INFRA-2008-1.2.2), iMarine (FP7-INFRASTRUCTURES-2011-2), and EUBrazilOpenBio (FP7-ICT-2011-EU-Brazil).
|
||||
This work has been partially supported by the following European projects: DILIGENT (FP6-2003-IST-2),
|
||||
D4Science (FP7-INFRA-2007-1.2.2), D4Science-II (FP7-INFRA-2008-1.2.2), iMarine (FP7-INFRASTRUCTURES-2011-2),
|
||||
and EUBrazilOpenBio (FP7-ICT-2011-EU-Brazil), Parthenos (H2020-INFRADEV-1-2014-1), BlueBridge (H2020-EINFRA-2015-1).
|
||||
|
||||
Authors
|
||||
-------
|
||||
|
||||
* Fabio Simeoni (fabio.simeoni@fao.org), FAO of the UN, Italy
|
||||
* Lucio Lelii (lucio.lelii@isti.cnr.it), FAO of the UN, Italy
|
||||
|
||||
Version and Release Date
|
||||
------------------------
|
||||
|
|
|
@ -114,8 +114,8 @@ public class StubFactory<T> implements StubFactoryDSL.AtClause<T> {
|
|||
|
||||
// configure stub for gCube calls
|
||||
registerHandler(provider, target);
|
||||
|
||||
return GenericProxyFactory.getProxy(target.type(), stub);
|
||||
|
||||
return GenericProxyFactory.getProxy(target.type(),endpointAddress, stub);
|
||||
|
||||
} catch (Error e) { //bad stubs/wsdls cause java.lang.Errors
|
||||
|
||||
|
|
|
@ -1,22 +1,21 @@
|
|||
package org.gcube.common.clients.stubs.jaxws.proxies;
|
||||
|
||||
import java.lang.reflect.Proxy;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class GenericProxyFactory {
|
||||
|
||||
private static Map<String, Object> proxyMap = new HashMap<>();
|
||||
|
||||
public static Logger log = LoggerFactory.getLogger(MethodRetriever.class);
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T, I extends T> T getProxy(Class<T> intf,
|
||||
public static <T, I extends T> T getProxy(Class<T> intf, String endpointAddress,
|
||||
final I obj) {
|
||||
if (proxyMap.containsKey(intf.getCanonicalName()))
|
||||
return (T) proxyMap.get(intf.getCanonicalName());
|
||||
T proxy = (T) Proxy.newProxyInstance(obj.getClass().getClassLoader(),
|
||||
new Class[] { intf },
|
||||
new MethodRetriever<I>(obj));
|
||||
proxyMap.put(intf.getCanonicalName(), proxy);
|
||||
log.debug("for interface "+intf.getCanonicalName()+" the proxy class is "+proxy.getClass().getCanonicalName());
|
||||
return proxy;
|
||||
}
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
package org.gcube.common.clients.stubs.jaxws.proxies;
|
||||
|
||||
import java.lang.reflect.InvocationHandler;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import org.gcube.common.authorization.library.provider.CalledMethodProvider;
|
||||
|
@ -18,10 +19,16 @@ public class MethodRetriever<T> implements InvocationHandler{
|
|||
}
|
||||
|
||||
public Object invoke(Object proxy, Method method,
|
||||
Object[] args) throws Throwable {
|
||||
Object[] args) throws Throwable{
|
||||
CalledMethodProvider.instance.set(method.getName());
|
||||
try{
|
||||
return method.invoke(service, args);
|
||||
}catch(IllegalAccessException | IllegalArgumentException proxyEx){
|
||||
log.error("error invoking method "+method.getName()+" in service "+service.getClass().getCanonicalName()+" using proxy ",proxyEx);
|
||||
throw new RuntimeException(proxyEx);
|
||||
}catch(InvocationTargetException ite){
|
||||
log.error("error invoking method "+method.getName()+" in service "+service.getClass().getCanonicalName()+" using proxy ",ite);
|
||||
throw ite.getCause();
|
||||
}finally{
|
||||
CalledMethodProvider.instance.reset();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue