Mikael Andersson Wigander created CAMEL-17956:
-------------------------------------------------

             Summary: JSONPath option to use global registered ObjectMapper
                 Key: CAMEL-17956
                 URL: https://issues.apache.org/jira/browse/CAMEL-17956
             Project: Camel
          Issue Type: Improvement
          Components: camel-jsonpath
    Affects Versions: 3.16.0, 3.14.1
            Reporter: Mikael Andersson Wigander


I have discovered that when using JSONPath in a route, the implementation does 
not use any ObjectMapper registered, it uses it's own.

{code:java|title=JacksonMappingProvider.class}
public class JacksonMappingProvider implements MappingProvider {

private final ObjectMapper objectMapper;

public JacksonMappingProvider() {
this(new ObjectMapper());
}

public JacksonMappingProvider(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
{code}

However, when using *.jsonpathWriteAsString()*, this uses global registered 
ObjectMapper.

{code:java|title=JacksonJsonAdapter.class}
@Override
    public String writeAsString(Object value, Exchange exchange) {
        ObjectMapper mapper = 
resolveObjectMapper(exchange.getContext().getRegistry());
        try {
            return mapper.writeValueAsString(value);
        } catch (Throwable e) {
            // ignore because we are attempting to convert
        }

        return null;
    }
{code}

It does not go through the *JsonPathEngine* so it seems it's a completly 
differrent implementation however still defined within JSONPath language as in 
this documentation:

https://camel.apache.org/components/3.14.x/languages/jsonpath-language.html#_split_json_data_into_sub_rows_as_json




--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to