Несоответствие типа для оператора выбора значения с помощью Dataweave

#dataweave

#поток данных

Вопрос:

Я перенес средство сопоставления данных (которое преобразует xml в POJO) в dataweave. Но при выполнении потока я вижу приведенное ниже исключение

Найдено несоответствие типа для оператора выбора значения: строка, : имя требуется : дата-время, : имя или требуется : localdatetime, :имя или требуется: объект, : имя или требуется: время, : имя или требуется : массив, : имя или требуется : дата, : имя или требуется: localtime,:имя или обязательно: точка, :имя.

Ввод (полезная нагрузка) представляет собой XML, как показано ниже :

 <?xml version="1.0" encoding="UTF-8"?>
<RESPONSE_GROUP MISMOVersionID="2.4">
    <RESPONDING_PARTY/>
    <RESPOND_TO_PARTY/>
    <RESPONSE ResponseDateTime="2016-04-21T09:03:44-05:00">
        <KEY _Name="LSF.FloodRequestID" _Value="1604008485"/>
        <KEY _Name="LSF.MAPUPDATE" _Value="N"/>
        <KEY _Name="LSF.TrackingVendor" _Value="171"/>
        <KEY _Name="CLIENT.TRACKINGID" _Value="18786574"/>
        <KEY _Name="CLIENT.ID" _Value="CREDITCENTER"/>
        <RESPONSE_DATA>
            <FLOOD_RESPONSE FEMAAdditionalLenderDescription="98756987876" MISMOVersionID="2.4">
                <BORROWER _FirstName="###############" _LastName="###############"/>
                <MORTGAGE_TERMS LenderCaseIdentifier="068461451"/>
                <PROPERTY _City="MASON CITY" _County="CERRO GORDO" _PostalCode="50401" _State="IA" _StreetAddress="929 N ADAMS AVE">
                    <_IDENTIFICATION CountyFIPSCode="033" StateFIPSCode="19"/>
                </PROPERTY>
                <EMBEDDED_FILE MIMEType="application/pdf" _Description="Adobe Pdf" _EncodingType="Base64" _Extension="pdf" _Name="Certificate_1604008485" _Version="1.3">
                    <DOCUMENT>bae64encodedData</DOCUMENT>
                </EMBEDDED_FILE>
                <FLOOD_DETERMINATION FloodCertificationIdentifier="1604008485" FloodPartialIndicator="N" FloodProductCertifyDate="2016-04-05 08:21:24 AM" SpecialFloodHazardAreaIndicator="N" _LifeOfLoanIndicator="Y">
                    <_LOAN_INFORMATION RegulatoryAgencyLenderIdentifier="123456789"/>
                    <_COMMUNITY_INFORMATION NFIPCommunityFIRMDate="1980-12-02" NFIPCommunityIdentifier="190060" NFIPCommunityName="MASON CITY, CITY OF" NFIPCommunityParticipationStartDate="1975-03-21" NFIPCounty="CERRO GORDO" NFIPStateCode="IA"/>
                    <_BUILDING_INFORMATION NFIPFloodZoneIdentifier="X" NFIPMapIdentifier="19033C" NFIPMapIndicator="Y" NFIPMapPanelDate="2012-05-16" NFIPMapPanelIdentifier="0162" NFIPMapPanelSuffixIdentifier="C"/>
                    <_INSURANCE_INFORMATION NFIPCommunityParticipationStatusType="Regular" ProtectedAreaIndicator="N"/>
                    <FULFILLMENT_PARTY _City="Austin" _Name="CoreLogic Flood Services" _PostalCode="78758" _State="TX" _StreetAddress="11902 Burnet Road">
                        <CONTACT_DETAIL>
                            <CONTACT_POINT _RoleType="Work" _Type="Phone" _Value="1-800-447-1772"/>
                        </CONTACT_DETAIL>
                    </FULFILLMENT_PARTY>
                </FLOOD_DETERMINATION>
                <LENDER _City="Jacksonville" _Identifier="98756987876" _PostalCode="32256" _State="FL" _StreetAddress="9000 Southside Blvd, Bldg 100" _UnparsedName="Bank of America"/>
                <EXTENSION>
                    <EXTENSION_SECTION>
                        <EXTENSION_SECTION_DATA>
                            <FLOOD_DETERMINATION SplitDeterminationIndicator="N"/>
                        </EXTENSION_SECTION_DATA>
                    </EXTENSION_SECTION>
                </EXTENSION>
            </FLOOD_RESPONSE>
        </RESPONSE_DATA>
        <STATUS _Code="S0010" _Condition="Success" _Description="This is a TEST ORDER. It cannot be used for any purpose other than system testing. Section II.B.4 applies to all buildings on property described in Sec I.2.   THIS FLOOD DETERMINATION IS PROVIDED TO THE LENDER PURSUANT TO THE FLOOD DISASTER PROTECTION ACT.  IT SHOULD NOT BE USED FOR ANY OTHER PURPOSE." _Name="Complete"/>
    </RESPONSE>
