开发者社区 问答 正文

Maven cxf-codegen-plugin XMLStreamException错误:属性限制

我正在使用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的值?

展开
收起
垚tutu 2019-12-04 17:05:43 760 分享 版权
阿里云 AI 助理回答

在处理大型WSDL文件时遇到的Attribute limit (500) exceeded错误,通常是因为XML解析器配置了属性数量的限制。虽然直接在Maven的cxf-codegen-plugin配置中修改这个特定的属性限制可能不太直观或直接支持,但你可以通过调整底层的XML解析器设置来解决这个问题。

CXF代码生成工具背后使用的是StAX(Streaming API for XML)解析器,而这个错误提示是由于StAX解析器默认的属性限制导致的。要增加这个限制,可以通过系统属性的方式进行设置。

你可以在运行Maven命令时添加一个JVM参数来增大这个限制。具体操作如下:

  1. 增加JVM系统属性:在执行Maven命令时,使用-D选项来设置系统属性。对于上述问题,你需要增加javax.xml.stream.XMLInputFactory.MAX_ATTRIBUTE_SIZE属性。例如,将其设置为2000,可以这样做:
mvn generate-sources -Djavax.xml.stream.XMLInputFactory.MAX_ATTRIBUTE_SIZE=2000

这会临时覆盖默认的属性限制,使得解析器能够处理更多数量的属性。

  1. 持久化配置:如果你希望这个设置对所有Maven构建都生效,而不是每次手动添加JVM参数,可以在Maven的用户配置文件(通常是~/.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文件处理要求。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答标签:
问答地址: