1313 */
1414package feign ;
1515
16- import feign .template .UriUtils ;
16+ import static feign .Util .checkArgument ;
17+ import static feign .Util .checkNotNull ;
1718import java .lang .reflect .InvocationHandler ;
1819import java .lang .reflect .Method ;
1920import java .lang .reflect .Proxy ;
2223import feign .InvocationHandlerFactory .MethodHandler ;
2324import feign .Param .Expander ;
2425import feign .Request .Options ;
25- import feign .codec .Decoder ;
26- import feign .codec .EncodeException ;
27- import feign .codec .Encoder ;
28- import feign .codec .ErrorDecoder ;
29- import static feign .Util .checkArgument ;
30- import static feign .Util .checkNotNull ;
26+ import feign .codec .*;
27+ import feign .template .UriUtils ;
3128
3229public class ReflectiveFeign extends Feign {
3330
@@ -150,25 +147,26 @@ static final class ParseHandlersByName {
150147 this .decoder = checkNotNull (decoder , "decoder" );
151148 }
152149
153- public Map <String , MethodHandler > apply (Target key ) {
154- List <MethodMetadata > metadata = contract .parseAndValidateMetadata (key .type ());
150+ public Map <String , MethodHandler > apply (Target target ) {
151+ List <MethodMetadata > metadata = contract .parseAndValidateMetadata (target .type ());
155152 Map <String , MethodHandler > result = new LinkedHashMap <String , MethodHandler >();
156153 for (MethodMetadata md : metadata ) {
157154 BuildTemplateByResolvingArgs buildTemplate ;
158155 if (!md .formParams ().isEmpty () && md .template ().bodyTemplate () == null ) {
159- buildTemplate = new BuildFormEncodedTemplateFromArgs (md , encoder , queryMapEncoder );
156+ buildTemplate =
157+ new BuildFormEncodedTemplateFromArgs (md , encoder , queryMapEncoder , target );
160158 } else if (md .bodyIndex () != null ) {
161- buildTemplate = new BuildEncodedTemplateFromArgs (md , encoder , queryMapEncoder );
159+ buildTemplate = new BuildEncodedTemplateFromArgs (md , encoder , queryMapEncoder , target );
162160 } else {
163- buildTemplate = new BuildTemplateByResolvingArgs (md , queryMapEncoder );
161+ buildTemplate = new BuildTemplateByResolvingArgs (md , queryMapEncoder , target );
164162 }
165163 if (md .isIgnored ()) {
166164 result .put (md .configKey (), args -> {
167165 throw new IllegalStateException (md .configKey () + " is not a method handled by feign" );
168166 });
169167 } else {
170168 result .put (md .configKey (),
171- factory .create (key , md , buildTemplate , options , decoder , errorDecoder ));
169+ factory .create (target , md , buildTemplate , options , decoder , errorDecoder ));
172170 }
173171 }
174172 return result ;
@@ -180,10 +178,13 @@ private static class BuildTemplateByResolvingArgs implements RequestTemplate.Fac
180178 private final QueryMapEncoder queryMapEncoder ;
181179
182180 protected final MethodMetadata metadata ;
181+ protected final Target <?> target ;
183182 private final Map <Integer , Expander > indexToExpander = new LinkedHashMap <Integer , Expander >();
184183
185- private BuildTemplateByResolvingArgs (MethodMetadata metadata , QueryMapEncoder queryMapEncoder ) {
184+ private BuildTemplateByResolvingArgs (MethodMetadata metadata , QueryMapEncoder queryMapEncoder ,
185+ Target target ) {
186186 this .metadata = metadata ;
187+ this .target = target ;
187188 this .queryMapEncoder = queryMapEncoder ;
188189 if (metadata .indexToExpander () != null ) {
189190 indexToExpander .putAll (metadata .indexToExpander ());
@@ -208,6 +209,7 @@ private BuildTemplateByResolvingArgs(MethodMetadata metadata, QueryMapEncoder qu
208209 @ Override
209210 public RequestTemplate create (Object [] argv ) {
210211 RequestTemplate mutable = RequestTemplate .from (metadata .template ());
212+ mutable .feignTarget (target );
211213 if (metadata .urlIndex () != null ) {
212214 int urlIndex = metadata .urlIndex ();
213215 checkArgument (argv [urlIndex ] != null , "URI parameter %s was null" , urlIndex );
@@ -332,8 +334,8 @@ private static class BuildFormEncodedTemplateFromArgs extends BuildTemplateByRes
332334 private final Encoder encoder ;
333335
334336 private BuildFormEncodedTemplateFromArgs (MethodMetadata metadata , Encoder encoder ,
335- QueryMapEncoder queryMapEncoder ) {
336- super (metadata , queryMapEncoder );
337+ QueryMapEncoder queryMapEncoder , Target target ) {
338+ super (metadata , queryMapEncoder , target );
337339 this .encoder = encoder ;
338340 }
339341
@@ -363,8 +365,8 @@ private static class BuildEncodedTemplateFromArgs extends BuildTemplateByResolvi
363365 private final Encoder encoder ;
364366
365367 private BuildEncodedTemplateFromArgs (MethodMetadata metadata , Encoder encoder ,
366- QueryMapEncoder queryMapEncoder ) {
367- super (metadata , queryMapEncoder );
368+ QueryMapEncoder queryMapEncoder , Target target ) {
369+ super (metadata , queryMapEncoder , target );
368370 this .encoder = encoder ;
369371 }
370372
0 commit comments