Skip to content

Commit c91d7e9

Browse files
authored
W-18030082: Diet tooling operations errors with complex types/expressions (#14279)
* Value resolver loses mimeType of param value * Value resolver fails when complex param is created with DW expression * Value Resolver expression extraction result not trimmed
1 parent 8b27487 commit c91d7e9

File tree

11 files changed

+456
-133
lines changed

11 files changed

+456
-133
lines changed

core-tests/src/test/java/org/mule/runtime/core/internal/connection/DefaultConnectionManagerTestCase.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import static org.hamcrest.Matchers.nullValue;
2626
import static org.mockito.Answers.RETURNS_DEEP_STUBS;
2727
import static org.mockito.Mockito.atLeastOnce;
28+
import static org.mockito.Mockito.doReturn;
2829
import static org.mockito.Mockito.mock;
2930
import static org.mockito.Mockito.never;
3031
import static org.mockito.Mockito.verify;
@@ -232,7 +233,7 @@ public void forceConnectivityTestOnLazyConnections() throws Exception {
232233

233234
when(testeableConnectionProvider.connect())
234235
.thenThrow(new ConnectionException(CONNECTION_CREATION_FAILURE_MESSAGE));
235-
when(configurationInstance.getConnectionProvider()).thenReturn(of(testeableConnectionProvider));
236+
doReturn(of(testeableConnectionProvider)).when(configurationInstance).getConnectionProvider();
236237
final ConnectionValidationResult result = lazyConnectionManagerAdapter.testConnectivity(configurationInstance, true);
237238

238239
assertThat(result, isFailure(nullValue(ErrorType.class), is(CONNECTION_CREATION_FAILURE_MESSAGE)));
@@ -247,7 +248,7 @@ public void forceConnectivityTestOnEagerConnections() throws Exception {
247248

248249
when(testeableConnectionProvider.connect())
249250
.thenThrow(new ConnectionException(CONNECTION_CREATION_FAILURE_MESSAGE));
250-
when(configurationInstance.getConnectionProvider()).thenReturn(of(testeableConnectionProvider));
251+
doReturn(of(testeableConnectionProvider)).when(configurationInstance).getConnectionProvider();
251252
final ConnectionValidationResult result = lazyConnectionManagerAdapter.testConnectivity(configurationInstance);
252253

253254
assertThat(result, isFailure(nullValue(ErrorType.class), is(CONNECTION_CREATION_FAILURE_MESSAGE)));

modules/extensions-support/src/main/java/org/mule/runtime/module/extension/internal/data/sample/SampleDataProviderFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ <T, A> SampleDataProvider<T, A> createSampleDataProvider() throws SampleDataExce
9797
throw new SampleDataException("The sample data provider requires a connection and none was provided",
9898
MISSING_REQUIRED_PARAMETERS);
9999
}
100-
setValueIntoField(resolver, connectionSupplier.get(), connectionField);
100+
setValueIntoField(resolver, connection, connectionField);
101101
}
102102

103103
if (factoryModelProperty.usesConfig()) {
@@ -106,7 +106,7 @@ <T, A> SampleDataProvider<T, A> createSampleDataProvider() throws SampleDataExce
106106
throw new SampleDataException("The sample data provider requires a configuration and none was provided",
107107
MISSING_REQUIRED_PARAMETERS);
108108
}
109-
setValueIntoField(resolver, configurationSupplier.get(), configField);
109+
setValueIntoField(resolver, config, configField);
110110
}
111111
return resolver;
112112
} catch (SampleDataException e) {

modules/extensions-support/src/main/java/org/mule/runtime/module/extension/internal/loader/java/property/InjectableParameterInfo.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,7 @@ public class InjectableParameterInfo {
2020
private boolean required;
2121
private String extractionExpression;
2222

23-
InjectableParameterInfo(String parameterName, MetadataType type, boolean required) {
24-
this(parameterName, type, required, null);
25-
}
26-
27-
InjectableParameterInfo(String parameterName, MetadataType type, boolean required, String extractionExpression) {
23+
public InjectableParameterInfo(String parameterName, MetadataType type, boolean required, String extractionExpression) {
2824
this.parameterName = parameterName;
2925
this.type = type;
3026
this.required = required;

modules/extensions-support/src/main/java/org/mule/runtime/module/extension/internal/runtime/config/DefaultExtensionDesignTimeResolversFactory.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@
7070

7171
import java.util.Map;
7272
import java.util.Optional;
73-
import java.util.function.Function;
7473
import java.util.function.Supplier;
7574

7675
import javax.inject.Inject;

modules/extensions-support/src/main/java/org/mule/runtime/module/extension/internal/runtime/resolver/ResolverSetUtils.java

Lines changed: 158 additions & 101 deletions
Large diffs are not rendered by default.

modules/extensions-support/src/main/java/org/mule/runtime/module/extension/internal/runtime/resolver/resolver/ValueResolverFactoryTypeVisitor.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,17 @@
66
*/
77
package org.mule.runtime.module.extension.internal.runtime.resolver.resolver;
88

9-
import static java.lang.String.format;
10-
import static java.time.Instant.ofEpochMilli;
11-
import static java.util.Optional.empty;
12-
import static java.util.Optional.of;
139
import static org.mule.metadata.java.api.utils.JavaTypeUtils.getType;
1410
import static org.mule.runtime.api.metadata.MediaTypeUtils.parseCharset;
1511
import static org.mule.runtime.extension.api.util.ExtensionMetadataTypeUtils.isMap;
1612
import static org.mule.runtime.module.extension.internal.util.IntrospectionUtils.toDataType;
1713
import static org.mule.runtime.module.extension.internal.util.MuleExtensionUtils.isExpression;
1814

15+
import static java.lang.String.format;
16+
import static java.time.Instant.ofEpochMilli;
17+
import static java.util.Optional.empty;
18+
import static java.util.Optional.of;
19+
1920
import org.mule.metadata.api.model.DateTimeType;
2021
import org.mule.metadata.api.model.DateType;
2122
import org.mule.metadata.api.model.MetadataType;
@@ -98,10 +99,10 @@ protected void defaultVisit(MetadataType metadataType) {
9899
}
99100

100101
private ValueResolver getDefaultResolver(Object value) {
101-
if (acceptsReferences && value instanceof String) {
102-
return new RegistryLookupValueResolver((String) value);
102+
if (acceptsReferences && value instanceof String stringValue) {
103+
return new RegistryLookupValueResolver(stringValue);
103104
} else {
104-
return new TypeSafeValueResolverWrapper(new StaticValueResolver<>(getValue()), getExpectedClass());
105+
return new TypeSafeValueResolverWrapper(new StaticValueResolver<>(value), getExpectedClass());
105106
}
106107
}
107108

modules/extensions-support/src/main/java/org/mule/runtime/module/extension/internal/util/InjectableParameterResolver.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import static org.slf4j.LoggerFactory.getLogger;
1616

1717
import org.mule.runtime.api.el.BindingContext;
18+
import org.mule.runtime.api.el.MuleExpressionLanguage;
1819
import org.mule.runtime.api.meta.model.parameter.ParameterModel;
1920
import org.mule.runtime.api.meta.model.parameter.ParameterizedModel;
2021
import org.mule.runtime.api.metadata.DataType;
@@ -44,12 +45,12 @@ public class InjectableParameterResolver {
4445
private static final Logger LOGGER = getLogger(InjectableParameterResolver.class);
4546

4647
private final BindingContext expressionResolvingContext;
47-
private final ExpressionManager expressionManager;
48+
private final MuleExpressionLanguage expressionManager;
4849
private final Map<String, InjectableParameterInfo> injectableParametersMap;
4950

5051
public InjectableParameterResolver(ParameterizedModel parameterizedModel,
5152
ParameterValueResolver parameterValueResolver,
52-
ExpressionManager expressionManager,
53+
MuleExpressionLanguage expressionManager,
5354
List<InjectableParameterInfo> injectableParameters) {
5455
this.expressionManager = expressionManager;
5556
this.injectableParametersMap = getInjectableParametersMap(injectableParameters);
@@ -88,7 +89,7 @@ public Object getInjectableParameterValue(String parameterName) {
8889
LOGGER.debug("The parameter: '" + topLevelRequiredParameter
8990
+ "' on which the extraction expression was to be executed is not present in the context, returning null");
9091
}
91-
return parameterValue;
92+
return parameterValue instanceof String stringValue ? stringValue.trim() : parameterValue;
9293
}
9394

9495
private Map<String, InjectableParameterInfo> getInjectableParametersMap(List<InjectableParameterInfo> injectableParameters) {

modules/extensions-support/src/main/java/org/mule/runtime/module/extension/internal/value/ValueProviderFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ ValueProvider createValueProvider() throws ValueResolvingException {
9191
throw new ValueResolvingException("The value provider requires a connection and none was provided",
9292
MISSING_REQUIRED_PARAMETERS);
9393
}
94-
setValueIntoField(resolver, connectionSupplier.get(), connectionField);
94+
setValueIntoField(resolver, connection, connectionField);
9595
}
9696

9797
if (factoryModelProperty.usesConfig()) {
@@ -100,7 +100,7 @@ ValueProvider createValueProvider() throws ValueResolvingException {
100100
throw new ValueResolvingException("The value provider requires a configuration and none was provided",
101101
MISSING_REQUIRED_PARAMETERS);
102102
}
103-
setValueIntoField(resolver, configurationSupplier.get(), configField);
103+
setValueIntoField(resolver, config, configField);
104104
}
105105
return adaptResolver(resolver);
106106
} catch (ValueResolvingException e) {

modules/extensions-support/src/test/java/org/mule/runtime/module/extension/internal/runtime/DefaultExecutionMediatorTestCase.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import static org.mockito.ArgumentMatchers.same;
3838
import static org.mockito.Mockito.clearInvocations;
3939
import static org.mockito.Mockito.doAnswer;
40+
import static org.mockito.Mockito.doReturn;
4041
import static org.mockito.Mockito.doThrow;
4142
import static org.mockito.Mockito.inOrder;
4243
import static org.mockito.Mockito.mock;
@@ -244,13 +245,13 @@ public void before() throws Exception {
244245
null,
245246
threadReleaseDataProducer, operationExecutionTracer, true);
246247

247-
final ReconnectableConnectionProviderWrapper<Object> connectionProviderWrapper =
248+
final ReconnectableConnectionProviderWrapper<?> connectionProviderWrapper =
248249
new ReconnectableConnectionProviderWrapper<>(null,
249250
defaultReconnectionConfig(true, retryPolicy));
250251
initialiseIfNeeded(connectionProviderWrapper, true, muleContext);
251-
Optional<ConnectionProvider> connectionProvider = of(connectionProviderWrapper);
252+
Optional<ConnectionProvider<?>> connectionProvider = of(connectionProviderWrapper);
252253

253-
when(configurationInstance.getConnectionProvider()).thenReturn(connectionProvider);
254+
doReturn(connectionProvider).when(configurationInstance).getConnectionProvider();
254255
when(exceptionEnricher.enrichException(any())).thenAnswer(inv -> {
255256
final Throwable toEnrich = inv.getArgument(0);
256257
if (toEnrich == exception || toEnrich.getCause() == exception) {

0 commit comments

Comments
 (0)