MoxyContextResolver需要很长时间才能返回JAXBContext

时间:2015-08-18 15:26:37

标签: jaxb jersey moxy

环境:java 7,jersey 2.17 + jersey-media-moxy 2.17

GET请求总是需要FindResponse实例。在我的测试中,我总是返回相同的结果。但对于每个GET请求,MoxyContextResolver都由实体提供程序(对于jax或xml)为jaxbcontext调用,并且返回jaxbcontext需要1分钟以上。

在下面的代码中初始化应用程序,我有2000多个JAXB类。 我能理解第一次返回jaxbcontext是否需要一些时间;但随着更多GET请求的发布,它需要更长更长的时间。

我尝试从Application扩展而不是ResourceConfig并将我自己的jaxb ContextResolver作为单例返回,但是“ resolvers ”解析为两个jaxb上下文解析器,第一个始终是默认的MoxyContextResolver,第二个是我的自定义解析器。我的自定义解析器无法用于创建jaxb上下文。

SamoMoxyApplication.java

public class SamoMoxyApplication extends ResourceConfig {

    public SamoMoxyApplication() {
        super();
        Set<Class> jaxbClasses = new HashSet<Class>(SamoTypeResolver.getSamoJaxbTypes());
        jaxbClasses.add(FindResponse.class);
        jaxbClasses.add(ListWrapper.class);

        Map<String, Object> properties = new HashMap<String, Object>();
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        URL url = classLoader.getResource("META-INF/config/mdm-oxm.xml");
        properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, url.toString());

        MoxyXmlFeature xmlFeature = new MoxyXmlFeature(properties, classLoader, false,
                jaxbClasses.toArray(new Class[0]));
        register(xmlFeature);

        MdmMoxyContextResolver moxyContextResolver = new MdmMoxyContextResolver(properties, classLoader, jaxbClasses.toArray(new Class[0]));
        register(moxyContextResolver);

        register(SamoMoxyResource.class);
    }

}

mdm-oxm.xml(这是我在 xml-bindings 标签中的所有内容,在我的测试中只有一个LagInterface实例包含在FindResponse实例中)

<java-types>
    <java-type name="LagInterface">
        <xml-root-element name="lag.Interface" />
    </java-type>
</java-types>

0 个答案:

没有答案