【问题标题】:spring-ws not serialize object correctlyspring-ws 没有正确序列化对象
【发布时间】:2021-12-13 11:26:55
【问题描述】:

我在将对象序列化为 XML 时遇到问题,我不知道问题出在哪里。 XML 中对象的序列化看起来就像序列化的对象的内存。我序列化的所有其他对象都已正确序列化。

在 spring 集成测试中,对象被正确序列化。只有当我在 weblogic 服务器上部署应用程序时,它才没有正确序列化。在weblogic 12中我没有放任何特殊的库。

有什么想法吗?

像这样序列化的对象如下:

 <ns1:Objectives>mypackage.ObjectiveObj@5eba0500</ns1:Objectives>

需要序列化的类是这样的:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
name = "ObjectiveObj",
propOrder = {"objective"}
)
public class ObjectiveObj {
@XmlElement(
    name = "Objective"
)
protected List<Objective> objective;

public ObjectiveListType() {
}

public List<Objective> getObjective() {
    if (this.objective == null) {
        this.objective = new ArrayList();
    }

    return this.objective;
}

}

编辑: 只需要澄清一下。 该类是使用 jaxB 从 xsd 文件中生成的 spring-ws 在发送 Soap 响应时使用该类来编组它。 我不知道这是否有帮助。

【问题讨论】:

    标签: java soap jaxb spring-ws


    【解决方案1】:

    XML 输出中的字符串 mypackage.ObjectiveObj@5eba0500 不是对象的内存内容,而是 其toString 方法的输出。 你得到这个是因为在你的 ObjectiveObj 类 你没有实现自己的toString() 方法, 因此你得到了 toString() 继承自 java.lang.Object

    引自its API doc:

    public String toString()

    返回对象的字符串表示形式。一般来说,toString 方法返回一个“以文本方式表示”该对象的字符串。 结果应该是一个简洁但信息丰富的表示,很容易 供人阅读。建议所有子类重写此方法。

    Object 类的 toString 方法返回一个由名称组成的字符串 对象是其实例的类,at-符号字符“@”, 以及对象哈希码的无符号十六进制表示。 换句话说,这个方法返回一个字符串等于:

     getClass().getName() + '@' + Integer.toHexString(hashCode())
    

    要解决此问题,您可以使用自己的实现覆盖此方法

    @Override
    public String toString() {
        return ....;
    }
    

    编辑:

    可能你已经有一个XmlAdapter&lt;String, ObjectiveObj&gt;, 它在其marshal 方法中使用ObjectiveObjtoString 方法。 如果您还没有ObjectiveObj 的适配器,那么您应该 创建一个,实现其marshalunmarshal 方法,并激活 使用 @XmlTypeAdapter 注释为 ObjectiveObj

    【讨论】:

    • 是的,toString 肯定来自 Object。但是包括这个在内的所有其他类都是使用 jaxb 从 xsd 文件生成的。所有其他类都被正确序列化了,只有这个没有,为什么?
    • @DanutClapa 查看我的(非常投机的)编辑。
    • 该服务是一个 Soap 服务,正如它在标题中所说,它使用 spring-ws 来解组请求并编组响应。该类是使用 jaxB 从 xsd 生成的。那里没有手工完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多