[ https://issues.apache.org/jira/browse/QPID-7981?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16215349#comment-16215349 ]
Gordon Sim commented on QPID-7981: ---------------------------------- {quote}Depending on the perspective of which end you are at, a single link is both incoming and outgoing. {quote} >From a given processes point of view, it is one or the other. Either it will >send messages over the link, or it will receive messages over it. {quote}So if "A link with no source will never produce outgoing messages" and " A link with no target will never permit incoming messages. " then it would seem both are needed for transfer over the link.{quote} I read those as applying to local decisions based on what was supplied by the peer. The previous sentence in each case seems to me to imply that the two 'rules' apply to outgoing and incoming in turn. {quote}The source sets the details of what dispositions etc are allowed, so if you haven't set one it would seem odd that you could send messages to someone else{quote} That is optional though. Would a source or target whose fields were all null (or a source/target represented by an empty list) be allowed in your view? To me it doesn't seem sensible to insist on sending such a source/target as it has no extra information in it. As far as rhea goes, I could make a change that simply echoed the address in the 'other' terminus by default, but to me it seems redundant. > [Java Broker] [AMQP1.0] Protocol layer assumes source and target are not null. > ------------------------------------------------------------------------------ > > Key: QPID-7981 > URL: https://issues.apache.org/jira/browse/QPID-7981 > Project: Qpid > Issue Type: Bug > Components: Java Broker > Reporter: Keith Wall > Fix For: qpid-java-broker-7.0.0 > > > Testing the Broker against Rhea's {{example/helloworld.js}} shows that the > AMQP 1.0 protocol layer fails in at least two places. > The first is if the {{Target}} (not mandatory) is omitted from the incoming > attach. > {noformat} > 2017-10-21 18:13:20,609 DEBUG [IO-/10.211.55.13:52033] (o.a.q.s.p.frame) - > RECV[/10.211.55.13:52033|0] : > Attach{name=7e65e0a0-961f-e941-b42b-262380143f76,handle=0,role=receiver,source=Source{address=examples}} > 2017-10-21 18:13:20,622 DEBUG [IO-/10.211.55.13:52033] (o.a.q.s.p.v.LinkImpl) > - Error attaching link > java.lang.NullPointerException: null > at > org.apache.qpid.server.protocol.v1_0.SendingLinkEndpoint.createConsumerTarget(SendingLinkEndpoint.java:209) > at > org.apache.qpid.server.protocol.v1_0.SendingLinkEndpoint.attachReceived(SendingLinkEndpoint.java:636) > at > org.apache.qpid.server.protocol.v1_0.SendingLinkEndpoint.establishLink(SendingLinkEndpoint.java:352) > at > org.apache.qpid.server.protocol.v1_0.AbstractLinkEndpoint.receiveAttach(AbstractLinkEndpoint.java:131) > at > org.apache.qpid.server.protocol.v1_0.LinkImpl.attach(LinkImpl.java:106) > at > org.apache.qpid.server.protocol.v1_0.Session_1_0.receiveAttach(Session_1_0.java:210) > at > org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.receiveAttach(AMQPConnection_1_0Impl.java:435) > at > org.apache.qpid.server.protocol.v1_0.type.transport.Attach.invoke(Attach.java:366) > at > org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.received(AMQPConnection_1_0Impl.java:517) > at > org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.lambda$receive$0(AMQPConnection_1_0Impl.java:469) > at java.security.AccessController.doPrivileged(Native Method) > at > org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.receive(AMQPConnection_1_0Impl.java:463) > at > org.apache.qpid.server.protocol.v1_0.framing.FrameHandler.parse(FrameHandler.java:211) > at > org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.lambda$received$11(AMQPConnection_1_0Impl.java:1316) > at java.security.AccessController.doPrivileged(Native Method) > at > org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.received(AMQPConnection_1_0Impl.java:1291) > at > org.apache.qpid.server.transport.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:134) > at > org.apache.qpid.server.transport.NonBlockingConnection.processAmqpData(NonBlockingConnection.java:606) > at > org.apache.qpid.server.transport.NonBlockingConnectionTLSDelegate.processData(NonBlockingConnectionTLSDelegate.java:136) > at > org.apache.qpid.server.transport.NonBlockingConnection.doRead(NonBlockingConnection.java:496) > at > org.apache.qpid.server.transport.NonBlockingConnection.doWork(NonBlockingConnection.java:270) > at > org.apache.qpid.server.transport.NetworkConnectionScheduler.processConnection(NetworkConnectionScheduler.java:134) > at > org.apache.qpid.server.transport.SelectorThread$ConnectionProcessor.processConnection(SelectorThread.java:563) > at > org.apache.qpid.server.transport.SelectorThread$SelectionTask.performSelect(SelectorThread.java:354) > at > org.apache.qpid.server.transport.SelectorThread$SelectionTask.run(SelectorThread.java:97) > at > org.apache.qpid.server.transport.SelectorThread.run(SelectorThread.java:521) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) > at > org.apache.qpid.server.bytebuffer.QpidByteBuffer.lambda$null$0(QpidByteBuffer.java:1396) > at java.lang.Thread.run(Thread.java:748) > {noformat} > The second is if the {{Source}} (again not mandatory) is omitted: > {noformat} > 2017-10-21 18:19:52,556 DEBUG [IO-/10.211.55.13:52035] > (o.a.q.s.p.v.f.FrameHandler) - RECV 89 bytes > 2017-10-21 18:19:52,557 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.p.frame) - > RECV[/10.211.55.13:52035|0] : > Attach{name=c2c65769-7d3b-5440-b8fb-f00badbddd0d,handle=1,role=sender,target=Target{address=examples},initialDeliveryCount=0} > 2017-10-21 18:19:52,562 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.p.frame) - > SEND[/10.211.55.13:52035|0] : > Attach{name=c2c65769-7d3b-5440-b8fb-f00badbddd0d,handle=1,role=receiver,target=Target{address=examples,durable=none,capabilities=[REJECT_UNROUTABLE, > > DELAYED_DELIVERY]},unsettled={},maxMessageSize=1000000000,offeredCapabilities=[REJECT_UNROUTABLE, > DELAYED_DELIVERY],properties={}} > 2017-10-21 18:19:52,565 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.p.frame) - > SEND[/10.211.55.13:52035|0] : > Flow{nextIncomingId=0,incomingWindow=8192,nextOutgoingId=0,outgoingWindow=2048,handle=1,deliveryCount=0,linkCredit=20000,echo=false} > 2017-10-21 18:19:52,566 DEBUG [IO-/10.211.55.13:52035] > (o.a.q.s.p.v.f.FrameHandler) - RECV 0 bytes > 2017-10-21 18:19:52,566 DEBUG [IO-/10.211.55.13:52035] > (o.a.q.s.t.NonBlockingConnection) - Written 430 bytes > 2017-10-21 18:19:52,568 DEBUG [IO-/10.211.55.13:52035] > (o.a.q.s.t.NonBlockingConnection) - Read 0 byte(s) > 2017-10-21 18:19:52,570 DEBUG [IO-/10.211.55.13:52035] > (o.a.q.s.t.NonBlockingConnection) - Read 82 byte(s) > 2017-10-21 18:19:52,571 DEBUG [IO-/10.211.55.13:52035] > (o.a.q.s.p.v.f.FrameHandler) - RECV 53 bytes > 2017-10-21 18:19:52,571 DEBUG [IO-/10.211.55.13:52035] (o.a.q.s.p.frame) - > RECV[/10.211.55.13:52035|0] : > Transfer{handle=1,deliveryId=0,deliveryTag=\x00,messageFormat=0,settled=false} > 2017-10-21 18:19:52,580 DEBUG [IO-/10.211.55.13:52035] > (o.a.q.s.p.QpidServiceLoader) - Found 3 implementations of interface > org.apache.qpid.server.plugin.MessageFormat > 2017-10-21 18:19:52,604 DEBUG [IO-/10.211.55.13:52035] > (o.a.q.s.m.AbstractConfiguredObject) - authorise returned DEFER > 2017-10-21 18:19:52,604 DEBUG [IO-/10.211.55.13:52035] > (o.a.q.s.m.AbstractConfiguredObject) - authorise returned DEFER, returing > default: ALLOWED > 2017-10-21 18:19:52,608 WARN [IO-/10.211.55.13:52035] > (o.a.q.s.p.v.f.FrameHandler) - Unexpected exception handling frame > java.lang.NullPointerException: null > at > org.apache.qpid.server.protocol.v1_0.StandardReceivingLinkEndpoint.receiveDelivery(StandardReceivingLinkEndpoint.java:262) > at > org.apache.qpid.server.protocol.v1_0.AbstractReceivingLinkEndpoint.receiveTransfer(AbstractReceivingLinkEndpoint.java:163) > at > org.apache.qpid.server.protocol.v1_0.Session_1_0.receiveTransfer(Session_1_0.java:572) > at > org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.receiveTransfer(AMQPConnection_1_0Impl.java:794) > at > org.apache.qpid.server.protocol.v1_0.type.transport.Transfer.invoke(Transfer.java:295) > at > org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.received(AMQPConnection_1_0Impl.java:517) > at > org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.lambda$receive$0(AMQPConnection_1_0Impl.java:469) > at java.security.AccessController.doPrivileged(Native Method) > at > org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.receive(AMQPConnection_1_0Impl.java:463) > at > org.apache.qpid.server.protocol.v1_0.framing.FrameHandler.parse(FrameHandler.java:211) > at > org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.lambda$received$11(AMQPConnection_1_0Impl.java:1316) > at java.security.AccessController.doPrivileged(Native Method) > at > org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.received(AMQPConnection_1_0Impl.java:1291) > at > org.apache.qpid.server.transport.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:134) > at > org.apache.qpid.server.transport.NonBlockingConnection.processAmqpData(NonBlockingConnection.java:606) > at > org.apache.qpid.server.transport.NonBlockingConnectionTLSDelegate.processData(NonBlockingConnectionTLSDelegate.java:136) > at > org.apache.qpid.server.transport.NonBlockingConnection.doRead(NonBlockingConnection.java:496) > at > org.apache.qpid.server.transport.NonBlockingConnection.doWork(NonBlockingConnection.java:270) > at > org.apache.qpid.server.transport.NetworkConnectionScheduler.processConnection(NetworkConnectionScheduler.java:134) > at > org.apache.qpid.server.transport.SelectorThread$ConnectionProcessor.processConnection(SelectorThread.java:563) > at > org.apache.qpid.server.transport.SelectorThread$SelectionTask.performSelect(SelectorThread.java:354) > at > org.apache.qpid.server.transport.SelectorThread$SelectionTask.run(SelectorThread.java:97) > at > org.apache.qpid.server.transport.SelectorThread.run(SelectorThread.java:521) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) > at > org.apache.qpid.server.bytebuffer.QpidByteBuffer.lambda$null$0(QpidByteBuffer.java:1396) > at java.lang.Thread.run(Thread.java:748) > {noformat} > Default source and target to empty objects appears to resolve the problem. > The protocol tests should be strengthen to cover these cases/ -- This message was sent by Atlassian JIRA (v6.4.14#64029) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org