繁体   English   中英

在JAXB2Marshaller上将JAXBElement与packagesToScan属性一起使用时,没有终结点适配器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM