Hi,

can you try some newer version of broker, like 5.5.1 and see if problem is
still there?

Regards
-- 
Dejan Bosanac
Senior Software Engineer | FuseSource Corp.
dej...@fusesource.com | fusesource.com
skype: dejan.bosanac | twitter: @dejanb
blog: http://www.nighttale.net
ActiveMQ in Action: http://www.manning.com/snyder/



On Thu, Mar 1, 2012 at 9:44 AM, cghersi <cristiano.ghe...@abodata.com>wrote:

> 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