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