匿名内部类JAXB序列化

时间:2015-05-29 16:46:08

标签: java spring serialization jaxb anonymous

我尝试使用带有initializers语法的匿名内部类来序列化JAXB生成的对象,并注意到它适用于端点但不适用于RestTemplate。我想知道为什么它在一个案例而不是另一个案件中工作?

举个例子,这是Spring中的示例端点,它返回JAXB生成的Profile实例:

@PayloadRoot(namespace = NAMESPACE_URI, localPart = SERVICE_NAME)
@ResponsePayload
public Profile getProfile(@RequestPayload  GetProfile request) {

    // do stuff with service that returns Profile
    return service.doStuff(request);

}

现在,当我有服务返回Profile的匿名实例时,没有序列化问题:

return new Profile() {

    {
        setBirthday(user.getBirthday());
        setEmailAddress(user.getEmailAddress());
        setFirstname(user.getFirstname());
        setGender(user.getGen());
        // and so on
    }
};  

但是,当我尝试使用匿名内部类作为RestTemplate的参数时,我得到关于不支持的匿名类的JAXB错误。

“非静态内部类,而JAXB无法处理这些内容。     这个问题与以下位置有关......“

    private UpdateProfile createUpdateProfileRequest(final UpdateProfile request) {


    return new UpdateProfile() {

        {
            setProfileV2(getProfile(request));
        }
    };

}


private ProfileV2 getProfile(UpdateProfile request) {

    ProfileV2 profile = new ProfileV2();

    ProfileUpdate profileUpdate = request.getProfileUpdate();

    profile.setBirthday(profileUpdate.getBirthday());
    profile.setFirstname(profileUpdate.getFirstname());


    return profile;

}

我看过这篇文章: What is Double Brace initialization in Java?

我通常没有用例,这些对象可能变成容器管理的单例 - 内存泄漏。

提到序列化问题,但没有细节,我想理解这一点。

由于我也在端点上使用JAXB进行序列化,为什么JAXB可以将这些对象序列化为端点上的传出数据,但不在RestTemplate.postForObject(...)中。

0 个答案:

没有答案