Skip to content

JsonPathPipe with JSON object as output throws 'attempted to index a string with string ID' when used as input of DataSonnetPipe #9967

@MLenterman

Description

@MLenterman

Current Behavior

Replacing the JsonPathPipe with a DataSonnetPipe doing the exact same thing functionally fixes the issue. Using 'jsonPathExpression' on a Param seems to work fine aswell, so the issue seems to be specific to DataSonnetPipe. Perhaps the JsonPathPipe does not set a mimeType?

During testing it had some issues with incoherent results. It would seem like the same solution would sometimes work and the exact same solution would not work anymore in some other runs. This is probably a FF reload or Docker sync being weird, but mentioning it anyways.

Expected Behavior

JsonPathPipe jsonPathExpression yielding a JSON object should be interpreted as a JSON object when used with DataSonnetPipe.

Environment Information

FF! 9.4.0-20251122.042330: Eekels-Webhook-API 1.0.0
Running on 6fff822edaf8 using Apache Tomcat/10.1.49
Java Version: OpenJDK Runtime Environment (21.0.9+10-LTS)
Heap size: 223.1 MiB, total JVM memory: 328.0 MiB
Free memory: 104.9 MiB, max memory: 3.8 GiB
Free disk space: 969.4 GiB, total disk space: 1006.9 GiB
Up since: 2025-11-24 14:40:23, timezone: Etc/UTC

Steps To Reproduce

model/jsonnet/JsonApiResourceIdentifier.jsonnet:

{
    "id": payload.ID default "",
    "type": type,
    "meta": meta default {}
}

Configuration

<JsonPathPipe
                name="UnwrapRowset"
                jsonPathExpression="$.rowset[0]"/>

            <DataSonnetPipe
                name="CreateJsonApiResourceIdentifier"
                preserveInput="true"
                styleSheetName="model/jsonnet/JsonApiResourceIdentifier.jsonnet"
                storeResultInSessionKey="JsonApiResourceIdentifier">

                <Param name="type" value="webhook" />
            </DataSonnetPipe>

Input

{"rowset":[{"ID":"ac1d0002-70b8233f_19ab6e0d36f_-7fff","IDEMPOTENCYKEY":"511c09f9-50de-44f5-8c0d-e876f0cc3864","EVENTTYPES":""nl.eekels.crm.opportunity.stage_changed.v1","nl.eekels.crm.opportunity.stage_changed.v2"","NAME":"This is a testname","NOTIFICATIONURL":"https://notification-endpoint.localtest.me/callback","SIGNATUREKEY":"ISdFRUpWCLerN5ZclwvEVAhmqYc825Tu","STATUS":"active"}]}

What database are you using?

No response

What browsers are you seeing the problem on?

No response

Relevant Log Output

<errorMessage timestamp="Mon Nov 24 17:33:34 UTC 2025" originator="IAF 9.4.0-20251122.042330" message="DataSonnetPipe [CreateJsonApiAttributes] msgId [testmessage-983350f70b4b-ac1d0002--5d569a14_19ab6ed935e_-8000]: error during pipeline processing: Pipe [CreateJsonApiAttributes] error transforming input: (IllegalArgumentException) Problem executing script: com.datasonnet.jsonnet.Error: attempted to index a string with string ID     at line 4 column 30 of the transformation ">
	<location class="org.frankframework.pipes.DataSonnetPipe" name="CreateJsonApiAttributes"/>
	<details>org.frankframework.core.ListenerException: Pipe [CreateJsonApiAttributes] error transforming input: (IllegalArgumentException) Problem executing script: com.datasonnet.jsonnet.Error: attempted to index a string with string ID
    at line 4 column 30 of the transformation

	at org.frankframework.core.Adapter.processMessageWithExceptions(Adapter.java:834)
	at org.frankframework.core.Adapter.processMessageDirect(Adapter.java:759)
	at org.frankframework.management.bus.endpoints.TestPipeline.processMessage(TestPipeline.java:142)
	at org.frankframework.management.bus.endpoints.TestPipeline.runTestPipeline(TestPipeline.java:113)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:360)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor.proceed(AuthorizationManagerBeforeMethodInterceptor.java:268)
	at org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor.attemptAuthorization(AuthorizationManagerBeforeMethodInterceptor.java:263)
	at org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor.invoke(AuthorizationManagerBeforeMethodInterceptor.java:196)
	at org.springframework.security.config.annotation.method.configuration.DeferringMethodInterceptor.invoke(DeferringMethodInterceptor.java:44)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
	at org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor.proceed(AuthorizationManagerBeforeMethodInterceptor.java:268)
	at org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor.attemptAuthorization(AuthorizationManagerBeforeMethodInterceptor.java:263)
	at org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor.invoke(AuthorizationManagerBeforeMethodInterceptor.java:196)
	at org.springframework.security.config.annotation.method.configuration.DeferringMethodInterceptor.invoke(DeferringMethodInterceptor.java:44)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:728)
	at org.frankframework.management.bus.endpoints.TestPipeline$$SpringCGLIB$$0.runTestPipeline(&lt;generated&gt;)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169)
	at org.springframework.integration.handler.support.IntegrationInvocableHandlerMethod.doInvoke(IntegrationInvocableHandlerMethod.java:45)
	at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119)
	at org.springframework.integration.handler.support.MessagingMethodInvokerHelper$HandlerMethod.invoke(MessagingMethodInvokerHelper.java:1089)
	at org.springframework.integration.handler.support.MessagingMethodInvokerHelper.invokeHandlerMethod(MessagingMethodInvokerHelper.java:573)
	at org.springframework.integration.handler.support.MessagingMethodInvokerHelper.processInternal(MessagingMethodInvokerHelper.java:486)
	at org.springframework.integration.handler.support.MessagingMethodInvokerHelper.process(MessagingMethodInvokerHelper.java:361)

Anything else?

No response

Metadata

Metadata

Assignees

Labels

Type

Projects

Status

Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions