This is an automated email from the ASF dual-hosted git repository.

Lukas-Finster pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 306cbf34ed Implemented: rest-api ServiceRequestHandler now uses the 
locale set via Accept-Language header of the request (OFBIZ-12598)
306cbf34ed is described below

commit 306cbf34ed5c370a097412e08f7d8e8cc6866b07
Author: Lukas Finster <[email protected]>
AuthorDate: Thu Aug 13 11:40:40 2026 +0200

    Implemented: rest-api ServiceRequestHandler now uses the locale set via
    Accept-Language header of the request (OFBIZ-12598)
---
 .../rest-api/api/exampleApiDefinition.rest.xml     |  6 ++++++
 framework/rest-api/servicedef/services.xml         |  5 +++++
 .../ofbiz/ws/rs/process/ServiceRequestHandler.java |  5 ++++-
 .../ofbiz/ws/rs/test/RestTestHttpRequest.java      | 25 ++++++++++++++++++++++
 .../apache/ofbiz/ws/rs/test/RestTestServices.java  | 16 ++++++++++++++
 5 files changed, 56 insertions(+), 1 deletion(-)

diff --git a/framework/rest-api/api/exampleApiDefinition.rest.xml 
b/framework/rest-api/api/exampleApiDefinition.rest.xml
index dc110db901..bdac7a3412 100644
--- a/framework/rest-api/api/exampleApiDefinition.rest.xml
+++ b/framework/rest-api/api/exampleApiDefinition.rest.xml
@@ -53,6 +53,12 @@ under the License.
         </operation>
     </resource>
 
+    <resource name="orders" path="/useLocaleSetInRequestHeader">
+        <operation verb="post" consumes="application/json" 
produces="application/json">
+            <service name="useLocaleSetInRequestHeader"/>
+        </operation>
+    </resource>
+
     <mapping name="RestOrderExample" 
className="org.apache.ofbiz.ws.rs.examples.RestOrderExample"/>
 
 </api>
\ No newline at end of file
diff --git a/framework/rest-api/servicedef/services.xml 
b/framework/rest-api/servicedef/services.xml
index e83b3966ee..344835ff1d 100644
--- a/framework/rest-api/servicedef/services.xml
+++ b/framework/rest-api/servicedef/services.xml
@@ -65,4 +65,9 @@ under the License.
         <attribute name="x-custom-header" type="String" mode="INOUT" 
optional="true"/>
     </service>
 
+    <service name="useLocaleSetInRequestHeader" engine="java"
+            location="org.apache.ofbiz.ws.rs.test.RestTestServices" 
invoke="useLocaleSetInRequestHeader">
+        <description>TestService that returns its locale</description>
+        <attribute name="localeAsString" type="String" mode="OUT" 
optional="false"/>
+    </service>
 </services>
diff --git 
a/framework/rest-api/src/main/java/org/apache/ofbiz/ws/rs/process/ServiceRequestHandler.java
 
b/framework/rest-api/src/main/java/org/apache/ofbiz/ws/rs/process/ServiceRequestHandler.java
index a2e4002604..235b257e46 100644
--- 
a/framework/rest-api/src/main/java/org/apache/ofbiz/ws/rs/process/ServiceRequestHandler.java
+++ 
b/framework/rest-api/src/main/java/org/apache/ofbiz/ws/rs/process/ServiceRequestHandler.java
@@ -18,6 +18,7 @@
  
*******************************************************************************/
 package org.apache.ofbiz.ws.rs.process;
 
+import java.util.Locale;
 import java.util.Map;
 
 import org.apache.ofbiz.base.util.Debug;
@@ -91,7 +92,9 @@ public final class ServiceRequestHandler extends 
RestRequestHandler {
         }
         ModelService svc = getModelService(dispatcher.getDispatchContext());
         GenericValue userLogin = (GenericValue) 
getHttpRequest().getAttribute("userLogin");
+        Locale locale = getHttpRequest().getLocale();
         serviceContext.put("userLogin", userLogin);