</RESPONSE_GROUP>
 

и преобразование dw выглядит следующим образом

 %dw 1.0
%output application/java
---
{
    brwrFirstName: payload.RESPONSE_GROUP.RESPONSE.RESPONSE_DATA.FLOOD_RESPONSE.BORROWER.@"_FirstName",

    brwrLastName: payload.RESPONSE_GROUP.RESPONSE.RESPONSE_DATA.FLOOD_RESPONSE.BORROWER.@"_LastName" default '',
 

Я вижу ошибку в brwrFirstName: полезная нагрузка.RESPONSE_GROUP.RESPONSE.RESPONSE_DATA.FLOOD_RESPONSE

Комментарии:

1. Как выглядит ваш ввод? Как выглядит ваше преобразование? Обычно, когда отображается эта ошибка, появляется соответствующий фрагмент, показывающий преобразование DW. Можете ли вы также опубликовать это?

Ответ №1:

Как упоминал Чад, вы должны опубликовать свой ввод и фактический mule XML (а не только DW-код), что поможет людям лучше понять его.

Основываясь на предоставленной информации, похоже, что полезная нагрузка представляет собой строку, и DW говорит, что он не может применить селектор «.» к строке. Это ошибка, которую вы получаете. Селекторы могут применяться только к тем типам, которые указаны в ошибке.

Теперь вы ожидаете, что DW интерпретирует вашу строку как XML и проанализирует ее соответствующим образом. Иногда DW не знает, как это сделать. Однако вы можете принудительно ввести тип в полезную нагрузку, который заставит DW интерпретировать строку как XML. Просто добавьте дочерний элемент ниже с соответствующим типом mimeType к <dw:transform-message> элементу.

 <dw:input-payload  mimeType="application/xml"/>
 

Это заставит DW проанализировать строку как XML, и ваше приложение должно работать в этот момент. Вы также можете применить атрибут mimeType <dw:input-variable> к.

Полный пример DW в файле mule xml:

 <dw:transform-message doc:name="Transform Message">
  <dw:input-payload  mimeType="application/xml"/>
  <dw:set-payload>
        <![CDATA[%dw 1.0
%output application/java
---
{
    brwrFirstName: payload.RESPONSE_GROUP.RESPONSE.RESPONSE_DATA.FLOOD_RESPONSE.BORROWER.@"_FirstName",
    brwrLastName: payload.RESPONSE_GROUP.RESPONSE.RESPONSE_DATA.FLOOD_RESPONSE.BORROWER.@"_LastName" default ''    
}]]>
    </dw:set-payload>
</dw:transform-message>
 

Ответ №2:

Обнаружена ошибка:

 ERROR 2017-03-07 12:49:50,060 [[bulk_create_poc].HTTP_Listener_Configuration.worker.01] org.mule.exception.DefaultMessagingExceptionStrategy: 
Message               : Exception while executing: 
 payload.ns0#ResponseData_MT.*Item map {
 ^
Type mismatch for 'Value Selector' operator
     found :binary, :name
  required :datetime, :name or
  required :localdatetime, :name or
  required :object, :name or
  required :time, :name or
  required :array, :name or
  required :date, :name or
  required :localtime, :name or
  required :period, :name.
 

Добавление приведенного ниже фрагмента для разрешения

 <dw:input-payload  mimeType="application/xml"/>
 

Как здесь

 <dw:transform-message doc:name="Transform Message" metadata:id="b12f4d65-2bb0-43e9-b775-c2077863ba48">
<dw:input-payload  mimeType="application/xml"/>
<dw:set-payload><![CDATA[ 
 

Ответ №3:

добавление типа данных для типа mime действительно сработало для меня

Ошибка, с которой я столкнулся :

ОШИБКА 2017-03-07 12:49:50,060 [[bulk_create_poc].HTTP_Listener_Configuration.worker.01] org.mule.exception.DefaultMessagingExceptionStrategy:


Сообщение: Исключение при выполнении: полезная нагрузка.ns0#ResponseData_MT.*Карта элементов { ^ Найдено несоответствие типа для оператора выбора значения: двоичный файл, требуемое имя: дата-время, : имя или требуется : localdatetime, :имя или требуется : объект, : имя или требуется: время, : имя или требуется:массив, : имя или требуется : дата, : имя или требуется: localtime, :имя или требуется: период, :имя.

 ****Resolution that worked for me :****