【发布时间】:2017-01-12 07:28:03
【问题描述】:
我的代码在运行时出现问题。我使用 apache CXF 实现了 SOAP 客户端。我通过JaxWsProxyFactoryBean 创建了端点。这是我的代码:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(MYAPI.class);
factory.setAddress(service);
api = (MYAPI) factory.create();
当我第一次实现它时,它运行良好,所以我决定进行一些重构,(将存根类移动到不同的包中,API 接口移动到另一个包中,等等......)当我再次构建它并运行它时,发生了一些错误。应用程序失败,java.lang.StackOverflowError api = (MYAPI) factory.create(); 这是堆栈跟踪:
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
....
谁能帮我解决这个问题?我不知道是什么问题。我发现使用 JAVA 8 构建 CXF 可能是一个问题,但我使用的是 3.1.7 版本,并且我也尝试使用 Java 7 构建它,(因为我没有 Java 8 特定的实现),运行它同样的问题又发生了。
【问题讨论】:
-
似乎是一个循环引用。你能展示你的 JAXB 模型吗?
-
你的意思是,带有 JAXB 注释的存根类?
-
是的。似乎,一个类以某种方式递归地为自己充电
-
他们太多了(超过 100 个),你能建议我,搜索什么。例如注释中的某些内容。我对 JAXB 不是很熟悉。 CXF为我做。感谢您的帮助
-
你重构了吗?回去一步一步做。如果不能,则尝试检测导致问题的服务和类,例如删除服务方法,直到不引发错误。
标签: java apache web-services soap cxf