Advanced queue

pessoal,

to com uma duvida em como enfileirar mensagem.

No codigo abaixo:

[code] AQQueueTable q_table;
AQQueue queue;
AQMessage message;
AQRawPayload raw_payload;
AQEnqueueOption enq_option;
String test_data = “new message”;
AQDequeueOption deq_option;
byte[] b_array;
Connection db_conn;

    db_conn = ((AQOracleSession)aq_sess).getDBConnection();

    /* Get a handle to queue table - aq_table4 in aqjava schema: */
    q_table = aq_sess.getQueueTable ("schema1", "TABELA1");
    System.out.println("Successful getQueueTable");  

    /* Get a handle to a queue - aq_queue4 in aquser schema: */
    queue = aq_sess.getQueue ("schema1", FILA_PROCESSAR);
    System.out.println("Successful getQueue");  

    /* Creating a message to contain raw payload: */
    message = queue.createMessage();

    /* Get handle to the AQRawPayload object and populate it with raw data: */
    b_array = test_data.getBytes();
    raw_payload = message.getRawPayload();

    raw_payload.setStream(b_array, b_array.length);

    /* Creating a AQEnqueueOption object with default options: */
    enq_option = new AQEnqueueOption();

    /* Enqueue the message: */
    queue.enqueue(enq_option, message);
    System.out.println("Successful enqueue");  

    db_conn.commit();[/code]

Mas to tendo erro de NullPointerException na linha 26, onde raw_payload ta recebendo nulo. Alguem sabe me dizer porque ta chegando valor nulo, sendo que a mensagem foi passada?

Ajuda quem sabe se ajudar. Você sabe como imprimir o stack trace desse erro? Se souber fazer isso, dá para saber em que linha ocorreu o null pointer exception, e por conseguinte dá para saber que variável está com o valor null (por exemplo, pode ser que algum dos métodos getAlgumaCoisa tenha retornado null, e aí vai dar problemas na mesma linha ou na linha seguinte).

Thingol,

o erro eh esse:

Successfully created AQSession Successful getQueueTable Successful getQueue Source breakpoint occurred at line 222 of BuscadorMensagem.java. java.lang.NullPointerException: Exception in thread "main" java.lang.NullPointerException at br.gov.mt.sefaz.cte.util.fila.BuscadorMensagem.runTest(BuscadorMensagem.java:225) at br.gov.mt.sefaz.cte.util.fila.BuscadorMensagem.main(BuscadorMensagem.java:185) Process exited.

Lembrando que o codigo que mostrei, faz parte dessa classe buscadorMensagem

Ah mais um detalhe, a linha 225 da classe BuscadorMensagem éh essa

 raw_payload.setStream(b_array, b_array.length);

“raw_payload = message.getRawPayload();” é a linha anterior.

Por algum motivo, o valor deve ter vindo como null. Não conheço Advanced Queue, mas dá a impressão que sua mensagem veio vazia, e você tem de checar isso antes de sair executando a linha seguinte ( raw_payload.setStream(b_array, b_array.length); ).

que veio null, eu já detectei debugando. O problema é que essas classes sao da oracle e não sou eu quem trago esses valores. Eu apenas instanciei para poder usar. Quando eu ia usar, já ta faltando informação?

essa q eh a duvida…

mas eu acho que o problema está na forma de criar a fila no banco, nem deve estar no código…

vou testar e posto o resultado.

valeu thingol

De qualquer maneira, é sempre bom preparar-se para esses casos (mensagem vazia ou mal-formada etc.) em vez de sair morrendo por qualquer NullPointerException (uma exceção que deve sempre ser evitada).

era isso mesmo, configuração do banco…

valeu pela ajuda