You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
There is a bug in the class NotificationClassObject.validateProperty. When updating the property priority, the following error occurs:
java.lang.ClassCastException: com.serotonin.bacnet4j.type.constructed.SequenceOf cannot be cast to com.serotonin.bacnet4j.type.constructed.BACnetArray
at com.serotonin.bacnet4j.obj.NotificationClassObject.validateProperty(NotificationClassObject.java:117)
at com.serotonin.bacnet4j.obj.BACnetObject.writeProperty(BACnetObject.java:486)
at com.serotonin.bacnet4j.service.confirmed.WritePropertyRequest.handle(WritePropertyRequest.java:102)
at com.serotonin.bacnet4j.transport.DefaultTransport.handleConfirmedRequest(DefaultTransport.java:870)
at com.serotonin.bacnet4j.transport.DefaultTransport.incomingConfirmedRequest(DefaultTransport.java:827)
at com.serotonin.bacnet4j.transport.DefaultTransport.receiveAPDU(DefaultTransport.java:640)
at com.serotonin.bacnet4j.transport.DefaultTransport.receiveImpl(DefaultTransport.java:578)
at com.serotonin.bacnet4j.transport.DefaultTransport.run(DefaultTransport.java:498)
at java.lang.Thread.run(Thread.java:750)
In the source code, BACnetArray must be changed to SequenceOf
protected boolean validateProperty(final ValueSource valueSource, final PropertyValue value)
throws BACnetServiceException {
if (PropertyIdentifier.priority.equals(value.getPropertyIdentifier())) {
final BACnetArray<UnsignedInteger> priority = value.getValue(); // <- type must be changed to SequenceOf
if (priority.getCount() != 3)
throw new BACnetServiceException(ErrorClass.property, ErrorCode.valueOutOfRange);
}
return false;
}
The updated/extended test unit for the Notification class shows that the comparison must always be done as SequenceOf, even if the BACnetArray was written.
// Neopsis - update priority remotely:
RequestUtils.writeProperty(d2, rd1, nc.getId(), PropertyIdentifier.priority,
new BACnetArray<UnsignedInteger>( new UnsignedInteger(10),
new UnsignedInteger(20),
new UnsignedInteger(30)));
Encodable ret = RequestUtils.getProperty(d2, rd1, nc.getId(), PropertyIdentifier.priority);
assertEquals(ret, new SequenceOf<UnsignedInteger>(new UnsignedInteger(10),
new UnsignedInteger(20), new UnsignedInteger(30)));
// Neopsis - update priority locally:
nc.writePropertyInternal(PropertyIdentifier.priority,
new BACnetArray<UnsignedInteger>( new UnsignedInteger(10),
new UnsignedInteger(20),
new UnsignedInteger(30)));
ret = RequestUtils.getProperty(d2, rd1, nc.getId(), PropertyIdentifier.priority);
assertEquals(ret, new SequenceOf<UnsignedInteger>(new UnsignedInteger(10),
new UnsignedInteger(20), new UnsignedInteger(30)));
The text was updated successfully, but these errors were encountered:
The error is because Priority prooperty NC Object is of BACnetArray Data type whereas BACnet4J assigned its datatype as Sequence of. Sequence data type is typically used for List Data type in BACnet.
There is a bug in the class NotificationClassObject.validateProperty. When updating the property
priority
, the following error occurs:In the source code, BACnetArray must be changed to SequenceOf
The updated/extended test unit for the Notification class shows that the comparison must always be done as SequenceOf, even if the BACnetArray was written.
The text was updated successfully, but these errors were encountered: