Skip to content

Fix ClassCastException in parseInteger when value is a List#794

Closed
phoneben wants to merge 1 commit into
asterisk-java:mainfrom
phoneben:main
Closed

Fix ClassCastException in parseInteger when value is a List#794
phoneben wants to merge 1 commit into
asterisk-java:mainfrom
phoneben:main

Conversation

@phoneben

@phoneben phoneben commented May 31, 2026

Copy link
Copy Markdown

When Asterisk sends a duplicate field (e.g. channelstate) in a StatusEvent,
the parser collects the values into an ArrayList. parseInteger()
blindly cast the value to String causing a ClassCastException
that kills the AMI connection.

Fixed by adding List handling consistent with the existing parseString() method.

Resolves #793

…ue is a List

When Asterisk sends a duplicate field (e.g. channelstate) in a StatusEvent,
the parser collects the values into an ArrayList. parseInteger(), parseDouble()
and parseLong() blindly cast the value to String causing a ClassCastException
that kills the AMI connection.

Fixed by adding List handling consistent with the existing parseString() method.

Resolves asterisk-java#793
@seanbright

Copy link
Copy Markdown
Member

What is a StatusEvent?

@phoneben

phoneben commented Jun 1, 2026

Copy link
Copy Markdown
Author
2026-05-31 13:01:57.518 ERROR 829461 --- [tion-1-Reader-0] o.a.manager.util.EventAttributesHelper   : Unable to set property 'channelstate' to '[6, 6]' on org.asteriskjava.manager.event.StatusEvent class java.util.ArrayList cannot be cast to class java.lang.String (java.util.ArrayList and java.lang.String are in module java.base of loader 'bootstrap')

java.lang.ClassCastException: class java.util.ArrayList cannot be cast to class java.lang.String (java.util.ArrayList and java.lang.String are in module java.base of loader 'bootstrap')
        at org.asteriskjava.manager.util.EventAttributesHelper.parseInteger(EventAttributesHelper.java:150) ~[asterisk-java-3.41.0.jar!/:na]
        at org.asteriskjava.manager.util.EventAttributesHelper.setAttributes(EventAttributesHelper.java:124) ~[asterisk-java-3.41.0.jar!/:na]
        at org.asteriskjava.manager.internal.EventBuilderImpl.buildEvent(EventBuilderImpl.java:232) ~[asterisk-java-3.41.0.jar!/:na]
        at org.asteriskjava.manager.internal.CustomEventBuilderImpl.buildEvent(CustomEventBuilderImpl.java:23) ~[classes!/:na]
        at org.asteriskjava.manager.internal.ManagerReaderImpl.buildEvent(ManagerReaderImpl.java:364) ~[asterisk-java-3.41.0.jar!/:na]
        at org.asteriskjava.manager.internal.ManagerReaderImpl.run(ManagerReaderImpl.java:215) ~[asterisk-java-3.41.0.jar!/:na]
        at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]

@seanbright

Copy link
Copy Markdown
Member

You didn’t answer the question. What module emits it?

@phoneben phoneben changed the title Fix ClassCastException in parseInteger/parseDouble/parseLong when value is a List Fix ClassCastException in parseInteger when value is a List Jun 1, 2026
@phoneben

phoneben commented Jun 1, 2026

Copy link
Copy Markdown
Author

I'm not a Java developer. From the stack trace I can see it's org.asteriskjava.manager.event.StatusEvent and the field is channelstate. I assume it maps to the AMI Status event by convention but I'm not 100% certain which Asterisk module emits it.

@phoneben

phoneben commented Jun 1, 2026

Copy link
Copy Markdown
Author

parseDouble/parseLong was not delt as i want first to make sure i was correct

@seanbright

Copy link
Copy Markdown
Member

Can you provide the contents of the problematic Status event?

@phoneben

phoneben commented Jun 1, 2026

Copy link
Copy Markdown
Author

Not from the current log, unfortunately.

The log only captured the asterisk-java parser failure:

Unable to set property 'channelstate' to '[6, 6]' on org.asteriskjava.manager.event.StatusEvent

So I can confirm that asterisk-java received duplicate channelstate values and had already represented them as a List, but I do not have the original raw AMI frame showing the full Event: Status payload.

@phoneben

phoneben commented Jun 1, 2026

Copy link
Copy Markdown
Author

@seanbright can it be a private parser sending in wrong formatted request ?

@phoneben

phoneben commented Jun 2, 2026

Copy link
Copy Markdown
Author

@seanbright you where correct the issue look like underlying parser closing this for now

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Development

Successfully merging this pull request may close these issues.

ClassCastException: ArrayList cannot be cast to String on channelstate field in StatusEvent with Asterisk 20

2 participants