环境: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>