[ 
https://issues.apache.org/jira/browse/ARTEMIS-4462?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17777662#comment-17777662
 ] 

Robbie Gemmell commented on ARTEMIS-4462:
-----------------------------------------

The 5.x broker accepting the message because it isnt currently decoding it for 
what you are doing, doesnt mean the payload is actually valid to its 
expectations. It just means it isnt currently doing anything that makes it 
notice that it isnt. 

There are numerous uses of ActiveMQTextMessage in the overall broker ActiveMQ 
5.x codebase. If you go and look at the management bits in the broker module 
you will find it using ActiveMQTextMessage and calling getText(), which will do 
a UTF-8 decode using the very same 
org.apache.activemq.util.MarshallingSupport.readUTF8() method that Artemis is 
using; i.e the 5.x broker does expect the OpenWire TextMessage payload to be 
UTF-8. The openwire-legacy module used by the 5.x broker, has numerous uses of 
the ActiveMQTextMessage class. The 5.x brokers various protocol modules use 
ActiveMQTextMessage to handle the OpenWire text message, involving explicit 
retrievals of strings that will be UTF-8 decoded using that very same method, 
since the 5.x broker does expect OpenWire TextMessage to have UTF8 payload. The 
java activemq-client module is essentially the defacto OpenWire reference 
implementation and it clearly shows its expected an OpenWire TextMessage 
payload is UTF8.

In any case, as Artemis operates it needs to read the OpenWire TextMessage 
payload, and it does so using that OpenWire impl from the 5.x activemq-client, 
meaning it will do so using UTF-8 the same way that 5.x client and broker do 
since its expected OpenWire TextMessage payloads are valid UTF-8 encodings.

> Non-UTF-8 messages containing special characters are not supported
> ------------------------------------------------------------------
>
>                 Key: ARTEMIS-4462
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-4462
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>    Affects Versions: 2.30.0
>            Reporter: Liviu Citu
>            Priority: Major
>
> When a text message non-UTF-8 (ISO-8859-15) containing special characters is 
> sent from ActiveMQ CPP client to Artemis, an exception 
> "java.io.UTFDataFormatException" is seen in Artemis server log.
> Although the exception is thrown as a warning, the message gets rejected by 
> the server.
> Below the Artemis server log:
>  
> {noformat}
> 2023-09-29 11:34:32,736 WARN  
> [org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection] 
> Errors occurred during the buffering operation
>  
> java.io.UTFDataFormatException: null
>         at 
> org.apache.activemq.util.MarshallingSupport.convertUTF8WithBuf(MarshallingSupport.java:386)
>  ~[activemq-client-5.17.2.jar:5.17.2]
>         at 
> org.apache.activemq.util.MarshallingSupport.readUTF8(MarshallingSupport.java:358)
>  ~[activemq-client-5.17.2.jar:5.17.2]
>         at 
> org.apache.activemq.artemis.core.protocol.openwire.OpenWireMessageConverter.writeTextType(OpenWireMessageConverter.java:233)
>  ~[artemis-openwire-protocol-2.30.0.jar:2.30.0]
>         at 
> org.apache.activemq.artemis.core.protocol.openwire.OpenWireMessageConverter.inbound(OpenWireMessageConverter.java:128)
>  ~[artemis-openwire-protocol-2.30.0.jar:2.30.0]
>         at 
> org.apache.activemq.artemis.core.protocol.openwire.amq.AMQSession.send(AMQSession.java:376)
>  ~[artemis-openwire-protocol-2.30.0.jar:2.30.0]
>         at 
> org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection$CommandProcessor.processMessage(OpenWireConnection.java:1671)
>  ~[artemis-openwire-protocol-2.30.0.jar:2.30.0]
>         at 
> org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:769) 
> ~[activemq-client-5.17.2.jar:5.17.2]
>         at 
> org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection.act(OpenWireConnection.java:369)
>  ~[artemis-openwire-protocol-2.30.0.jar:2.30.0]
>         at 
> org.apache.activemq.artemis.utils.actors.ThresholdActor.doTask(ThresholdActor.java:68)
>  ~[artemis-commons-2.30.0.jar:?]
>         at 
> org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68)
>  ~[artemis-commons-2.30.0.jar:?]
>         at 
> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:57)
>  ~[artemis-commons-2.30.0.jar:?]
>         at 
> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:32)
>  ~[artemis-commons-2.30.0.jar:?]
>         at 
> org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68)
>  ~[artemis-commons-2.30.0.jar:?]
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
>  [?:?]
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
>  [?:?]
>         at 
> org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118)
>  [artemis-commons-2.30.0.jar:?]
> 2023-09-29 11:34:32,753 WARN  
> [org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection] 
> Errors occurred during the buffering operation
> org.apache.activemq.artemis.api.core.ActiveMQException: null
>         at 
> org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection$CommandProcessor.processMessage(OpenWireConnection.java:1674)
>  ~[artemis-openwire-protocol-2.30.0.jar:2.30.0]
>         at 
> org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:769) 
> ~[activemq-client-5.17.2.jar:5.17.2]
>         at 
> org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection.act(OpenWireConnection.java:369)
>  ~[artemis-openwire-protocol-2.30.0.jar:2.30.0]
>         at 
> org.apache.activemq.artemis.utils.actors.ThresholdActor.doTask(ThresholdActor.java:68)
>  ~[artemis-commons-2.30.0.jar:?]
>         at 
> org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68)
>  ~[artemis-commons-2.30.0.jar:?]
>         at 
> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:57)
>  ~[artemis-commons-2.30.0.jar:?]
>         at 
> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:32)
>  ~[artemis-commons-2.30.0.jar:?]
>         at 
> org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68)
>  ~[artemis-commons-2.30.0.jar:?]
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
>  [?:?]
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
>  [?:?]
>         at 
> org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118)
>  [artemis-commons-2.30.0.jar:?]
> 2023-09-29 11:34:32,755 WARN  
> [org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection] 
> Errors occurred during the buffering operation
> java.io.UTFDataFormatException: null
>  
> {noformat}
>  
> Just create a small test program using ActiveMQ CPP and send a message to 
> Artemis containing a french or german specific character.
>  
> I have found an old discussion from ActiveMQ Community but it was focused on 
> ActiveMQ CPP  rather on Artemis.
> [https://lists.apache.org/thread/vywv1gk32mkhvj7sghnvlf7ng5zb1obp]
>  
> This is a regression compared with ActiveMQ Classic which does not have this 
> issue.
> Does Artemis support non-UTF-8 encoding? Do we need now to encode all 
> messages to UTF-8 before sending them to the server? Similarly to decode them 
> upon receiving?
> This will cause some problems on our end because:
>  * we have many clients already using the ActiveMQ classic and migrating them 
> to Artemis will cause issues when migrating KahaDB to Artemis because all the 
> messages have to be encoded to UTF-8 otherwise they will not work in Artemis
>  * encoding/decoding every message will impact the overall performance. We 
> have applications handling thousands of messages every day and conversion of 
> these messages will increase the time spent during communication with JMS 
> broker
>  



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

Reply via email to