MUC Connection Error in IQ request processing

I am using openfire 4.0.2 with spark 2.7.7 and following is the error seen on openfire error.log.

org.jivesoftware.openfire.nio.ConnectionHandler - Closing connection due to error while processing message: http://jabber.org/protocol/muc#roomconfigRoll.DoneSales&Abc11212roldan.ronquillo@xyz.com

org.xmlpull.v1.XmlPullParserException: entity reference name can not contain character <’ (position: TEXT seen …Sales&Abc<… @1:436)

    at org.xmlpull.mxp1.MXParser.parseEntityRef(MXParser.java:2222)

    at org.jivesoftware.openfire.net.MXParser.nextImpl(MXParser.java:216)

    at org.xmlpull.mxp1.MXParser.nextToken(MXParser.java:1100)

    at org.dom4j.io.XMPPPacketReader.parseDocument(XMPPPacketReader.java:316)

    at org.dom4j.io.XMPPPacketReader.read(XMPPPacketReader.java:153)

    at org.jivesoftware.openfire.net.StanzaHandler.process(StanzaHandler.java:163)

    at org.jivesoftware.openfire.nio.ConnectionHandler.messageReceived(ConnectionHandl er.java:181)

    at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceive d(DefaultIoFilterChain.java:690)

    at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(D efaultIoFilterChain.java:417)

    at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilt erChain.java:47)

    at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceiv ed(DefaultIoFilterChain.java:765)

    at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapte r.java:109)

    at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(D efaultIoFilterChain.java:417)

    at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilt erChain.java:47)

    at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceiv ed(DefaultIoFilterChain.java:765)

    at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flus h(ProtocolCodecFilter.java:407)

    at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecF ilter.java:236)

    at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(D efaultIoFilterChain.java:417)

    at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilt erChain.java:47)

    at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceiv ed(DefaultIoFilterChain.java:765)

    at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:74)

    at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)

    at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(Ordere dThreadPoolExecutor.java:769)

    at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(Order edThreadPoolExecutor.java:761)

    at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThr eadPoolExecutor.java:703)

    at java.lang.Thread.run(Thread.java:745)

Anyone come across this earlier?

Openfire is receiving dodgy XML;

Sales&Abc

should be

Sales&Abc

I don’t know what’s sending it - is it an external client, or an internal (to Openfire) process? If the former, then the client should be fixed. If the latter, then some un-escaped data is being sent - just not sure from where!

It is sent from spark 2.7.7. Wondering how it is sending this without escaping it.