in gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/impl/xml/XmlFilterReader.java [334:386]
private void processBufferedElement( Level level, UrlRewriteFilterGroupDescriptor config ) throws XPathExpressionException {
for( UrlRewriteFilterPathDescriptor selector : config.getSelectors() ) {
if( selector instanceof UrlRewriteFilterApplyDescriptor ) {
XPathExpression path = (XPathExpression)selector.compiledPath( XPATH_COMPILER );
Object node = path.evaluate( level.scopeNode, XPathConstants.NODE );
if( node != null ) {
UrlRewriteFilterApplyDescriptor apply = (UrlRewriteFilterApplyDescriptor)selector;
if( node instanceof Element ) {
Element element = (Element)node;
String value = element.getTextContent();
value = filterText( extractQName( element ), value, apply.rule() );
element.setTextContent( value );
} else if( node instanceof Text ) {
Text text = (Text)node;
String value = text.getWholeText();
value = filterText( extractQName( text.getParentNode() ), value, apply.rule() );
text.replaceWholeText( value );
} else if( node instanceof Attr ) {
Attr attr = (Attr)node;
String value = attr.getValue();
value = filterAttribute( extractQName( attr.getOwnerElement() ), extractQName( attr ), value, apply.rule() );
attr.setValue( value );
} else {
throw new IllegalArgumentException( RES.unexpectedSelectedNodeType( node ) );
}
}
} else if( selector instanceof UrlRewriteFilterDetectDescriptor) {
XPathExpression path = (XPathExpression)selector.compiledPath( XPATH_COMPILER );
Object node = path.evaluate( level.scopeNode, XPathConstants.NODE );
if( node != null ) {
UrlRewriteFilterDetectDescriptor detect = (UrlRewriteFilterDetectDescriptor)selector;
String value;
if( node instanceof Element ) {
Element element = (Element)node;
value = element.getTextContent();
} else if( node instanceof Text ) {
Text text = (Text)node;
value = text.getWholeText();
} else if( node instanceof Attr ) {
Attr attr = (Attr)node;
value = attr.getValue();
} else {
throw new IllegalArgumentException( RES.unexpectedSelectedNodeType( node ) );
}
if( detect.compiledValue( REGEX_COMPILER ).matcher( value ).matches() ) {
processBufferedElement( level, detect );
}
}
} else {
throw new IllegalArgumentException( RES.unexpectedRewritePathSelector( selector ) );
}
}
}