It looks like you've encountered a complex issue with OFBiz's AJAX call handling, specifically how the `*SetTimeZoneFromBrowser*` request is failing due to URL pattern mismatches, leading to a *405 error* .
*Issue Breakdown * - The request `*SetTimeZoneFromBrowser*` is defined in ` *common-controller.xml*`, making it globally available. - JavaScript attempts to execute it via a *relative URL*, causing inconsistencies when combined with REST-style URLs. - The `*ControlServlet*` fails to recognize the request format, leading to the 405 error . *Proposed Solution* - Instead of using relative calls, '*a dedicated webapp*' (`common-js`) is suggested for handling these requests, ensuring proper routing. - The webapp would act as a relay, avoiding exposure of `framework/common` and separating theming from functional requests. - Example fix: ```js $.ajax({ url: "/common-js/control/SetTimeZoneFromBrowser", type: "POST", async: false, }); ``` -------------------------------------------------------------- Implementing a *switch-case structure* can help manage different AJAX requests effectively, but it needs additional adjustments to fully resolve the '405 error issue' you described in Apache OFBiz. Below is a 'full implementation strategy' that addresses the problem while ensuring security and proper request routing. --- Suggest Solution: Using a Dedicated WebApp with Dynamic Routing Since the issue arises due to 'incorrect request routing in REST-style URLs', we will: 1. Use a dedicated web app (`commonext`) to handle such AJAX requests. 2. Implement a switch-case structure in JavaScript to dynamically adjust request URLs. 3. Ensure security by managing authentication separately for the web app. --- Step-by-Step Implementation 1. Configure the Dedicated WebApp (`commonext`) Modify `webapp.xml` to set up a new web app that will act as a relay for common requests. ------------------------ xml *<web-app name="commonext" location="commonext" app-bar-display="true"> <security security-constraint="true"/></web-app>* ------------------------ 2. Define Request Handlers in `commonext-controller.xml` Create handler mappings in `commonext-controller.xml` to process requests properly. *---------------------------xml<request-map uri="SetTimeZoneFromBrowser"> <security https-required="true" auth-required="false"/> <event type="service" name="setTimeZoneService" invoke="org.ofbiz.common.SetTimeZone"/> <response name="json" type="json"/></request-map>----------------------------* 3. Update the JavaScript AJAX Calls Modify the AJAX call in JavaScript to ensure requests are directed through `commonext`. *------------------------ jsfunction getRequestUrl(requestType) { switch (requestType) { case "timezone": return "/commonext/control/SetTimeZoneFromBrowser"; case "inventory": return "/commonext/control/GetStockDetails"; case "order": return "/commonext/control/FetchOrderStatus"; default: return "/commonext/control/DefaultHandler"; }}* *$.ajax({ url: getRequestUrl("timezone"), type: "POST", async: false, success: function(response) { console.log("Request successful!", response); }, error: function(error) { console.log("Error in request!", error); }});* ----------------------------------- 4. Address Authentication Issue Since separate web apps maintain independent sessions, use token-based authentication or a cookie-based method. - Option 1: SSO (Single Sign-On) - Implement an OAuth-based authentication system . - Users authenticate once, and tokens are passed across multiple web apps. - Option 2: Secure Cookie-Based Authentication - Generate a security token upon login. - Store the token in a HTTP-only, secure cookie . - Validate the token before processing requests in `commonext`. --- ### *Expected Results * >> AJAX requests will no longer fail due to incorrect REST-style URL handling. >> Requests will be correctly routed via `commonext`, resolving the '405 error'. >> Authentication is properly handled without exposing core framework security. This approach provides a 'scalable and maintainable solution' for handling common OFBiz AJAX requests while ensuring security compliance. with regards Arifa Hashmi On Fri, 2 May 2025 at 13:39, Nicolas Malin <nicolas.ma...@nereide.fr> wrote: > Hi all, > > I'm in front of a particular issue where the fix isn't really easy and > need to share :) . > > I detected a problem with some ajax call did by js script that failed > with error 405 like : > > https://demo-next.ofbiz.apache.org/webtools/control/entity/find/SetTimeZoneFromBrowser > > To reproduce just display the page > https://demo-next.ofbiz.apache.org/webtools/control/entity/find/Party > and analyze network traffic. > > Ok the reason : > > SetTimeZoneFromBrowser is a request define in common-controller.xml, so > available on all component. In js the call is realize by : > ```js > $.ajax({ > url: "SetTimeZoneFromBrowser", > type: "POST", > async: false,... > ``` > So the navigator use the relative url to execute the call. In general > case we have a page like > https://demo-next.ofbiz.apache.org/$component/control/$request so js > script realized their call with > https://demo-next.ofbiz.apache.org/$component/control/$request-js . Like > each request-js are present on common-controller.xml all component that > include it can response. > > With rest url, the uri pattern is more complex and the script js that > generate a relative call like we have upper : > > https://demo-next.ofbiz.apache.org/webtools/control/entity/find/SetTimeZoneFromBrowse > . > The ControlServlet behind failed to retrieve the correct request and > generate a http error 405 > > > How to fix : > After different tries, I propose to remove all relative call and create > a dedicate webapp for that. > ```js > $.ajax({ > url: "/common-js/control/SetTimeZoneFromBrowser", > type: "POST", > async: false,... > ``` > Open a new webapp on commonext to do that and redirect all relative call > to it. > I propose to implement it on commonext because framework/common need to > keep without exposure. Common-theme is dedicate expose theming > information and not a direct relay to common request. So commonext seems > to be the better solution to be a relay for common request manage by the > common-controller. > > The problem with this solution, all webapp are their session separate, > so access to a json request through commonext generate an security issue > if the request have auth enable. We can enable the sso on ofbiz for that > but do we need that for all OFBiz webapp by defaut. We can imagine a > spotted solution to use cookies system like autologin with more > security, only on commonext to be sure to allow the functionality on > many configuration. > > Thanks to take this read time and if you have any sharing on it to found > the better solution. > > Nicolas >