Dataweave скрипт работает для предварительного просмотра, не в фактическом использовании

Использование Studio 6.1.0

Среда выполнения 3.8.2 ee

Я написал сценарий dataweave, который отлично работает при предварительном просмотре результатов в окне Transform Message, но когда я фактически запускаю свое приложение, я получаю ошибку, которая предполагает проблему со сценарием dataweave.

Это ошибка:

Invalid input "[n  tt({n  ttteffectiveTerm:
template.effectiveTerms.effectiveFromTerm,n  tttattributeCode: "VARU"n  tt} as :object
{ class: "edu.mit.courseleaf.domain.backfill.OldAttribute" })n  ttwhen
template.units.variableUnits == "Y",", expected flatten, typeOf, using, unzip, capitalize,
avg, min, lower, upper, max, singularize, not, dasherize, ordinalize, camelize, trim, sizeOf,
value, pluralize, sum or underscore (line 16, column 24)
(java.util.concurrent.ExecutionException). Message payload is of type: HashMap

Flow with dataweave script, input for preview, json for actual execution приведены ниже. Несколько комментариев:

  1. Часть сценария dataweave, на которую ссылается ошибка, предназначена для свойства attributes. Цель здесь состоит в том, чтобы установить свойство в список OldAttribute объектов. Содержание списка зависит от двух отдельных элементов в исходных данных: наличия предметной области.Единицы.variableUnits = = » Y » и подмножество значений в элементе attributes.
  2. Я знаю, что мы можем поехать прямо из JSON в POJO. В полном приложении мы выполняем дополнительную обработку промежуточной хэш-карты, поэтому мы хотим сохранить двухэтапное преобразование.
  3. Эде.mit.courseleaf.домен.засыпка.OldAttribute и edu.mit.courseleaf.домен.засыпка.SourceSubject-это POJOs с конструкторами по умолчанию и соответствующими геттерами и сеттерами для используемых свойств.

Поток с помощью сценария dataweave:

<flow name="temp-json-to-map-to-pojo-example-for-so">
    <json:json-to-object-transformer returnClass="java.util.HashMap" doc_name="JSON to Object"/>
    <set-payload value="#[payload]" mimeType="*/*" doc_name="Set Payload"/>
    <dw:transform-message doc_name="Transform Message">
        <dw:input-payload doc_sample="sample_data/map.dwl"/>
        <dw:set-payload><![CDATA[%dw 1.0
            %input payload application/java
            %output application/java
            %function passThroughAttributes(attributeList)  attributeList - "RPT" - "SWE" - "FSEM"
            ---
            using (template = payload.subjectTemplate
                    , attributes = payload.subjectTemplate.attributes
            )
            {
                subjectCode:template.mainSubjectCode,
                subjectNumber:template.mainSubjectNumber,
                attributes: flatten [
                    ({
                        effectiveTerm: template.effectiveTerms.effectiveFromTerm,
                        attributeCode: "VARU"
                    } as :object { class: "edu.mit.courseleaf.domain.backfill.OldAttribute" })
                    when template.units.variableUnits == "Y",
                    passThroughAttributes(attributes)   map (
                    {
                        attributeCode: $,
                        effectiveTerm: template.effectiveTerms.effectiveFromTerm
                    }
                        )  as :object { class: "edu.mit.courseleaf.domain.backfill.OldAttribute" }
                ]
            }as :object{class : "edu.mit.courseleaf.domain.backfill.SourceSubject"

        ]]></dw:set-payload>
    </dw:transform-message>
</flow>

Пример ввода для предварительного просмотра:

{
    subjectTemplate: {
        subjectTemplateId: "43C9C99A88B76AFBE053282701126517",
        mainSubjectCode: "HAA",
        mainSubjectNumber: "T101",
        subjectLevel: "U",
        effectiveTerms: {
            effectiveFromTerm:"2017SP",
            effectiveThruTerm: "999999"
        },
        units: {
            variableUnits: "Y",
            lectureUnits: 9,
            labUnits: 3,
            prepUnits: 0,
            totalCreditLimitUnits: 0
        },
        attributes: ["RPT", "XLIS"]
    }

}

Скриншот предварительного просмотра, показывающий правильно заполненное свойство атрибутов
Фактический вход JSON для потока

{
    "subjectTemplate": {
        "subjectTemplateId": "43C9C99A88B76AFBE053282701126517",
        "mainSubjectCode": "HAA",
        "mainSubjectNumber": "T101",
        "subjectLevel": "U",
        "effectiveTerms": {
            "effectiveFromTerm": "2017SP",
            "effectiveThruTerm": "999999"
        },
        "units": {
            "variableUnits": "Y",
            "lectureUnits": 9,
            "labUnits": 3,
            "prepUnits": 0,
            "totalCreditLimitUnits": 0
        },
        "attributes": ["RPT", "XLIS"]
    }
}

1 ответ

  1. Пожалуйста попробуйте с группой мимо в dataweave для группировать все такой же продукт категории в одном массиве после этого сделайте более далее очистить согласно вашему требованию. Вы можете сослаться здесь для деталей.