我正在使用maven cxf-codegen-plugin为一个非常大的WSDL生成客户端,这是配置示例:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf-version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<!--sourceRoot>${project.build.directory}/generated/cxf</sourceRoot-->
<sourceRoot>${project.basedir}/src/main/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${project.basedir}/src/main/resources/wsdl/PDT.wsdl</wsdl>
<wsdlLocation>classpath:wsdl/PDT.wsdl</wsdlLocation>
<extendedSoapHeaders>true</extendedSoapHeaders>
<autoNameResolution>true</autoNameResolution>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
当我尝试生成客户端时,出现此错误:
Exception in thread "main" org.apache.cxf.tools.common.ToolException: org.apache.cxf.wsdl11.WSDLRuntimeException: Fail to create wsdl definition file:/src/main/resources/wsdl/PDT.wsdl: WSDLException: faultCode=PARSER_ERROR: javax.xml.stream.XMLStreamException: Attribute limit (500) exceeded
无论如何,是否可以将Maven插件中的属性限制更改为大于500的值?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在处理大型WSDL文件时遇到的Attribute limit (500) exceeded
错误,通常是因为XML解析器配置了属性数量的限制。虽然直接在Maven的cxf-codegen-plugin配置中修改这个特定的属性限制可能不太直观或直接支持,但你可以通过调整底层的XML解析器设置来解决这个问题。
CXF代码生成工具背后使用的是StAX(Streaming API for XML)解析器,而这个错误提示是由于StAX解析器默认的属性限制导致的。要增加这个限制,可以通过系统属性的方式进行设置。
你可以在运行Maven命令时添加一个JVM参数来增大这个限制。具体操作如下:
-D
选项来设置系统属性。对于上述问题,你需要增加javax.xml.stream.XMLInputFactory.MAX_ATTRIBUTE_SIZE
属性。例如,将其设置为2000,可以这样做:mvn generate-sources -Djavax.xml.stream.XMLInputFactory.MAX_ATTRIBUTE_SIZE=2000
这会临时覆盖默认的属性限制,使得解析器能够处理更多数量的属性。
~/.mavenrc
或者%USERPROFILE%\.m2\settings.xml
中的<profiles>
部分)中全局设置这个属性。例如,在settings.xml
中添加:<profiles>
<profile>
<id>override-xml-inputfactory-attribute-limit</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<javax.xml.stream.XMLInputFactory.MAX_ATTRIBUTE_SIZE>2000</javax.xml.stream.XMLInputFactory.MAX_ATTRIBUTE_SIZE>
</properties>
</profile>
</profiles>
这样配置后,每次Maven运行时都会自动应用这个更大的属性限制值,无需在命令行中额外指定。
请注意,根据你的具体环境和需求,适当调整上述数值以满足不同大小的WSDL文件处理要求。