Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache CXF java.lang.StackOverflower错误_Java_Apache_Web Services_Soap_Cxf - Fatal编程技术网

Apache CXF java.lang.StackOverflower错误

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

我的代码在运行时出错。我使用ApacheCXF实现了SOAP客户端。我通过
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为我做这件事。谢谢你的帮助你重构了吗?回去一步一步地做。如果不能,则尝试检测导致问题的服务和类,例如删除服务方法,直到未引发错误。