总线属性设置被忽略

bus properties settings ignored

我有 cxf.xml 个文件:

<beans ....

<cxf:bus>
    <cxf:features>
        <cxf:logging/>
    </cxf:features>
</cxf:bus>
</beans>

但是在一些操作中,我得到了错误:

org.apache.cxf.interceptor.Fault: Unmarshalling Error: Maximum Number of Child Elements limit (50000) Exceeded 

我发现它可以被 org.apache.cxf.stax.maxChildElements 值覆盖。所以我首先尝试将 org.apache.cxf.stax.maxChildElements=120000 放入 gradle,在 IDEA 参数中,但没有用,所以我修改了我的 .xml 文件,如下所示:

<cxf:bus>
    <cxf:features>
        <cxf:logging/>
    </cxf:features>
    <cxf:properties>
        <entry key="org.apache.cxf.stax.maxChildElements" value="120000"/>
    </cxf:properties>
</cxf:bus>

但是 none 这行得通,我目前不知道为什么这个设置没有被注册。

我正在使用库 cxf-rt-frontend-jaxwscxf-rt-transports-http 都在版本 3.2.7 .

如果当您说“IDEA 参数”时,您指的是这个框(标记为:程序参数)...

尝试启用修改选项 -> 添加 VM 选项

然后在标有 VM 选项的框中写入您的 VM 选项字符串。 尝试

-Dorg.apache.cxf.stax.maxChildElements=1000000

这可能有效也可能无效,具体取决于您所说的 IDEA 参数的含义。我已经让 IDEA 忽略了我试图通过工作中的“程序参数”框传递给 JVM 的许多选项。希望这可以解决您的问题。如果失败,我将尝试监控此线程。

您也可以尝试通过 java 代码进行配置。

您可以获得用于创建您的 Bus 实例 org.apache.cxf.endpoint.Client:

    YourActual service = //return instance of your @WebService class by defining address & interpreter;
    Client client=ClientProxy.getClient(service);
    client.getBus().setProperty(StaxUtils.MAX_CHILD_ELEMENTS,120000)

或者,如果您有端点实现者,那么您可以这样做:

Bus bus=BusFactory.getDefaultBus();
bus.setProperty(StaxUtils.MAX_CHILD_ELEMENTS,120000);

Object implementor = <Your service implementation class>;
EndpointImpl ep = (EndpointImpl) Endpoint.publish(yourendpoint, implementor);
ep.setBus(bus);

以上总线配置 psudo-code 来自 CXF doc