Не удается сериализовать объектный тип Clob в Mulesoft - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь получить информацию из таблицы с атрибутом типа Clob, вот как выглядит объект в полезной нагрузке:

TypedValue[value: 'org.mule.runtime.core.internal.streaming.bytes.ManagedCursorStreamProvider@1c11df37', dataType: 'SimpleDataType{type=java.io.InputStream, mimeType='text/plain'}']

Это атрибуты BGQUEUE_EXEC_STATUS_VALUE и BGQUEUE_EXEC_VALUE, используемые в следующих flow:

    <flow name="SYS_TBGQUEUEMigrationFlow" doc:id="1302cd81-6b21-424b-9bb8-b097d2ab0c3a" >
        <db:select doc:name="Select SYS_TBGQUEUE from Oracle DB" doc:id="c7b33299-b772-4134-abdd-c7dcb3ad630a" config-ref="MYCAREER_DEV_DB" >
            <db:sql >SELECT * FROM SYS_TBGQUEUE</db:sql>
        </db:select>
        <batch:job jobName="sysLogicBatch_Job" doc:id="08898cbe-62c5-4028-9f4f-dc8be9e6d0d9" >
            <batch:process-records >
                <batch:step name="Batch_Step" doc:id="836a7495-415c-4d5f-945a-03f1f2358cd8" >
                    <batch:aggregator doc:name="Batch Aggregator" doc:id="0425e88e-5e07-4f04-9016-872ccef025bd" streaming="true">
                        <foreach doc:name="For Each" doc:id="a2af7287-961e-4c1e-bd13-993d00e75370">
                            <db:stored-procedure doc:name="Insert into SYS_TBGQUEUE" doc:id="692971ea-d05c-430b-9ae4-3fe8b6d439dc" config-ref="Database_Config">
                                <db:sql>{call InsertIntoBgQueue (:BGQUEUE_CODE, :BGQUEUETYPE_CODE, :IDENTITY_CODE, :BGQUEUE_DATE_INSERT, :BGQUEUE_LOCK_WORKER_ID, 
:BGQUEUE_EXEC_START_DATE, :BGQUEUE_EXEC_EXPIRE_DATE, :BGQUEUE_EXEC_VALUE, :BGQUEUE_EXEC_RETRIES, 
:BGQUEUE_EXEC_HEARTBEAT_DATE, :BGQUEUE_EXEC_END_DATE, :BGQUEUE_EXEC_STATUS_ENUM, :BGQUEUE_EXEC_STATUS_VALUE, :BGQUEUE_STATUS)}</db:sql>
                                <db:input-parameters><![CDATA[#[{
    BGQUEUE_CODE                : payload.bgqueue_code,
    BGQUEUETYPE_CODE            : payload.bgqueuetype_code,
    IDENTITY_CODE               : payload.identity_code,
    BGQUEUE_DATE_INSERT : payload.bgqueue_date_insert,
    BGQUEUE_LOCK_WORKER_ID      : payload.bgqueue_lock_worker_id,
    BGQUEUE_EXEC_START_DATE         : payload.bgqueue_exec_start_date,
    BGQUEUE_EXEC_EXPIRE_DATE            : payload.bgqueue_exec_expire_date,
    BGQUEUE_EXEC_VALUE          : payload.bgqueue_exec_value as String,
    BGQUEUE_EXEC_RETRIES        : payload.bgqueue_exec_retries,
    BGQUEUE_EXEC_HEARTBEAT_DATE : payload.bgqueue_exec_heartbeat_date,
    BGQUEUE_EXEC_END_DATE       : payload.bgqueue_exec_end_date,
    BGQUEUE_EXEC_STATUS_ENUM    : payload.bgqueue_exec_status_enum,
    BGQUEUE_EXEC_STATUS_VALUE   : payload.bgqueue_exec_status_value as String,
    BGQUEUE_STATUS              : payload.bgqueue_status
    }]]]></db:input-parameters>
                            </db:stored-procedure>
                        </foreach>
                    </batch:aggregator>
                </batch:step>
            </batch:process-records>
            <batch:on-complete >
                <logger level="INFO" doc:name="Logger" doc:id="a79350d8-65e9-44ac-a966-8a27036a5477" message="SYS_TBGQUEUE finished data migration." />
            </batch:on-complete>
        </batch:job>
    </flow>

Это сообщение об ошибке:

Message               : Could not dispatch records to batch queue BSQ-sysLogicBatch_Job-ab0fcad0-7b15-11ea-9403-3e6fc91c389b due to Serialization Exception
Error type            : MULE:UNKNOWN
Element               : SYS_TBGQUEUEMigrationFlow/processors/1 @ DatabaseConnectorPOC:sysLogic.xml:114
Element XML           : <batch:job jobName="sysLogicBatch_Job" doc:id="08898cbe-62c5-4028-9f4f-dc8be9e6d0d9">
<batch:process-records>
<batch:step name="Batch_Step" doc:id="836a7495-415c-4d5f-945a-03f1f2358cd8">
<batch:aggregator doc:name="Batch Aggregator" doc:id="0425e88e-5e07-4f04-9016-872ccef025bd" streaming="true">
<foreach doc:name="For Each" doc:id="a2af7287-961e-4c1e-bd13-993d00e75370">
<db:stored-procedure doc:name="Insert into SYS_TBGQUEUE" doc:id="692971ea-d05c-430b-9ae4-3fe8b6d439dc" config-ref="Database_Config">
<db:sql>{call InsertIntoBgQueue (:BGQUEUE_CODE, :BGQUEUETYPE_CODE, :IDENTITY_CODE, :BGQUEUE_DATE_INSERT, :BGQUEUE_LOCK_WORKER_ID,:BGQUEUE_EXEC_START_DATE, :BGQUEUE_EXEC_EXPIRE_DATE, :BGQUEUE_EXEC_VALUE, :BGQUEUE_EXEC_RETRIES, 
:BGQUEUE_EXEC_HEARTBEAT_DATE, :BGQUEUE_EXEC_END_DATE, :BGQUEUE_EXEC_STATUS_ENUM, :BGQUEUE_EXEC_STATUS_VALUE, :BGQUEUE_STATUS)}</db:sql>
<db:input-parameters>#[output application/java
---
{
    BGQUEUE_CODE                : payload.bgqueue_code,
    BGQUEUETYPE_CODE            : payload.bgqueuetype_code,
    IDENTITY_CODE               : payload.identity_code,
    BGQUEUE_DATE_INSERT : payload.bgqueue_date_insert,
    BGQUEUE_LOCK_WORKER_ID      : payload.bgqueue_lock_worker_id,
    BGQUEUE_EXEC_START_DATE         : payload.bgqueue_exec_start_date,
    BGQUEUE_EXEC_EXPIRE_DATE            : payload.bgqueue_exec_expire_date,
    BGQUEUE_EXEC_VALUE          : payload.bgqueue_exec_value,
    BGQUEUE_EXEC_RETRIES        : payload.bgqueue_exec_retries,
    BGQUEUE_EXEC_HEARTBEAT_DATE : payload.bgqueue_exec_heartbeat_date,
    BGQUEUE_EXEC_END_DATE       : payload.bgqueue_exec_end_date,
    BGQUEUE_EXEC_STATUS_ENUM    : payload.bgqueue_exec_status_enum,
    BGQUEUE_EXEC_STATUS_VALUE   : payload.bgqueue_exec_status_value,
    BGQUEUE_STATUS              : payload.bgqueue_status
    }]</db:input-parameters>
</db:stored-procedure>
</foreach>
</batch:aggregator>
</batch:step>
</batch:process-records>
<batch:on-complete>
<logger level="INFO" doc:name="Logger" doc:id="a79350d8-65e9-44ac-a966-8a27036a5477" message="SYS_TBGQUEUE finished data migration."></logger>
</batch:on-complete>
</batch:job>

Кто-нибудь знает, как я могу преобразовать его в строку? Спасибо!

1 Ответ

0 голосов
/ 11 апреля 2020

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

Возможно, вам потребуется преобразовать Clob в строку, прежде чем вводить пакетное задание с преобразованием, подобным этому:

( payload map {
BGQUEUE_CODE                : payload.bgqueue_code,
BGQUEUETYPE_CODE            : payload.bgqueuetype_code,
IDENTITY_CODE               : payload.identity_code,
BGQUEUE_DATE_INSERT : payload.bgqueue_date_insert,
BGQUEUE_LOCK_WORKER_ID      : payload.bgqueue_lock_worker_id,
BGQUEUE_EXEC_START_DATE         : payload.bgqueue_exec_start_date,
BGQUEUE_EXEC_EXPIRE_DATE            : payload.bgqueue_exec_expire_date,
BGQUEUE_EXEC_VALUE          : (payload.bgqueue_exec_value as String) default "",
BGQUEUE_EXEC_RETRIES        : payload.bgqueue_exec_retries,
BGQUEUE_EXEC_HEARTBEAT_DATE : payload.bgqueue_exec_heartbeat_date,
BGQUEUE_EXEC_END_DATE       : payload.bgqueue_exec_end_date,
BGQUEUE_EXEC_STATUS_ENUM    : payload.bgqueue_exec_status_enum,
BGQUEUE_EXEC_STATUS_VALUE   : (payload.bgqueue_exec_status_value as String) default "",
BGQUEUE_STATUS              : payload.bgqueue_status
} ) as Iterator

«Итератор» - это просто оптимизация, которую можно удалить, если вы видите, что с этим связана ошибка (например, ошибка сеанса БД)

Затем в db: input -параметры вам нужно будет просто указать «полезную нагрузку», так как имена уже будут совпадать с теми, которые вам нужны.

...