+        serviceContext.put("locale", locale);
         Map<String, Object> result = null;
         try {
             result = dispatcher.runSync(service, serviceContext);
@@ -104,7 +107,7 @@ public final class ServiceRequestHandler extends 
RestRequestHandler {
             Map<String, Object> responseData = 
ServiceRequestWorker.extractResponseData(svc, result);
             return RestApiUtil.success((String) 
result.get(ModelService.SUCCESS_MESSAGE), responseData);
         }
-        return RestApiUtil.buildErrorFromServiceResult(service, result, 
getHttpRequest().getLocale());
+        return RestApiUtil.buildErrorFromServiceResult(service, result, 
locale);
     }
 
     private ModelService getModelService(DispatchContext dispatchContext) {
diff --git 
a/framework/rest-api/src/test/java/org/apache/ofbiz/ws/rs/test/RestTestHttpRequest.java
 
b/framework/rest-api/src/test/java/org/apache/ofbiz/ws/rs/test/RestTestHttpRequest.java
index 85e5c230da..000a2539fc 100644
--- 
a/framework/rest-api/src/test/java/org/apache/ofbiz/ws/rs/test/RestTestHttpRequest.java
+++ 
b/framework/rest-api/src/test/java/org/apache/ofbiz/ws/rs/test/RestTestHttpRequest.java
@@ -147,4 +147,29 @@ class RestTestHttpRequest implements JupiterTestHelper {
 
         assertEquals("Foo", customHeaderValue);
     }
+
+    @Test
+    void testUseLocaleSetInRequestHeader() throws Exception {
+        HttpClient client = initHttpClient();
+        client.setHeader("Content-Type", "application/json");
+        client.setHeader("Authorization", "Bearer " + accessToken);
+        client.setHeader("Accept-Language", "fr");
+        client.setUrl(BASE_URL + "/exampleApi/useLocaleSetInRequestHeader");
+
+        String response = "";
+        try {
+            response = client.post();
+        } catch (HttpClientException e) {
+            Debug.logError(e, "Error during rest POST to 
/exampleApi/useLocaleSetInRequestHeader", MODULE);
+        }
+        String localeSentViaAcceptLanguageHeader = "";
+        try {
+            JsonNode root = mapper.readTree(response);
+            localeSentViaAcceptLanguageHeader = 
root.get("data").get("localeAsString").asText();
+        } catch (JsonProcessingException | NullPointerException e) {
+            Debug.logError(e, "Error parsing rest auth response", MODULE);
+        }
+
+        assertEquals("fr", localeSentViaAcceptLanguageHeader);
+    }
 }
diff --git 
a/framework/rest-api/src/test/java/org/apache/ofbiz/ws/rs/test/RestTestServices.java
 
b/framework/rest-api/src/test/java/org/apache/ofbiz/ws/rs/test/RestTestServices.java
index 8fe50fd0cd..3c1e8c8077 100644
--- 
a/framework/rest-api/src/test/java/org/apache/ofbiz/ws/rs/test/RestTestServices.java
+++ 
b/framework/rest-api/src/test/java/org/apache/ofbiz/ws/rs/test/RestTestServices.java
@@ -18,6 +18,7 @@
  
*******************************************************************************/
 package org.apache.ofbiz.ws.rs.test;
 
+import java.util.Locale;
 import java.util.Map;
 
 import org.apache.ofbiz.base.util.UtilValidate;
@@ -83,4 +84,19 @@ public class RestTestServices {
         result.put("x-custom-header", customHeader);
         return result;
     }
+
+    /**
+     * TestService returning the received locale as a String
+     *
+     * @param dctx
+     * @param context
+     * @return
+     */
+    public static Map<String, Object> 
useLocaleSetInRequestHeader(DispatchContext dctx, Map<String, ? extends Object> 
context) {
+        Locale locale = (Locale) context.get("locale");
+        Map<String, Object> result = ServiceUtil.returnSuccess();
+        String localeAsString = locale.toString();
+        result.put("localeAsString", localeAsString);
+        return result;
+    }
 }

Reply via email to