You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by "Benoit Tellier (Jira)" <se...@james.apache.org> on 2022/10/04 02:29:00 UTC

[jira] [Closed] (JAMES-3828) ava.lang.ClassCastException: class [B cannot be cast to class org.apache.mailet.AttributeValue ([B is in module java.base of loader 'bootstrap'; org.apache.mailet.AttributeValue is in unnamed module of loader 'app')

     [ https://issues.apache.org/jira/browse/JAMES-3828?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Benoit Tellier closed JAMES-3828.
---------------------------------
    Resolution: Fixed

> ava.lang.ClassCastException: class [B cannot be cast to class org.apache.mailet.AttributeValue ([B is in module java.base of loader 'bootstrap'; org.apache.mailet.AttributeValue is in unnamed module of loader 'app')
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: JAMES-3828
>                 URL: https://issues.apache.org/jira/browse/JAMES-3828
>             Project: James Server
>          Issue Type: Bug
>          Components: Mailet Contributions
>    Affects Versions: master
>            Reporter: Benoit Tellier
>            Priority: Major
>             Fix For: 3.8.0
>
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> Got the following error today
> {code:java}
> exception	java.lang.ClassCastException: class [B cannot be cast to class org.apache.mailet.AttributeValue ([B is in module java.base of loader 'bootstrap'; org.apache.mailet.AttributeValue is in unnamed module of loader 'app')
>  at org.apache.mailet.Serializer$MapSerializer.lambda$serialize$0(Serializer.java:507)
>   at com.google.common.collect.CollectCollectors.lambda$toImmutableMap$6(CollectCollectors.java:185)
>    at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(Unknown Source)
>     at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Unknown Source)
>      at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
>       at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
>        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
>         at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
>          at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
>           at org.apache.mailet.Serializer$MapSerializer.serialize(Serializer.java:507)
>            at org.apache.mailet.Serializer$MapSerializer.serialize(Serializer.java:503)
>             at org.apache.mailet.AttributeValue.toJson(AttributeValue.java:256)
>              at org.apache.mailet.AttributeValue.duplicate(AttributeValue.java:250)
>               at org.apache.mailet.Attribute.duplicate(Attribute.java:62)
>                at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
>                 at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(Unknown Source)
>                  at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
>                   at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
>                    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
>                     at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
>                      at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
>                       at org.apache.james.server.core.MailImpl.duplicateAttributes(MailImpl.java:117)
>                        at org.apache.james.server.core.MailImpl.duplicateWithoutMessage(MailImpl.java:111)
>                         at org.apache.james.server.core.MailImpl.duplicate(MailImpl.java:97)
>                          at org.apache.james.mailetcontainer.impl.MatcherSplitter.split(MatcherSplitter.java:149)
>                           at org.apache.james.mailetcontainer.impl.MailetProcessorImpl.lambda$executeProcessingStep$3(MailetProcessorImpl.java:158)
> {code}
> The postmortem is that for XYZ reason, we ingested a Map that do not have the good actual types thus we fail serializing the associate attribute. This prevent us from duplicating the attributes and causes the mail not to be split, thus aborting mail processing.
> We do not know where invalid data was first generated.
> That's weaknesses of the Java parameter type systems.
> We shall:
>  - Avoid serializing / deserializing attributes to duplicate them and instead do something smarter
>  - Reject invalid collections/bad type parameters as early as possible.
> This is potentially due to a custom extension.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org