我正在使用JAXBElement< ...>因为在给定的XSD(我无法修改)的生成类中缺少 @XmlRootElement 注释,但是Spring仍然给我java.lang.IllegalStateException:没有适配器用于端点[ ...]。 Marshaller的定义如下:
<bean id="marsh" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<propety name="packagesToScan" value="com.foo.*.schemas" />
</bean>
在日志中我可以看到spring已经加载了所有模式,如果我在启动时跟踪到endpointMap,我可以在那里看到它,但是当请求到来时,没有合适的适配器...
任何面对同样的人?答案 0 :(得分:0)
我现在可以看到它,如果没有使用 contextPath 属性,那么它在jaxb2marshaller实例中没有设置(为空),并且以下私有方法不能按预期工作:
private boolean supportsInternal(Class<?> clazz, boolean checkForXmlRootElement) {
if (checkForXmlRootElement && AnnotationUtils.findAnnotation(clazz, XmlRootElement.class) == null) {
return false;
}
if (StringUtils.hasLength(getContextPath())) { // << -----
String packageName = ClassUtils.getPackageName(clazz);
String[] contextPaths = StringUtils.tokenizeToStringArray(getContextPath(), ":");
for (String contextPath : contextPaths) {
if (contextPath.equals(packageName)) {
return true;
}
}
return false;
}
else if (!ObjectUtils.isEmpty(getClassesToBeBound())) {
return Arrays.asList(getClassesToBeBound()).contains(clazz);
}
return false;
}
所以JAXBElement&lt;&gt;技巧在这里不起作用:(