![](/img/trans.png)
[英]JAXB + Spring WS : “No adapter for endpoint” while using JAXBElement
[英]No adapter for endpoint while using JAXBElement with packagesToScan property on Jaxb2Marshaller
我正在使用JAXBElement <...>,因为给定XSD的生成类中缺少@XmlRootElement批注(我无法修改),但是Spring仍给我java.lang.IllegalStateException:端点[...]没有适配器。 马歇尔的定义如下:
<bean id="marsh" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<propety name="packagesToScan" value="com.foo.*.schemas" />
</bean>
在日志中,我可以看到spring已经加载了所有模式,如果我在启动时跟踪到endpointMap,则可以在其中看到它,但是当请求到来时,没有合适的适配器...
有人面对相同吗?
好了,现在我可以看到它,如果未使用contextPath属性,则它不会在jaxb2marshaller实例中设置(为null),并且以下私有方法无法按预期工作:
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 <>技巧在这里不起作用:(
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.