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;
+ }
}