当前位置: 首页 > 知识库问答 >
问题:

解释XStream XML流中的神秘类名

邴越彬
2023-03-14

在通过RabbitMQ发送数据时,我使用XStream1.4.8对XML进行序列化。在某些情况下,会将类名添加到生成的XML中,从而中断反序列化。我最难解释的问题是,在生产中,某个XML值不会生成异常,而在dev中,我会得到一个异常。

<company.events.twitter.InteractionReceivedFromTwitter4>
    <header>
        <id serialization="custom">
            <com.eaio.uuid.UUID>
                <long>4426172843343876581</long>
                <long>-7002731889965487449</long>
            </com.eaio.uuid.UUID>
        </id>
        <date>1433342326156</date>
        <data class="scala.collection.immutable.Map$EmptyMap$"/>
    </header>
    <!-- more data fields -->
</company.events.twitter.InteractionReceivedFromTwitter4>
class XStreamSerializer extends Serializer {
    private val xstream = new XStream

    def serialize(x: AnyRef) = xstream.toXML(x).getBytes

    def deserialize(data: Array[Byte], contentType: String) = {
        if (contentType != serializationContentType)
            throw new IllegalArgumentException("Can only decode " + serializationContentType + ", received " + contentType)

        val res = xstream.fromXML(new ByteArrayInputStream(data))

        Option(res)
    }

    def serializationContentType = "application/xml;charset=utf-8"
}

case class MessageHeader( id: UUID,  date: Long,  data: Map[String, String])
case class InteractionReceivedFromTwitter4(header: MessageHeader,
                                           correlationId: UUID,
                                           interaction: InteractionMessage,
                                           persona: InteractionPersona)

在开发中,我从来没有看到额外的类提到。我可以通过删除字符串“”和关闭标记来“修复”这一点,但我想要理解。

实际上我并不关心在线交换的数据格式是什么。类名是否存在对我来说无关紧要。

共有1个答案

罗晨
2023-03-14

我设法找到了这个问题。我在反序列化端使用Scala2.9.0.1,在序列化端使用Scala2.11.4。Scala2.11生成的Java对象在结构上不同于Scala2.9.0.1Java对象,这应该可以解释这种差异。

我还在我使用的UUID库中找到了一个差异,反序列化端为3.4,序列化端为3.2。

 类似资料:
  • 对于下面的方法,调用神秘(45)时,输出为“1 0 1 1 0:2 5 11 22 45”,我明白为什么“1 0 1 1 0:”打印出来,但不明白冒号后“2 5 11 22 45”是怎么打印出来的,有人能给我解释一下吗?我试着写出来,但就是想不通。

  • 我使用的是MGSplitViewClass(链接),我很难正确设置UICollectionView的大小。在上述拆分视图中,我在主视图中有一组四个UIView,其中包含更健壮的视图(表视图、标签组和集合视图)。 首先,我尝试在nib中添加UICollectionView,并通过编程创建了一个集合视图控制器,并将其连接到nib的集合视图。我一试collectionViewController,这就失

  • 我正在学习卷积神经网络,并试图弄清楚数学计算是如何发生的。假设有一个输入图像有3个通道(RGB),所以图像的形状是28*28*3。考虑为下一层应用大小为5*5*3和步幅为1的6个过滤器。这样,我们将在下一层得到24*24*6。由于输入图像是RGB图像,每个滤波器的24*24图像如何解释为RGB图像,即每个滤波器的内部构造的图像大小为24*24*3?

  • 我在一个JBoss Seam应用程序中使用RestEasy,我得到了一个奇怪的异常,这个异常信息不是很丰富。我的Seam 2.2.2.ga应用程序中有以下罐子: jaxrs-api-2.2.0.ga.jar resteasy-jaxrs-2.2.0.ga.jar jboss-seam-resteasy-2.2.0.ga.jar

  • 我试图在MariaDB 10.2中创建一个简单的过程,但遇到了有关变量定义的问题。 我收到(conn:107)您的SQL语法有错误;查看与您的MariaDB服务器版本对应的手册,了解在我声明变量时,在第3行消息的“”附近使用的正确语法。 我读了MariaDB留档,它说一个变量是这样定义的DECLAREvar_name[,var_name]... type[DEFAULT value] 我错在哪里?

  • 我最近注意到我在Windows中的路径设置有指向旧版本Java的不正确指针。奇怪的是,java-version命令仍然在命令提示符下工作,它给出了与我安装的最新JRE相对应的java版本。这也是控制面板中表示的版本,也是Eclipse引用的VM版本。我感到困惑的是,如果路径设置不正确,命令提示符如何知道在哪里找到java可执行文件?