Java oracle.AQ.AQOracleSQLException:列类型无效

Java oracle.AQ.AQOracleSQLException:列类型无效,java,oracle,spring-boot,exception,oracle-aq,Java,Oracle,Spring Boot,Exception,Oracle Aq,我试图通过java调用DBMS_AQ,但在调用enqueue方法时出现以下异常(Spring boot)。在enqueing时,我使用一个java实体,它类似于队列负载数据的dbms对象。 请帮忙 @SpringBootTest(classes = OrderProvisioningApplication.class) @RunWith(SpringRunner.class) public class AqConnectionTest { @Autowired private DataSour

我试图通过java调用DBMS_AQ,但在调用enqueue方法时出现以下异常(Spring boot)。在enqueing时,我使用一个java实体,它类似于队列负载数据的dbms对象。 请帮忙

@SpringBootTest(classes = OrderProvisioningApplication.class)
@RunWith(SpringRunner.class)
public class AqConnectionTest {

@Autowired
private DataSource dataSource;

@Test
public void AqConnectionPublishTest() throws Exception{
    java.sql.Connection aqconn = dataSource.getConnection();
    aqconn.setAutoCommit(false);
    OracleConnection oracleConnection = aqconn.unwrap(OracleConnection.class);
    AQSession aqsession = null;

    // Register the Oracle AQ Driver
    Class.forName("oracle.AQ.AQOracleDriver");
    try {
        AQEnqueueOption enqueueOption = new AQEnqueueOption();
        enqueueOption.setVisibility(AQEnqueueOption.VISIBILITY_ONCOMMIT);

        aqsession = AQDriverManager.createAQSession(oracleConnection);
        AQQueue queue = aqsession.getQueue("somehost", "somename");
        AQMessage msg = ((AQOracleQueue) queue).createMessage();
        AQMessageProperty msgProp = new AQMessageProperty();
        msgProp.setExpiration(AQMessageProperty.EXPIRATION_NEVER);
        AQObjectPayload payload = msg.getObjectPayload();

        SwscOrderEventMessageObject payloadData = new SwscOrderEventMessageObject(new BigDecimal(123456),
                new BigDecimal(123456), "Hello", new Date(), new BigDecimal (123456), "ABC" , new Date());
        payload.setPayloadData(payloadData);
        msg.setObjectPayload(payload);
        queue.startEnqueue();
        queue.enqueue(enqueueOption, msg);
        aqconn.commit();
        System.out.println("Message succesfully enqueued..");
    }
    catch (Exception ex) {
        ex.printStackTrace();
    }
    finally {
        aqsession.close();
        aqconn.close();
    }
}


}
用于制造有效载荷的实体如下所示:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class SwscOrderEventMessageObject implements CustomDatum{

private BigDecimal headerId;

private BigDecimal lineId;

private String message;

private Date eShipConfirmDate;

private BigDecimal holdIn;

private String deliveryId;

private Date fileGenerationDate;

@Override
public Datum toDatum(OracleConnection arg0) throws SQLException {
    // TODO Auto-generated method stub
    return null;
}
}
发生以下异常堆栈跟踪:

oracle.AQ.AQOracleSQLException: Invalid column type

at oracle.AQ.AQOracleQueue.enqueue(AQOracleQueue.java:1268)
at com.cisco.csit.shipconfirm.test.AqConnectionTest.AqConnectionPublishTest(AqConnectionTest.java:61)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:73)
at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:83)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
这是我在DB中的队列:

BEGIN SYS.DBMS_AQADM.STOP_QUEUE ( QUEUE_NAME => 'ABC'); SYS.DBMS_AQADM.DROP_QUEUE ( QUEUE_NAME => 'ABC'); END; 

BEGIN SYS.DBMS_AQADM.CREATE_QUEUE ( QUEUE_NAME => 'ABC ,
QUEUE_TABLE => 'XYZ ,
QUEUE_TYPE => SYS.DBMS_AQADM.NORMAL_QUEUE ,
MAX_RETRIES => 5 ,
RETRY_DELAY => 0 ,
RETENTION_TIME => 0 ); END;

如何创建队列?队列表中的有效负载类型是什么?您是如何实现自定义数据的?在您的代码中,我只看到空方法。您的实体类应该实现SQLData,而不是CustomDatum。