There is 1 update.
 
 
XWiki Platform / cid:jira-generated-image-avatar-3d72f7db-26c9-4f70-a92c-8e33e48656c8 XWIKI-25636 Open

The url.standard.hideViewAction property has no effect and url.standard.entityPathPrefix does not replace xwiki.defaultservletpath

 
View issue   ·   Add comment
 

1 update

 
cid:jira-generated-image-avatar-aa0ce16f-7683-4a39-b9a8-4bc0b1d70f23 Changes by Eleni on 02/Nov/26 21:06
 
Description: {{xwiki.properties}} advertises two URL properties as replacements for older {{xwiki.cfg}} ones:
* {{url.standard.hideViewAction}} — "Note that this replaces the old xwiki.showviewaction property in the xwiki.cfg file." ({{{}xwiki.properties.vm:1034-1039{}}}, since 7.2M1)
* {{url.standard.entityPathPrefix}} — "Note that this replaces the old xwiki.defaultservletpath property in the xwiki.cfg file." ({{{}xwiki.properties.vm:1017-1024{}}}, since 5.2M1)

Neither statement is true of the running product.
h2. 1. url.standard.hideViewAction is read by nothing

{{StandardURLConfiguration.isViewActionHidden()}} has no caller in main code. The only occurrences in the whole platform are the interface, {{{}DefaultStandardURLConfiguration{}}},
{{LegacyStandardURLConfiguration}} and two comments in {{{}AbstractEntityResourceReferenceResolver{}}}. A scan of every jar in a shipped {{WEB-INF/lib}} (18.9.0) finds the symbol only in
{{xwiki-platform-url-scheme-standard}} and {{{}xwiki-platform-legacy-url{}}}, i.e. the declaring classes.

Its last caller was removed by 52dfa89f801 (XWIKI-12842, "Improve URL backward-compatibility after introduction of Nested Spaces", 2015-11-20, 7.4), which replaced the conditional
parsing with the unconditional one that is there today. The property has had no effect since.

What actually decides whether {{view}} appears in a generated URL is {{XWikiServletURLFactory.addAction()}} calling {{XWiki.showViewAction()}} ({{{}XWiki.java:7184-7194{}}}), which reads
the {{XWikiPreferences}} field {{showviewaction}} and then {{{}xwiki.cfg{}}}'s {{xwiki.showviewaction}} (default {{{}1{}}}).
h2. 2. url.standard.entityPathPrefix only affects parsing

{{getEntityPathPrefix()}} has exactly one consumer in main code, {{{}StandardStringResourceTypeResolver:60{}}}, which decides whether an incoming path segment introduces an entity path.
Generated URLs come from {{XWiki.getServletPath()}} ({{{}XWiki.java:5688-5699{}}}): {{{}xwiki.servletpath{}}}, falling back to {{xwiki.defaultservletpath}} when the request path does not
start with {{{}/bin{}}}. So the property changes which URLs XWiki {*}accepts{*}, never the ones it *emits* — it does not replace {{{}xwiki.defaultservletpath{}}}.

h2. 3. url.standard.entityPathPrefix is read under another name

  {{LegacyStandardURLConfiguration}} overrides {{DefaultStandardURLConfiguration}} (priority {{900}} in its {{components.txt}}) and ships in every distribution, so it is the
  implementation that runs. Its {{getEntityPathPrefix()}} calls {{super.getWikiPathPrefix()}} rather than {{super.getEntityPathPrefix()}}, so the value it returns comes from
  {{url.standard.multiwiki.wikiPathPrefix}}, with {{xwiki.defaultservletpath}} as its default:

  {code:java}
  String prefix = super.getWikiPathPrefix(this.xwikicfg.getProperty("xwiki.defaultservletpath", "bin"));
  {code}

h2.
Steps to reproduce

On a 18.9.0 standalone distribution, counting the links the home page generates:
{code:java}
  curl -s http://localhost:8080/xwiki/bin/view/Main/WebHome | grep -o '/xwiki/bin/view/' | wc -l
  {code}
* stock configuration:{*}40{*}
* {{url.standard.hideViewAction=true}} in {{xwiki.properties}} + restart: *40* (no change)
* {{xwiki.showviewaction=0}} in {{xwiki.cfg}} + restart: *0* — links become {{{}/xwiki/bin/Sandbox/{}}}, while {{edit}} links correctly keep their action

On the same instance, requesting {{/xwiki/bin/view/Main/}} after each change and a restart:
   * stock configuration: *200*, document {{Main.WebHome}}
   * {{url.standard.entityPathPrefix=zzz}} in {{xwiki.properties}}: *200*, document {{Main.WebHome}} (no change)
   * {{url.standard.multiwiki.wikiPathPrefix=zzz}} in {{xwiki.properties}}: *404*, document {{bin.view.Main.WebHome}} — {{bin}} is no longer recognised as the entity prefix, so every   page URL 404s while {{/xwiki/rest}} still answers