下面是我创建jaxb实例的单例类。
我正在使用contextObject
进行编组和解组。但在这两种情况下,我的代码都有不同的.class(Class abc
)。问题是contextObj
只会创建一次,因为只有一个类可以说是编组。但我正在使用另一个.class进行解组。那我怎么能在这段代码中做到这一点?感谢
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;
}
}
答案 0 :(得分:0)
您已经注意到单个对象JAXBContext contextObj
还不够。
相反,您需要从Class
个对象到JAXBContext
个对象的Map<Class, JAXBContext>
映射。
您需要稍微重新组织getInstance(Class)
方法。
只需要更改3行(标有//!!
)。
在Map
中,您保留了目前为止创建的所有JAXBContext
个对象。
每当您需要之前已创建的JAXBContext
时,
您可以在Map
中找到它,并可以重复使用它。
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;
}
}
答案 1 :(得分:0)
## 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);
}
}
}