/ / Kein Adapter für Endpunkt bei Verwendung von JAXBElement mit der Eigenschaft packagesToScan in Jaxb2Marshaller - Java, Spring, Exception, Jaxb

Kein Adapter für Endpunkt bei der Verwendung von JAXBElement mit packagesToScan-Eigenschaft für Jaxb2Marshaller - Java, Frühling, Ausnahme, Jaxb

Ich benutze JAXBElement <...> wegen fehlender @XmlRootElement Annotation in generierten Klassen für bestimmte XSDs(was ich nicht ändern kann), aber Spring gibt mir immer noch die java.lang.IllegalStateException: Kein Adapter für Endpunkt [...]. Marshaller ist wie folgt definiert:

<bean id="marsh" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<propety name="packagesToScan" value="com.foo.*.schemas" />
</bean>

Im Protokoll kann ich sehen, dass Spring alle Schemas geladen hat. Wenn ich beim Start zu endpointMap verfolge, kann ich es dort sehen, aber wenn eine Anfrage kommt, gibt es keinen geeigneten Adapter ...

jemand vor dem gleichen?

Antworten:

0 für die Antwort № 1

Nun, ich kann es jetzt sehen, wenn die contextPath Die Eigenschaft wird nicht verwendet, dann wird sie in der jaxb2marshaller-Instanz nicht gesetzt (ist null), und die folgende private Methode funktioniert nicht wie erwartet:

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;
}

Der JAXBElement <> -Trick funktioniert hier also nicht :(