Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ADT有效负载的JmsTemplate.receiveAndConvert()问题_Java_Spring - Fatal编程技术网

Java ADT有效负载的JmsTemplate.receiveAndConvert()问题

Java ADT有效负载的JmsTemplate.receiveAndConvert()问题,java,spring,Java,Spring,我正在尝试使用Spring的JmsTemplate从队列同步接收消息。我的设置非常简单,并且基于文章。无论何时调用receiveAndConvert(),我都会收到以下错误: JMS-137:必须为具有ADT的目标指定有效负载工厂 有效载荷 我知道这与将有效负载转换为对象实例的过程有关。然而,正如您可以在下面检查的,我已经设置了弹簧基准转换器。另外,使用相同的设置发送消息也可以正常工作。 配置: <beans xmlns="http://www.springframework.org/sc

我正在尝试使用Spring的JmsTemplate从队列同步接收消息。我的设置非常简单,并且基于文章。无论何时调用receiveAndConvert(),我都会收到以下错误:

JMS-137:必须为具有ADT的目标指定有效负载工厂 有效载荷

我知道这与将有效负载转换为对象实例的过程有关。然而,正如您可以在下面检查的,我已经设置了弹簧基准转换器。另外,使用相同的设置发送消息也可以正常工作。

配置:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:lang="http://www.springframework.org/schema/lang" xmlns:orcl="http://www.springframework.org/schema/data/orcl"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/lang 
        http://www.springframework.org/schema/lang/spring-lang.xsd
        http://www.springframework.org/schema/batch 
        http://www.springframework.org/schema/batch/spring-batch.xsd
        http://www.springframework.org/schema/data/orcl
        http://www.springframework.org/schema/data/orcl/spring-data-orcl-1.0.xsd">
    <!-- This job processes transactions in the pending queue and create entries 
        in the processed transactions table. -->

    <!-- Enables communicating with the database -->
    <bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>database.properties</value>
    </property>
</bean>

<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource"
    destroy-method="close">
    <property name="URL" value="${jdbc.url}" />
    <property name="user" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
    <property name="connectionCachingEnabled" value="true" />
</bean>

<!-- Basic Spring Batch classes -->
<bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="jobRepository"
    class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
    <property name="transactionManager" ref="transactionManager" />
</bean>

<bean id="jobLauncher"
    class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
    <property name="jobRepository" ref="jobRepository" />
</bean>

    <!-- Beans used by the job -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <constructor-arg index="0" ref="dataSource" />
    </bean>

    <!-- Connection Factory used by the JmsTemplate -->
    <orcl:aq-jms-connection-factory id="connectionFactory"
        data-source="dataSource" use-local-data-source-transaction="true" />

    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="sessionTransacted" value="true" />
        <property name="connectionFactory" ref="connectionFactory" />
        <property name="defaultDestinationName" value="SPRINGBATCH.PENDING_TRAN_ITEM_QUEUE" />
        <property name="receiveTimeout" value="100"/>
        <property name="messageConverter">
            <bean
                class="org.springframework.data.jdbc.jms.support.converter.oracle.MappingAdtMessageConverter">
                <constructor-arg>
                    <bean
                        class="org.springframework.data.jdbc.jms.support.oracle.StructDatumMapper">
                        <constructor-arg index="0"
                            value="SPRINGBATCH.PENDING_TRANSACTION_ITEM" />
                        <constructor-arg index="1"
                            value="com.sbe.jobs.createPendingTransactionsAndLoadQueue.PendingTransactionKey" />
                    </bean>
                </constructor-arg>
            </bean>
        </property>
    </bean>

数据库.properties

我最终发现了问题所在。似乎
JmsTemplate
不支持ADT类型,因此:

自定义高级数据类型(ADT)(创建类型xxx作为对象):

这个 负载类型需要一个名为 AdtMessageListenerContainer。此侦听器容器还可以使用 带有Oracle AQ ADT特定消息转换器的MessageListenerAdapter 指定为MappingAdtMessageConverter。此转换器与 DatumMapper接口的实现。有关详细信息,请参见下文 配置详细信息


您可以发布完整的堆栈跟踪和引发异常的代码吗?