in gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/api/UrlRewriteProcessor.java [125:178]
public Template rewrite( Resolver resolver, Template inputUri, Direction direction, String ruleName ) {
Template outputUri = inputUri;
String serviceRole = null;
if (resolver != null) {
List<String> serviceRoles = resolver.resolve("service.role");
if ( serviceRoles != null && !serviceRoles.isEmpty() ) {
serviceRole = serviceRoles.get(0);
}
}
UrlRewriteStepProcessorHolder stepHolder = null;
String effectiveRuleName = null;
if( ruleName == null || "*".equals( ruleName ) ) {
ruleName = null; // Used for logging later.
Matcher<UrlRewriteRuleProcessorHolder>.Match match = null;
switch( direction ) {
case IN:
match = inbound.match( outputUri, serviceRole );
break;
case OUT:
match = outbound.match( outputUri, serviceRole );
break;
}
if( match != null ) {
stepHolder = match.getValue();
effectiveRuleName = match.getValue().getRuleName();
}
} else if( !ruleName.isEmpty() ) {
stepHolder = rules.get( ruleName );
effectiveRuleName = ruleName;
}
if( stepHolder != null ) {
UrlRewriteContext context = new UrlRewriteContextImpl( environment, resolver, functions, direction, inputUri );
try {
UrlRewriteStepStatus stepStatus = stepHolder.process( context );
if( UrlRewriteStepStatus.SUCCESS == stepStatus ) {
outputUri = context.getCurrentUrl();
if( ruleName == null ) {
LOG.rewroteUrlViaImplicitRule( inputUri, direction, effectiveRuleName, outputUri );
} else {
LOG.rewroteUrlViaExplicitRule( inputUri, direction, effectiveRuleName, outputUri );
}
} else {
LOG.failedToRewriteUrl( inputUri, direction, effectiveRuleName, stepStatus );
outputUri = null;
}
} catch( Exception e ) {
LOG.failedToRewriteUrlDueToException( inputUri, direction, effectiveRuleName, e );
outputUri = null;
}
} else {
LOG.noRuleMatchingUrl( inputUri, direction );
}
return outputUri;
}