/** * Copies complete state of Invocation object. * * @return an copy of this instance */ public Invocation copy() { ConstructionInvocation wrapper = new ConstructionInvocation(interceptors, constructor, arguments); wrapper.setAdvisor(this.getAdvisor()); wrapper.currentInterceptor = this.currentInterceptor; wrapper.metadata = this.metadata; return wrapper; }
public void addResponseAttachment(Object key, Object val) { wrapped.addResponseAttachment(key, val); }
public Object[] getArguments() { return wrapped.getArguments(); }
public Advisor getAdvisor() { return wrapped.getAdvisor(); }
public Object invokeNext() throws Throwable { if (interceptors != null && currentInterceptor < interceptors.length) { try { return interceptors[currentInterceptor++].invoke(this); } finally { // so that interceptors like clustering can reinvoke down the chain currentInterceptor--; } } try { return wrapped.invokeNext(); } finally { responseContextInfo = wrapped.getResponseContextInfo(); } }
@Override public Object proceed() throws Exception { try { return delegate.invokeNext(); } catch(Exception e) { throw e; } catch(Error e) { throw (Error) e; } catch(Throwable t) { throw new RuntimeException(t); } } }
public Constructor<?> getConstructor() { return wrapped.getConstructor(); }
public SimpleMetaData getMetaData() { return wrapped.getMetaData(); }
public MetaDataResolver getInstanceResolver() { return wrapped.getInstanceResolver(); }
public Object getResponseAttachment(Object key) { return wrapped.getResponseAttachment(key); }
public Invocation copy() { ConstructionInvocationWrapper invocation = new ConstructionInvocationWrapper((ConstructionInvocation)wrapped.copy(), interceptors); invocation.currentInterceptor = this.currentInterceptor; return invocation; }
private Advisor getAdvisor() { return delegate.getAdvisor(); }
public Object resolve(Invocation invocation, Object tag, Object attr) { Constructor<?> constructor = null; if (invocation instanceof ConstructorInvocation) { constructor = ((ConstructorInvocation)invocation).getConstructor(); } else { constructor = ((ConstructionInvocation)invocation).getConstructor(); } return getConstructorMetaData(constructor, tag, attr); }
public Object getMetaData(Object group, Object attr) { return wrapped.getMetaData(group, attr); }
public <T extends Annotation> T resolveTypedAnnotation(Class<T> annotation) { T val = super.resolveTypedAnnotation(annotation); if (val != null) return val; if (getAdvisor() != null) { val = getAdvisor().resolveTypedAnnotation(constructor, annotation); if (val != null) return val; } return null; } /**
return new ConstructorJoinpoint(((ConstructionInvocation)invocation).getConstructor());
/** * This method resolves metadata based on the context of the invocation. * It iterates through its list of MetaDataResolvers to find out the * value of the metadata desired. * * This list usually is ThreadMetaData, InstanceAdvisor.getMetaData * ClassAdvisor.getMethodMetaData (or field, or constructor) * ClassAdvisor.getDefaultMetaData */ public Object getMetaData(Object group, Object attr) { Object val = super.getMetaData(group, attr); if (val != null) return val; if (getAdvisor() != null) { val = getAdvisor().getConstructorMetaData().resolve(this, group, attr); if (val != null) return val; } if (getAdvisor() != null) { val = getAdvisor().getDefaultMetaData().resolve(this, group, attr); if (val != null) return val; } return null; }