You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ossie.apache.org by jb...@apache.org on 2026/10/11 08:11:48 UTC

(ossie) branch main updated: fix(salesforce): name the fallback dataType in the warning (#561)

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

jbonofre pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ossie.git


The following commit(s) were added to refs/heads/main by this push:
     new 08244b5f fix(salesforce): name the fallback dataType in the warning (#561)
08244b5f is described below

commit 08244b5f96176840905463b6ccbeb80e44cf49df
Author: RyutoYoda❄️ <98...@users.noreply.github.com>
AuthorDate: Sun Oct 11 17:11:43 2026 +0900

    fix(salesforce): name the fallback dataType in the warning (#561)
---
 .../ossie/converter/FieldMappingHandler.java       | 12 +++---
 .../ossie/OssieToSalesforceConverterTest.java      | 44 ++++++++++++++++++++++
 2 files changed, 51 insertions(+), 5 deletions(-)

diff --git a/converters/salesforce/src/main/java/org/apache/ossie/converter/FieldMappingHandler.java b/converters/salesforce/src/main/java/org/apache/ossie/converter/FieldMappingHandler.java
index c99bdbd7..900b8ba8 100644
--- a/converters/salesforce/src/main/java/org/apache/ossie/converter/FieldMappingHandler.java
+++ b/converters/salesforce/src/main/java/org/apache/ossie/converter/FieldMappingHandler.java
@@ -327,7 +327,7 @@ public class FieldMappingHandler implements PipelineStep {
 
                 customExtensionHandler.restoreSalesforceCustomExtension(calcDim, ossieField);
 
-                applyOssieDatatype(calcDim, ossieField);
+                applyOssieDatatype(calcDim, ossieField, FieldType.CALCULATED_DIMENSION);
 
                 applyFieldDefaults(calcDim, FieldType.CALCULATED_DIMENSION);
 
@@ -342,7 +342,7 @@ public class FieldMappingHandler implements PipelineStep {
 
                 customExtensionHandler.restoreSalesforceCustomExtension(sfField, ossieField);
 
-                applyOssieDatatype(sfField, ossieField);
+                applyOssieDatatype(sfField, ossieField, fieldType);
 
                 applyFieldDefaults(sfField, fieldType);
 
@@ -606,7 +606,8 @@ public class FieldMappingHandler implements PipelineStep {
      * restored from custom_extensions. Exact extension data wins to preserve
      * Salesforce-specific distinctions such as Email and Currency.
      */
-    private void applyOssieDatatype(Map<String, Object> sfField, Map<String, Object> ossieField) {
+    private void applyOssieDatatype(
+            Map<String, Object> sfField, Map<String, Object> ossieField, FieldType fieldType) {
         String ossieDatatype = getString(ossieField, OSSIE_DATATYPE);
         String exactSalesforceDataType = getString(sfField, DATA_TYPE);
         String mappedSalesforceDataType = SalesforceDataTypeMapper.toSalesforce(ossieDatatype);
@@ -642,9 +643,10 @@ public class FieldMappingHandler implements PipelineStep {
         if (mappedSalesforceDataType == null) {
             logger.warn(
                     "Field '{}' has Ossie datatype '{}' with no safe Salesforce mapping; "
-                            + "falling back to the default dataType for its role",
+                            + "exporting it as '{}', the default dataType for its role",
                     getString(ossieField, NAME),
-                    ossieDatatype);
+                    ossieDatatype,
+                    defaultDataType(fieldType));
             return;
         }
         sfField.put(DATA_TYPE, mappedSalesforceDataType);
diff --git a/converters/salesforce/src/test/java/org/apache/ossie/OssieToSalesforceConverterTest.java b/converters/salesforce/src/test/java/org/apache/ossie/OssieToSalesforceConverterTest.java
index 9d8ed8db..1dde714f 100644
--- a/converters/salesforce/src/test/java/org/apache/ossie/OssieToSalesforceConverterTest.java
+++ b/converters/salesforce/src/test/java/org/apache/ossie/OssieToSalesforceConverterTest.java
@@ -19,16 +19,22 @@
 
 package org.apache.ossie;
 
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.Logger;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.read.ListAppender;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.ossie.converter.Converter;
 import org.apache.ossie.converter.ConverterFactory;
 import org.apache.ossie.converter.ConversionDirection;
 import org.apache.ossie.converter.CustomExtensionHandler;
+import org.apache.ossie.converter.FieldMappingHandler;
 import org.apache.ossie.validator.SchemaValidator;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.slf4j.LoggerFactory;
 import org.apache.ossie.converter.pipeline.DirectionConfig;
 import org.apache.ossie.converter.pipeline.HandlerFactory;
 import org.apache.ossie.converter.pipeline.PipelineConfig;
@@ -936,6 +942,44 @@ class OssieToSalesforceConverterTest {
                 "a datatype with no safe Salesforce mapping should fall back, not be dropped");
     }
 
+    @Test
+    void testTheFallbackDataTypeIsNamedInTheWarning() throws Exception {
+        // The fallback can change the field's meaning -- a Time measurement ships as
+        // Number -- so the warning has to say which dataType was chosen, not just that
+        // one was. Omitting it instead is not an option: the API rejects such a field.
+        String ossieModel = "version: 0.2.0.dev0\n"
+                + "name: Imported_Model\n"
+                + "datasets:\n"
+                + "- name: Orders\n"
+                + "  source: Orders__dll\n"
+                + "  fields:\n"
+                + "  - name: handling_time\n"
+                + "    datatype: Time\n"
+                + "    expression:\n"
+                + "      dialects:\n"
+                + "      - dialect: ANSI_SQL\n"
+                + "        expression: handling_time\n";
+
+        Logger fieldLogger = (Logger) LoggerFactory.getLogger(FieldMappingHandler.class);
+        ListAppender<ILoggingEvent> warnings = new ListAppender<>();
+        warnings.start();
+        fieldLogger.addAppender(warnings);
+        try {
+            converter.convert(ossieModel);
+        } finally {
+            fieldLogger.detachAppender(warnings);
+        }
+
+        String reported = warnings.list.stream()
+                .filter(event -> event.getLevel() == Level.WARN)
+                .map(ILoggingEvent::getFormattedMessage)
+                .filter(message -> message.contains("handling_time"))
+                .findFirst()
+                .orElse("");
+        assertTrue(reported.contains("Number"),
+                "the warning should name the dataType the field was exported as: " + reported);
+    }
+
     @Test
     void testDataObjectTypeIsDerivedFromTheDataObjectNameSuffix() throws Exception {
         // Data Cloud suffixes a data object's name with the kind of object it is, so the