Apache CXF java.lang.StackOverflower错误
我的代码在运行时出错。我使用ApacheCXF实现了SOAP客户端。我通过Apache CXF java.lang.StackOverflower错误,java,apache,web-services,soap,cxf,Java,Apache,Web Services,Soap,Cxf,我的代码在运行时出错。我使用ApacheCXF实现了SOAP客户端。我通过JaxWsProxyFactoryBean创建了端点。这是我的密码: JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(MYAPI.class); factory.setAddress(service); api = (MYAPI) factor
JaxWsProxyFactoryBean
创建了端点。这是我的密码:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(MYAPI.class);
factory.setAddress(service);
api = (MYAPI) factory.create();
我第一次实现它时,它运行得很好,所以我决定进行一些重构(将存根类移到不同的包中,将API接口移到另一个包中,等等……),当我再次构建并运行它时,出现了一些错误。应用程序在api=(MYAPI)factory.create()处的java.lang.StackOverflowerError中失败代码>这是堆栈跟踪:
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
Thread[main](挂起(异常堆栈溢出错误))
ReflectionUtil.getDeclaredFields(类)行:169
jaxbcontdeInitializer.walkReferences(类)行:395
jaxbcontdeInitializer.addClass(类)行:317
addType(类型,布尔值)行:236
jaxbcontdeInitializer.addType(类型)行:226
jaxbcontdeInitializer.walkReferences(类)行:424
jaxbcontdeInitializer.addClass(类)行:317
addType(类型,布尔值)行:236
jaxbcontdeInitializer.addType(类型)行:226
jaxbcontdeInitializer.walkReferences(类)行:424
jaxbcontdeInitializer.addClass(类)行:317
addType(类型,布尔值)行:236
jaxbcontdeInitializer.addType(类型)行:226
jaxbcontdeInitializer.walkReferences(类)行:424
jaxbcontdeInitializer.addClass(类)行:317
addType(类型,布尔值)行:236
jaxbcontdeInitializer.addType(类型)行:226
jaxbcontdeInitializer.walkReferences(类)行:424
jaxbcontdeInitializer.addClass(类)行:317
addType(类型,布尔值)行:236
jaxbcontdeInitializer.addType(类型)行:226
jaxbcontdeInitializer.walkReferences(类)行:424
jaxbcontdeInitializer.addClass(类)行:317
addType(类型,布尔值)行:236
jaxbcontdeInitializer.addType(类型)行:226
jaxbcontdeInitializer.walkReferences(类)行:424
jaxbcontdeInitializer.addClass(类)行:317
有人能帮我解决这个问题吗?我不知道是什么问题。我发现使用JAVA 8构建CXF可能会有问题,但我使用的是3.1.7版,我也尝试使用JAVA 7构建它(因为我没有JAVA 8特定的实现),运行它,同样的问题再次发生。(在注释中解决)
它似乎是一个循环引用,其中JAXB类递归地对自身充电,从而产生堆栈溢出
行动
你重构了吗?回去一步一步地做。如果不能,则尝试检测导致问题的服务和类,例如删除服务方法,直到未引发错误
解决方案(如@AleydinKaraimin评论)
CXF生成了两个名称相同的类,第一个类包含引用第二个类的字段,但在另一个包中进行重构后,它开始引用自身,并且由于实现逻辑,它会一次又一次地加载它。似乎是一个循环引用。你能展示一下你的JAXB模型吗?你是说,带有JAXB注释的存根类吗?是的。看起来,一个类不知何故在不断地向自己收费,太多了(超过100),你能建议我,搜索什么吗。e、 注释中的某物。我对JAXB不是很熟悉。CXF为我做这件事。谢谢你的帮助你重构了吗?回去一步一步地做。如果不能,则尝试检测导致问题的服务和类,例如删除服务方法,直到未引发错误。