Hi all,

I'm using ActiveMQ 5.3.0 under OSGi environment from two years without any
notable issue.

Now, I need to add authorization management for users publishing/subscribing
to particular topics.
For this purpose, I developed a plugin which implements
org.apache.activemq.security.MessageAuthorizationPolicy: in the method 

    public boolean isAllowedToConsume(ConnectionContext context, Message
message)

where I read the incoming message, I check that the current user is allowed
to consume such a message and I return true/false accordingly to this check.
In particular, I use text messages (short XML fragments...), so, I use this
snippet to read the current TextMessage:

    if (message instanceof TextMessage) {
       String xmlText = "";
       try {
           xmlText = xml.getText();
           System.out.println(xmlText);
           ... //parse the message and check for permission...
        } catch (JMSException e) {
            ... //manage exception
        }
    }

It seems to me (but maybe I'm wrong!!) that this code creates a race with
the code contained in org.apache.activemq.openwire.v5.MessageMarshaller:

    public void tightMarshal2(OpenWireFormat wireFormat, Object o,
DataOutput dataOut, BooleanStream bs) throws IOException {
       ...
       tightMarshalByteSequence2(info.getContent(), dataOut, bs); //here,
info.getContent() is null!!
       ...
    }

and in fact I receive a NullPointerException whose stacktrace is:
    
     Exception in thread "BrokerService" 
     java.lang.NullPointerException
        at
org.apache.activemq.openwire.v5.BaseDataStreamMarshaller.tightMarshalByteSequence2(BaseDataStreamMarshaller.java:431)
        at
org.apache.activemq.openwire.v5.MessageMarshaller.tightMarshal2(MessageMarshaller.java:180)
        at
org.apache.activemq.openwire.v5.ActiveMQMessageMarshaller.tightMarshal2(ActiveMQMessageMarshaller.java:89)
        at
org.apache.activemq.openwire.v5.ActiveMQTextMessageMarshaller.tightMarshal2(ActiveMQTextMessageMarshaller.java:89)
        at
org.apache.activemq.openwire.OpenWireFormat.tightMarshalNestedObject2(OpenWireFormat.java:430)
        at
org.apache.activemq.openwire.v5.BaseDataStreamMarshaller.tightMarshalNestedObject2(BaseDataStreamMarshaller.java:136)
        at
org.apache.activemq.openwire.v5.MessageDispatchMarshaller.tightMarshal2(MessageDispatchMarshaller.java:105)
        at
org.apache.activemq.openwire.OpenWireFormat.marshal(OpenWireFormat.java:240)
        at
org.apache.activemq.transport.tcp.TcpTransport.oneway(TcpTransport.java:166)
        at
org.apache.activemq.transport.InactivityMonitor.oneway(InactivityMonitor.java:237)
        at
org.apache.activemq.transport.TransportFilter.oneway(TransportFilter.java:83)
        at
org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:104)
        at
org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:40)
        at
org.apache.activemq.broker.TransportConnection.dispatch(TransportConnection.java:1190)
        at
org.apache.activemq.broker.TransportConnection.processDispatch(TransportConnection.java:779)
        at
org.apache.activemq.broker.TransportConnection.iterate(TransportConnection.java:815)
        at
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
        at
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown 
Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

Now, if I remove the snippet to read the XML content of the message in
isAllowedToConsume(...), all seeems returning fine, but I need such a
control!!!

So, is there a way to correctly read a TextMessage without affecting other
consumers?

Thank you very much and sorry for the long question!!

Bye
cghersi

--
View this message in context: 
http://activemq.2283324.n4.nabble.com/ActiveMQ-NullPointerException-on-broker-while-checking-for-authorization-tp4434405p4434405.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to