Abhinay kumar suraj
Abhinay kumar suraj

Reputation: 1

parse one segment out of all in flat file to JSON in mule

I want to read a fixed width response from server.

Sample Response

PQRSBNGL1234567890AAHG

Here is sample ffd file

form: COPYBOOK
values:

- name: 'HOSPITALS'
  values:
  - name: 'BASIC-INFO'
    values:
    - { name: 'NAME', type: String, length: 4 }
    - { name: 'ADDRESS', type: String, length: 4 }
    - { name: 'PHONE-NUMBER', type: Integer, length: 10, format: { justify: ZEROES, sign: UNSIGNED } }
    - { name: 'ADMIN', type: String, length: 4 }
- name: 'WARDS'
  values:
  - name: 'BASIC-INFO'
    values:
    - { name: 'NAME', type: String, length: 4 }
    - { name: 'ADDRESS', type: String, length: 4 }
    - { name: 'NUMBER', type: Integer, length: 10, format: { justify: ZEROES, sign: UNSIGNED } }
    - { name: 'ADMIN', type: String, length: 4 }

I'm trying to read it through set payload set payload screenshot

And then I'm trying it through dataweave script

%dw 2.0
output application/json
---
payload map ( payload01 , indexOfPayload01 ) -> {
Wards: {
"Basic-Info": {
Name: payload01.WARDS."BASIC-INFO".NAME default "",
Address: payload01.WARDS."BASIC-INFO".ADDRESS default "",
Number: payload01.WARDS."BASIC-INFO".NUMBER default 0,
Admin: payload01.WARDS."BASIC-INFO".ADMIN default ""
}
}
}

But i'm getting below error

