Скрипт Dataweave работает на предварительном просмотре, но не работает на практике

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

Время выполнения 3.8.2ee

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

Это ошибка:

Invalid input "[\n  \t\t({\n  \t\t\teffectiveTerm:
template.effectiveTerms.effectiveFromTerm,\n  \t\t\tattributeCode: "VARU"\n  \t\t} as :object
{ class: "edu.mit.courseleaf.domain.backfill.OldAttribute" })\n  \t\twhen
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

Ниже приведены поток со сценарием dataweave, ввод для предварительного просмотра, json для фактического выполнения. Пара комментариев:

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

Поток со скриптом 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"]
    }
}

person weissj    schedule 17.01.2017    source источник
comment
ИМО, не полагайтесь на предварительный просмотр.   -  person Möoz    schedule 18.01.2017


Ответы (1)


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

person Abani Patra    schedule 19.01.2017