首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为单个jaxb实例传递两个不同的类

为单个jaxb实例传递两个不同的类
EN

Stack Overflow用户
提问于 2018-04-27 06:52:45
回答 2查看 802关注 0票数 0

下面是我创建jaxb实例的单例类。我正在使用contextObject进行编组和解组。但是在这两种情况下,我有不同的.class (在我的代码中是Class abc)。问题是contextObj只会为一个类创建一次,比如说为了编组。但我正在使用另一个.class进行解组。那么我该如何在这段代码中做到这一点呢?谢谢

代码语言:javascript
运行
复制
public class JAXBInitialisedSingleton {

    private static JAXBContext contextObj = null;

    private JAXBInitialisedSingleton() {

    }

    public static JAXBContext getInstance(Class abc) {
        try {
            if (contextObj == null) {
                contextObj = JAXBContext.newInstance(abc);
            }
        } catch (JAXBException e) {
            throw new IllegalStateException("Unable to initialise");
        }
        return contextObj;
    }
}
EN

回答 2

Stack Overflow用户

发布于 2018-04-27 22:53:07

您已经注意到,单对象JAXBContext contextObj是不够的。

相反,您需要一个从Class对象到JAXBContext对象的Map映射。

您需要稍微重新组织一下getInstance(Class)方法。只需更改3行(标有//!!)。在Map中,您将保留到目前为止创建的所有JAXBContext对象。当您需要一个先前已经创建的JAXBContext时,您可以在Map中找到它,并可以重用它。

代码语言:javascript
运行
复制
public class JAXBInitialisedSingleton {

    private static Map<Class, JAXBContext> contextMap = new HashMap<>();  //!!

    private JAXBInitialisedSingleton() {
    }

    public static JAXBContext getInstance(Class abc) {
        JAXBContext contextObj = contextMap.get(abc);        //!!
        try {
            if (contextObj == null) {
                contextObj = JAXBContext.newInstance(abc);
                contextMap.put(abc, contextObj);             //!!
            }
        } catch (JAXBException e) {
            throw new IllegalStateException("Unable to initialise");
        }
        return contextObj;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2018-09-25 19:12:11

代码语言:javascript
运行
复制
## You can try like below -##


public final class JAXBContextConfig
{
    private JAXBContextConfig()
    {
    }

    public static final JAXBContext JAXB_CONTEXT_REQ;

    public static final JAXBContext JAXB_CONTEXT_RES;


    static
    {
        try
        {
            JAXB_CONTEXT_REQ = JAXBContext.newInstance(Request.class);
            JAXB_CONTEXT_RES = JAXBContext.newInstance(Response.class);

        }
        catch (JAXBException e)
        {
            throw new ManhRestRuntimeException(e);
        }
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50052956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档