Damir Palinic created CAMEL-20100:
-------------------------------------

             Summary: Camel-jsonpath can't fetch field in some cases when body 
is returned from a http/https call
                 Key: CAMEL-20100
                 URL: https://issues.apache.org/jira/browse/CAMEL-20100
             Project: Camel
          Issue Type: Bug
          Components: camel-jsonpath
    Affects Versions: 4.1.0
            Reporter: Damir Palinic


When json response is received from the external REST endpoint using camel-http 
component, it fails to read missing json value, although 
DEFAULT_PATH_LEAF_TO_NULL option is set.

This can be reproduced using mockable.io service, but we noticed this behavior 
when calling many other REST endpoints (from real implementations). 

How to reproduce:
 # Create mocked POST REST endpoint using mockable.io
 # For example, our looks like following:
`POST http://demo0405481.mockable.io/camel` 
Response:

{code:java}
{"errorcode":0,"errormessage":""} {code}

 # Create integration where REST endpoint from step 2. is called using 
camel-http
 # Read missing summary field using Set Property and Jsonpath with 
DEFAULT_PATH_LEAF_TO_NULL enabled
 # Observe the error "Cannot read message body as supported JSON value. "

Actual result:
{code:java}
org.apache.camel.ExpressionEvaluationException: 
org.apache.camel.CamelExchangeException: Cannot read message body as supported 
JSON value. {code}
Expected result:

 

 
{code:java}
${exchangeProperty.summary} to be null
{code}
YAML DSL to reproduce:

 

 
{code:java}
- route:
    nodePrefixId: route-7e2
    id: route-dafc
    from:
      uri: scheduler
      id: from-64dc
      parameters:
        name: scheduler
        repeatCount: 2
      steps:
        - setHeader:
            name: Content-Type
            expression:
              simple:
                expression: application/json
                id: simple-dc79
            id: setHeader-2f26
        - setBody:
            expression:
              simple:
                expression: |-
                  {
                    "some": "value"
                  }
                id: simple-bfca
            id: setBody-243c
        - to:
            uri: http
            id: to-2cfa
            parameters:
              httpUri: demo0405481.mockable.io/camel
              httpMethod: POST
        - setProperty:
            name: summary
            expression:
              jsonpath:
                expression: $.summary
                option: DEFAULT_PATH_LEAF_TO_NULL
                id: jsonpath-54df
            id: setProperty-0d81
        - log:
            message: 'Value: ${exchangeProperty.summary}'
            id: log-6839
 {code}
Additional notes:
 * Please create your own mock using mockable.io and create some POST REST 
endpoint and return any json you want
 * In case summary field exists, it reads it normally
 * In case body is set using Set Body component, instead of reading it from 
from REST endpoint, everything works fine

 

 

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to