Are you using HA setup ? in which case org.apache. hadoop.gateway.rm.dispatch.RMUIHaDispatch dispatch will be used.
On Thu, Sep 6, 2018 at 2:19 PM Theyaa Matti <theyaama...@gmail.com> wrote: > I created the class as follows: > > package org.apache.knox.gateway.dispatch; > > import javax.servlet.http.HttpServletRequest; > import java.net.URI; > import java.net.URLDecoder; > import org.apache.hadoop.gateway.dispatch.DefaultDispatch; > > /** > * Dispatch which decodes the outgoing URLs (to services). > * This is useful in cases where the url is picked up > * from the query parameter and is already encoded. > * > * @since 1.1.0 > */ > public class URLDecodingDispatch extends DefaultDispatch { > > public URLDecodingDispatch() { > super(); > } > > @Override > public URI getDispatchUrl(final HttpServletRequest request) { > String decoded; > > try { > decoded = URLDecoder.decode(request.getRequestURL().toString(), > "UTF-8" ); > } catch (final Exception e) { > /* fall back in case of exception */ > decoded = request.getRequestURL().toString(); > } > > final StringBuffer str = new StringBuffer(decoded); > final String query = request.getQueryString(); > if ( query != null ) { > str.append('?'); > str.append(query); > } > final URI url = URI.create(str.toString()); > return url; > } > } > > > packaged it into a jar and uploaded it to the knox lib dir. I can see Knox > loading the jar file at start: > resource.FileResource (FileResource.java:checkFileAlias(152)) - ALIAS > abs=/knox/bin/../lib/knox-1.0-SNAPSHOT.jar > can=/knox/lib/knox-1.0-SNAPSHOT.jar > > I modified the service.xml for yarnui as follows. > > <dispatch classname="org.apache.knox.gateway.dispatch.URLDecodingDispatch" > ha-classname="org.apache.hadoop.gateway.rm.dispatch.RMUIHaDispatch"/> > > > > Deleted everything under deployments and restarted knox. > > > I do not see any changes in the behavior and do not see that class being > called. Do you please know what I am missing? > > > Regards, > > > > > > > On Thu, Sep 6, 2018 at 9:38 AM Sandeep Moré <moresand...@gmail.com> wrote: > >> URLDecodingDispatch extends DefaultDispatch so you should be there. >> >> Best, >> Sandeep >> >> On Thu, Sep 6, 2018 at 9:32 AM Theyaa Matti <theyaama...@gmail.com> >> wrote: >> >>> That should be a good idea, but I still have an issue with adding the >>> custom dispatch to the yarnui service.xml. I already have an existing class >>> there <dispatch >>> classname="org.apache.hadoop.gateway.dispatch.DefaultDispatch" >>> ha-classname="org.apache.hadoop.gateway.rm.dispatch.RMUIHaDispatch"/> >>> >>> Should I replace the DefaultDispatch or I can have more than one there? >>> >>> Regards, >>> >>> >>> On Tue, Sep 4, 2018 at 10:14 PM Dhruv Goyal <777.dh...@gmail.com> wrote: >>> >>>> In that case you might have to build the jar yourself or preferably use >>>> your custom dispatch similar to URLDecodingDispatch. >>>> >>>> Regards >>>> Dhruv >>>> >>>> On Wednesday, September 5, 2018, Theyaa Matti <theyaama...@gmail.com> >>>> wrote: >>>> >>>>> Sorry 0.12.0 >>>>> >>>>> On Tue, Sep 4, 2018 at 2:30 PM Theyaa Matti <theyaama...@gmail.com> >>>>> wrote: >>>>> >>>>>> I am using Knox 1.12.0 >>>>>> >>>>>> On Tue, Sep 4, 2018 at 2:28 PM Sandeep Moré <moresand...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> You can try >>>>>>> using "org.apache.knox.gateway.dispatch.URLDecodingDispatch" dispatch in >>>>>>> service.xml ( Knox 1.1.0) >>>>>>> >>>>>>> Best, >>>>>>> Sandeep >>>>>>> >>>>>>> On Tue, Sep 4, 2018 at 2:09 PM Theyaa Matti <theyaama...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> I am having issues with Knox encoding the following URL when >>>>>>>> parsing html content. >>>>>>>> >>>>>>>> /proxy/application_222233323323_0001/stages/stage?id=0&attempt=0 >>>>>>>> >>>>>>>> >>>>>>>> This URL is generated by Yarn to track a running spark job. When >>>>>>>> applying regular rules to the above URL, Knox encodes the URL to: >>>>>>>> >>>>>>>> >>>>>>>> /proxy/application_222233323323 >>>>>>>> _0001/stages/stage?amp%3Battempt=0&id=0 >>>>>>>> >>>>>>>> >>>>>>>> Which makes the URL unusable and leads to a 404. To make the URL >>>>>>>> work I have to remove "amp%3B" and then it works. >>>>>>>> >>>>>>>> >>>>>>>> Below are the filter and the rule I am using for this URL and I >>>>>>>> appreciate your help/comments for a remediation. >>>>>>>> >>>>>>>> >>>>>>>> <filter name="YARNUI/yarn/outbound/apps1"> >>>>>>>> <content type="*/html"> >>>>>>>> <apply path="/proxy/[^']+/stages/stage[^']*" >>>>>>>> rule="YARNUI/yarn/outbound/apps/history3"/> >>>>>>>> </content> >>>>>>>> </filter> >>>>>>>> >>>>>>>> >>>>>>>> <rule dir="OUT" name="YARNUI/yarn/outbound/apps/history3"> >>>>>>>> <match pattern="/proxy/{*}/stages/stage?{**}"/> >>>>>>>> <rewrite >>>>>>>> template="{$frontend[url]}/yarn/proxy/{*}/stages/stage?{**}"/> >>>>>>>> </rule> >>>>>>>> >>>>>>>> >>>>>>>> Thank you for your help. >>>>>>>> >>>>>>>> >>>>>>>>