Michel Erard pisze:
Hello,

Im using cocoon 2.2 and have currently some problems, if there is a proxy in front of my application.

The application is deployed in a jetty and in my environement I'm usinga a apache httpd as proxy in front of the application with this configuraion:

<Location /APP_NAME/cocoon-forms-impl>
   ProxyPass        http://localhost:8888/APP_NAME/cocoon-forms-impl
   ProxyPassReverse http://localhost:8888/APP_NAME/cocoon-forms-impl
   ProxyPassReverseCookiePath / /
   Allow from all
</Location>

<Location /APP_NAME/cocoon-ajax-impl>
   ProxyPass        http://localhost:8888/APP_NAME/cocoon-ajax-impl
   ProxyPassReverse http://localhost:8888/APP_NAME/cocoon-ajax-impl
   ProxyPassReverseCookiePath / /
   Allow from all
</Location>

<Location /APP_NAME>
   ProxyPass        http://localhost:8888/APP_NAME
   ProxyPassReverse http://localhost:8888/APP_NAME
   ProxyPassReverseCookiePath / /
   Allow from all
</Location>

This works fine. In my sitemap I make the forms transformation like this:

<map:transform src="stylesheets/forms-style.xsl">
<map:parameter name="dojo-resources" value="{servlet:ajax:/resource/external/dojo}" /> <map:parameter name="forms-resources" value="{servlet:forms:/resource/external/forms}" />
</map:transform>

But know my Problem. In the productive installation I've another Proxy in front of the machine. The users are using an url like this:

https://www.HOST_NAME.com/LOGIN_PATH/APP_NAME/[...]

And now the dojo an forms resources aren't found any more. Because cocoon works internally with the webapp's name '/APP_NAME/cocoon-forms/...' and this url https://www.HOST_NAME.com/APP_NAME/cocoon-forms/.. is blocked by this WEB-Entry-Server.

My Solution for this problem was to set the dojo and forms resources relative:

<map:transform src="stylesheets/forms-style.xsl">
<map:parameter name="dojo-resources" value="../cocoon-ajax-impl/resource/external/dojo" /> <map:parameter name="forms-resources" value="../corix-forms-impl/resource/external/forms" />
</map:transform>

so the links to the javascripts in the generated html is now: https://www.HOST_NAME.com/LOGIN_PATH/APP_NAME/main/../cocoon-forms/[...]

this solution works nearly. The dojo.js for example is found by the browser. But when he makes a request to

/APP_NAME/cocoon-ajax-impl/resource/external/dojo/__package__.js

I'm getting an error in the jetty. So the requests passes correctly through all the proxys, but cannot be processed by cocoon:

Your problem comes from the mismatch of URLs and this can't be fixed by relative URLs or other tricks like that. There are many cases where Cocoon uses absolute URLs (like one you mention above) because only such make sense. They are constructed using following pattern:

  /[DispatcherServletMountPath]/[SitemapServletMountPath]/[TheRest]

Where [DispatcherServletMountPath] is being configured in web.xml file from myCocoonWebapp/src/main/webapp/WEB-INF (assuming myCocoonWebapp has been created using archetype). The declaration looks following:

  <servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

The [SitemapServletMountPath] part comes from SitemapServlet bean configuration (mountPath) and usually contains block's name. The rest is actual path relative to block's context.

If you want to prefix all absolute URLs with LOGIN_PATH then I would advise to change configuration of DispatcherServlet to:

  <servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/LOGIN_PATH/*</url-pattern>
  </servlet-mapping>

And configuration of proxy, accordingly. General advice is to always have 1-1 mapping between absolute paths. This way you can be sure that you don't run into some nasty problems.

I hope that helps you.

--
Best regards,
Grzegorz Kossakowski

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to