Advanced queue

7 respostas
J

pessoal,

to com uma duvida em como enfileirar mensagem.

No codigo abaixo:
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();

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?

7 Respostas

T

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

J

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

J

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

raw_payload.setStream(b_array, b_array.length);
T

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

J

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

T

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

J

era isso mesmo, configuração do banco…

valeu pela ajuda

Criado 13 de janeiro de 2009
Ultima resposta 13 de jan. de 2009
Respostas 7
Participantes 2