懒惰处理JAXB类

时间:2014-03-06 22:40:45

标签: java jaxb cxf jaxb2 moxy

我有一个包含2500个可能的java类的应用程序,可以通过Web服务返回(使用CXF完成) 问题是为2500个类创建一个JAXB上下文需要很长时间和大量内存,而在大多数情况下,实际上只需要200个类。我想要的是一个JAXB上下文,它知道只对所需的类进行延迟处理(将所有代码生成内容延迟到需要类时)。
我知道当前的实现不支持它,但我想扩展它 如果有人知道可能的钩子或一个好的起点,它会很棒 另一点是哪种发动机更容易延伸,使用moxy或metro。 提前谢谢,
  阿夫纳

1 个答案:

答案 0 :(得分:1)

使用EclipseLink JAXB (MOXy),您可以使用SESSION_EVENT_LISTENER属性在底层元数据上启用延迟初始化,如下所示:

import java.util.*;
import javax.xml.bind.JAXBContext;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
import org.eclipse.persistence.oxm.XMLDescriptor;
import org.eclipse.persistence.sessions.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        Map<String, Object> properties = new HashMap<String, Object>();
        properties.put(JAXBContextProperties.SESSION_EVENT_LISTENER, new SessionEventAdapter() {

            @Override
            public void preLogin(SessionEvent event) {
                for(Map.Entry<Class, ClassDescriptor> entry : event.getSession().getProject().getDescriptors().entrySet()) {
                    XMLDescriptor a;
                    ((XMLDescriptor) entry.getValue()).setLazilyInitialized(true);
                }
            }

        });
        JAXBContext jc = JAXBContext.newInstance(new Class[] {Root.class}, properties);
    }

}

JAXB参考实现具有类似的属性,目前我找不到。如果没有人将其作为答案发布,您可以将问题发布到他们的邮件列表中:

相关问题