XStream 是一个简单的库,用于将对象序列化为 XML 并返回。它不需要任何映射,并能生成干净的 XML。
关于 XStream 的更多信息,请看 XStream 网站。Spring 集成类位于 org.springframework.oxm.xstream 包中。
使用 XStreamMarshaller
XStreamMarshaller 不需要任何配置,可以直接在应用程序上下文中进行配置。为了进一步定制 XML,你可以设置一个别名映射,它由映射到类的字符串别名组成,如下例所示:
<beans>
<bean id="xstreamMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="aliases">
<props>
<prop key="Flight">org.springframework.oxm.xstream.Flight</prop>
</props>
</property>
</bean>
...
</beans>
默认情况下,XStream 允许任意的类被解读,这可能会导致不安全的 Java 序列化效果。因此,我们不建议使用 XStreamMarshaller 来解读来自外部的 XML(也就是网络),因为这可能导致安全漏洞。
如果你选择使用 XStreamMarshaller 来解读来自外部源的 XML,请在 XStreamMarshaller 上设置 supportedClasses 属性,如下例所示:
<bean id="xstreamMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="supportedClasses" value="org.springframework.oxm.xstream.Flight"/>
...
</bean>
这样做可以确保只有注册的类才有资格被解读。
此外,你可以注册 自定义转换器),以确保只有你支持的类可以被解读。你可能想添加一个 CatchAllConverter 作为列表中的最后一个转换器,此外还有明确支持应该被支持的域类的转换器。这样一来,优先级较低、可能存在安全漏洞的默认 XStream 转换器就不会被调用。
:::info 请注意,XStream 是一个 XML 序列化库,而不是一个数据绑定库。因此,它的命名空间支持有限。因此,它相当不适合在 Web 服务中使用。 :::