""java.lang.IllegalStateException - Structure WARDS not defined in schema
java.lang.IllegalStateException: Structure WARDS not defined in schema

    at org.mule.weave.v2.module.flatfile.FlatFileSettings.getStructure(FlatFileSettings.scala:131)

    at org.mule.weave.v2.module.flatfile.FlatFileReader.ffParser(FlatFileReader.scala:50)

    at org.mule.weave.v2.module.flatfile.FlatFileReader.doRead(FlatFileReader.scala:63)

    at org.mule.weave.v2.module.reader.Reader.read(Reader.scala:35)

    at org.mule.weave.v2.module.reader.Reader.read$(Reader.scala:33)

    at org.mule.weave.v2.module.flatfile.FlatFileReader.read(FlatFileReader.scala:22)

    at org.mule.weave.v2.el.MuleTypedValue.value(MuleTypedValue.scala:147)

    at org.mule.weave.v2.model.values.wrappers.DelegateValue.valueType(DelegateValue.scala:17)

    at org.mule.weave.v2.model.values.wrappers.DelegateValue.valueType$(DelegateValue.scala:16)

    at org.mule.weave.v2.el.MuleTypedValue.valueType(MuleTypedValue.scala:177)

    at org.mule.weave.v2.model.types.ArrayType.accepts(Type.scala:634)

    at org.mule.weave.v2.interpreted.node.executors.BinaryOverloadedStaticExecutor.findMatchingFunction(BinaryOverloadedStaticExecutor.scala:151)

    at org.mule.weave.v2.interpreted.node.executors.BinaryOverloadedStaticExecutor.executeBinary(BinaryOverloadedStaticExecutor.scala:78)

    at org.mule.weave.v2.interpreted.node.executors.BinaryStaticOverloadedFunctionExecutor.executeBinary(BinaryOverloadedStaticExecutor.scala:222)

    at org.mule.weave.v2.interpreted.node.BinaryFunctionCallNode.doExecute(FunctionCallNode.scala:81)

    at org.mule.weave.v2.interpreted.node.ValueNode.execute(ValueNode.scala:26)

    at org.mule.weave.v2.interpreted.node.ValueNode.execute$(ValueNode.scala:21)

    at org.mule.weave.v2.interpreted.node.BinaryFunctionCallNode.execute(FunctionCallNode.scala:78)

    at org.mule.weave.v2.interpreted.node.structure.DocumentNode.doExecute(DocumentNode.scala:26)

    at org.mule.weave.v2.interpreted.node.ValueNode.execute(ValueNode.scala:26)

    at org.mule.weave.v2.interpreted.node.ValueNode.execute$(ValueNode.scala:21)

    at org.mule.weave.v2.interpreted.node.structure.DocumentNode.execute(DocumentNode.scala:11)

    at org.mule.weave.v2.interpreted.InterpretedMappingExecutableWeave.$anonfun$writeWith$3(InterpreterMappingCompilerPhase.scala:264)

    at org.mule.weave.v2.module.writer.WriterHelper$.writeValue(Writer.scala:161)

    at org.mule.weave.v2.module.writer.WriterHelper$.writeAndGetResult(Writer.scala:139)

    at org.mule.weave.v2.interpreted.InterpretedMappingExecutableWeave.writeWith(InterpreterMappingCompilerPhase.scala:264)

    at org.mule.weave.v2.el.WeaveExpressionLanguageSession.evaluateWithTimeout(WeaveExpressionLanguageSession.scala:311)

    at org.mule.weave.v2.el.WeaveExpressionLanguageSession.$anonfun$evaluate$3(WeaveExpressionLanguageSession.scala:120)

    at org.mule.weave.v2.el.WeaveExpressionLanguageSession.doEvaluate(WeaveExpressionLanguageSession.scala:268)

    at org.mule.weave.v2.el.WeaveExpressionLanguageSession.evaluate(WeaveExpressionLanguageSession.scala:119)

    at org.mule.runtime.core.internal.el.dataweave.DataWeaveExpressionLanguageAdaptor$1.evaluate(DataWeaveExpressionLanguageAdaptor.java:311)

    at org.mule.runtime.core.internal.el.DefaultExpressionManagerSession.evaluate(DefaultExpressionManagerSession.java:105)

    at com.mulesoft.mule.runtime.core.internal.processor.SetPayloadTransformationTarget.process(SetPayloadTransformationTarget.java:32)

    at com.mulesoft.mule.runtime.core.internal.processor.TransformMessageProcessor.lambda$0(TransformMessageProcessor.java:92)

    at java.util.Optional.ifPresent(Optional.java:159)

    at com.mulesoft.mule.runtime.core.internal.processor.TransformMessageProcessor.process(TransformMessageProcessor.java:92)

    at org.mule.runtime.core.api.util.func.CheckedFunction.apply(CheckedFunction.java:25)

    at org.mule.runtime.core.api.rx.Exceptions.lambda$checkedFunction$2(Exceptions.java:85)

    at org.mule.runtime.core.internal.util.rx.Operators.lambda$nullSafeMap$0(Operators.java:47)

    at reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.onNext(FluxHandleFuseable.java:165)

    at org.mule.runtime.core.privileged.processor.chain.AbstractMessageProcessorChain$2.onNext(AbstractMessageProcessorChain.java:527)

    at org.mule.runtime.core.privileged.processor.chain.AbstractMessageProcessorChain$2.onNext(AbstractMessageProcessorChain.java:522)

    at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onNext(FluxHide.java:127)

    at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:204)

    at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:351)

    at reactor.core.publisher.FluxSubscribeOnValue$ScheduledScalar.run(FluxSubscribeOnValue.java:178)

    at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:50)

    at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:27)

    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

    at org.mule.service.scheduler.internal.AbstractRunnableFutureDecorator.doRun(AbstractRunnableFutureDecorator.java:151)

    at org.mule.service.scheduler.internal.RunnableFutureDecorator.run(RunnableFutureDecorator.java:54)

    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

    at java.lang.Thread.run(Thread.java:750), while reading `payload` as FlatFile.
Trace:
  at main (Unknown)" evaluating expression: "%dw 2.0
output application/json
---
payload map ( payload01 , indexOfPayload01 ) -> {
Wards: {
"Basic-Info": {
Name: payload01.WARDS."BASIC-INFO".NAME default "",
Address: payload01.WARDS."BASIC-INFO".ADDRESS default "",
Number: payload01.WARDS."BASIC-INFO".NUMBER default 0,
Admin: payload01.WARDS."BASIC-INFO".ADMIN default ""
}
}
}"."

Am i doing something wrong? I just want to read the string and convert it into JSON object like the schema.

Am i doing something wrong? I just want to read the string and convert it into JSON object like the schema.

Upvotes: 0

Views: 207

Answers (1)

Juan Pereira
Juan Pereira

Reputation: 11

The structureIdent property is used to identify a specific structure in FLATFILE form schemas. For FIXEDWIDTH or Cobol COPYBOOK schemas you should use the segmentIdent property.

Upvotes: 1

Related Questions