In meinem Code läuft zur Laufzeit etwas schief. Ich habe SOAP-Client mit Apache CXF implementiert. Ich habe den Endpunkt über JaxWsProxyFactoryBean
erstellt. Hier ist mein Code:Apache CXF java.lang.StackOverflowError
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(MYAPI.class);
factory.setAddress(service);
api = (MYAPI) factory.create();
Zum ersten Mal, als ich es umgesetzt, es funktioniert gut, so habe ich beschlossen, einige Umgestaltung zu tun, (move Stub-Klassen in verschiedenen Paketen, API-Schnittstelle in einer anderen und so weiter ...) Wenn ich es wieder gebaut habe und es ausgeführt habe, passiert etwas falsch. Die Anwendung versagen die mit java.lang.StackOverflowError
bei api = (MYAPI) factory.create();
Hier die stacktrace ist:
Thread [main] (Suspended (exception StackOverflowError))
ReflectionUtil.getDeclaredFields(Class<?>) line: 169
JAXBContextInitializer.walkReferences(Class<?>) line: 395
JAXBContextInitializer.addClass(Class<?>) line: 317
JAXBContextInitializer.addType(Type, boolean) line: 236
JAXBContextInitializer.addType(Type) line: 226
JAXBContextInitializer.walkReferences(Class<?>) line: 424
JAXBContextInitializer.addClass(Class<?>) line: 317
JAXBContextInitializer.addType(Type, boolean) line: 236
JAXBContextInitializer.addType(Type) line: 226
JAXBContextInitializer.walkReferences(Class<?>) line: 424
JAXBContextInitializer.addClass(Class<?>) line: 317
JAXBContextInitializer.addType(Type, boolean) line: 236
JAXBContextInitializer.addType(Type) line: 226
JAXBContextInitializer.walkReferences(Class<?>) line: 424
JAXBContextInitializer.addClass(Class<?>) line: 317
JAXBContextInitializer.addType(Type, boolean) line: 236
JAXBContextInitializer.addType(Type) line: 226
JAXBContextInitializer.walkReferences(Class<?>) line: 424
JAXBContextInitializer.addClass(Class<?>) line: 317
JAXBContextInitializer.addType(Type, boolean) line: 236
JAXBContextInitializer.addType(Type) line: 226
JAXBContextInitializer.walkReferences(Class<?>) line: 424
JAXBContextInitializer.addClass(Class<?>) line: 317
JAXBContextInitializer.addType(Type, boolean) line: 236
JAXBContextInitializer.addType(Type) line: 226
JAXBContextInitializer.walkReferences(Class<?>) line: 424
JAXBContextInitializer.addClass(Class<?>) line: 317
....
Kann jemand mir helfen, dieses Problem zu lösen? Ich weiß nicht, was das Problem ist. Ich habe festgestellt, dass es ein Problem ist, JAVA 8 zu verwenden, um CXF zu erstellen, aber ich bin mit Version 3.1.7 und habe auch versucht, es mit Java 7 zu bauen (weil ich keine Java 8-spezifischen Implementierungen habe), führe es aus und das gleiche Problem ist erneut aufgetreten.
Scheint eine Zirkularreferenz. Können Sie Ihr JAXB Modell zeigen? – pedrofb
Meinst du, Stub-Klassen mit JAXB-Annotationen? –
Ja. Es scheint so, als würde sich eine Klasse rekursiv aufladen – pedrofb