[ https://issues.apache.org/jira/browse/PROTON-262?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13594571#comment-13594571 ]
Keith Wall commented on PROTON-262: ----------------------------------- Hi Rob, A couple of comments: 1) JNIConnection, JNISession, and JNILink#getRemoteCondition: The code to set the _remoteCondition is duplicated across three classes. This should be extracted to a utility class. _remoteCondition.setCondition(Symbol.valueOf(Proton.pn_condition_get_name(cond))); _remoteCondition.setDescription(Proton.pn_condition_get_description(cond)); JNIData data = new JNIData(Proton.pn_condition_info(cond)); if(data.next() == Data.DataType.MAP) { _remoteCondition.setInfo(data.getJavaMap()); } 2) Whilst I see that http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-transport-v1.0-os.html#type-error defines condition info as a map, the fact that the implementation will silently skip a JNIData returning a non-map type, or ignore additional values gives concern. I'd prefer to see an IllegalStateException in these unexpected scenarios to guarantee we are alerted to a misbehaving implementation. if(data.next() == Data.DataType.MAP) { _remoteCondition.setInfo(data.getJavaMap()); } // what if non-map type // what if data yields more values 3) JNIConnection, JNISession, and JNILink#close(): The code to transfer the local condition to the underlying proton-c api ( pn_condition_set_name, pn_condition_set_description) is duplicated across three classes. This should be extracted to a utility class. 4) What is the correct way for an application to determine if an ErrorCondition is populated? Would it not be more explicit if ErrorCondition had a method such as isSet() rather than forcing the caller to use #getCondition() != null? 5) It appears that if an application were to call, say, Connection#setCondition(), multiple times, it is only the last error that goes over the wire on the closure of the endpoint. I think this is reasonable, but the Javadoc on Endpoint#setCondition should note this fact. 6) ErrorCondition#_info becomes a reference to an application owned map via #setInfo, then lets this mutable state escape by #getInfo. I think the implementation would be more robust if ErrorCondition copied the incoming map on setInfo, and returned a immutable wrapper on calls #getInfo. Also to simplify client coding, if ErrorCondition#getInfo returned an emptyMap() rather than null. 7) EndpointError has been renamed ErrorCondition. What is the Proton's policy on deprecation? regards, Keith. > Fully implement (error) condtion API in Proton-J > ------------------------------------------------ > > Key: PROTON-262 > URL: https://issues.apache.org/jira/browse/PROTON-262 > Project: Qpid Proton > Issue Type: Bug > Components: proton-j > Reporter: Rob Godfrey > Assignee: Keith Wall > Fix For: 0.5 > > -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira