Caused by: javax.xml.ws.soap.SOAPFaultException: reach the innerElementCountThreshold:50000

场景:
在使用cxf调用接口时,如果数据量超过5W条就会报如下错误。因为cxf出于安全和性能考虑,默认设置的5W条。

Caused by: javax.xml.ws.soap.SOAPFaultException: reach the innerElementCountThreshold:50000
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:157)
    at com.sun.proxy.$Proxy41.getAllJobHistory(Unknown Source)
    at com.ep.service.impl.StatusSearchServiceImpl.findAll(StatusSearchServiceImpl.java:38) [classes:]
    at com.ep.controller.StatusBean.retrieveHistoryList(StatusBean.java:145) [classes:]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_45]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [rt.jar:1.6.0_45]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [rt.jar:1.6.0_45]
    at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_45]
    at org.apache.el.parser.AstValue.invoke(AstValue.java:258) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68) [jsf-facelets-1.1.15.jar:1.1.15]
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) [jsf-api-1.2_15-b01-redhat-3.jar:1.2_15-b01-redhat-3]
    ... 31 more

解决方案:
1)在服务器启动时修改参数
在tomcat的catalina.sh中# OS specific support. $var must be set to either true or false.下面添加:

JAVA_OPTS="-server -Xms256m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=1024m -Dorg.apache.cxf.stax.maxChildElements=200000" 

2)代码里修改默认参数
博主本方案经过尝试未生效,如有解决方案可一起分享。

猜你喜欢

转载自blog.csdn.net/IT_lyd/article/details/81781586
今日推荐