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).
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
“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…
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).