XJC编译器引发异常

问题描述

这是我关于stackoverflow的第一篇文章。因此,如果我做错了某些事情或违反了一些我不知道的规则,请耐心等待我。

我尝试使用xjc编译器将xsd文件(实际上是两个)编译为一组java类。 对于此任务,我有一个ANT文件,该文件通常可以正常工作。现在,我想使用Xequals和XhashCode插件(根据jaxb2-basics文档)。但是每次我得到一个例外: [xjc] org.xml.sax.SAXNotSupportedException: FEATURE_SECURE_PROCESSING: Feature can not be set to "false" if security manager is present.

下面是完整的堆栈跟踪。

据我了解(希望正确),正在运行的JVM已设置了安全管理器,并且在xjc进程中将XML选项FEATURE_SECURE_PROCESSING设置为false。

但是我没有找到解决方法。我不知道如何影响此标志或如何禁用安全管理器(最后一个并不是我想要执行的操作)。

我的ant文件如下所示

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project name="RunningXjc" default="generate-sources" basedir=".">
    <description>Runs Xjc Binding Compiler</description>
    <target name="generate-sources">
        <!-- Define the xjc task -->
        <taskdef name="xjc" classname="org.jvnet.jaxb2_commons.xjc.XJC2Task">
            <!-- XJC2 Task classpath -->
            <classpath>
                    <fileset dir="${basedir}/../lib">
                    <include name="activation-*.jar"/>
                    <include name="jaxb-api-*.jar"/>
                    <include name="jaxb-impl-*.jar"/>
                    <include name="jsr173_api-*.jar"/>
                    <include name="stax-api-*.jar"/>
                    <include name="jaxb-xjc-*.jar"/>
                    <include name="jaxb2-basics-ant-*.jar"/>
                </fileset>
            </classpath>
        </taskdef>
        <mkdir dir="${basedir}/de.tesat.ppdfw.api.postprocessing.server.gen2"/>
        <!-- Generate the code -->
        <xjc destdir="${basedir}/de.tesat.ppdfw.api.postprocessing.server.gen2" extension="true">
            <arg line="
                -Xequals
                -XhashCode
                -XtoString
                -Xcopyable"/>
            <schema dir="${basedir}">
                <include name="**/*.xsd"/>
            </schema>
            <!-- Plugins -->
            <classpath>
                <fileset dir="${basedir}/../lib">
                    <!-- JAXB2 Basics library -->
                    <include name="jaxb2-basics-*.jar"/>
                    <!-- JAXB2 Basics library dependencies -->
                    <include name="jaxb2-basics-runtime-*.jar"/>
                    <include name="jaxb2-basics-tools-*.jar"/>
                    <include name="commons-beanutils-*.jar"/>
                    <include name="commons-lang3-*.jar"/>
                    <include name="commons-logging-*.jar"/>
                </fileset>
            </classpath>
        </xjc>
    </target>
</project>

过去有人遇到过同样的困难吗? 我正在运行jdk 8。 我希望我提供了所有必要的信息来帮助我解决这个问题。

非常感谢您的提前帮助!

例外:

  [xjc] build id of XJC is 2.3.0
      [xjc] Checking timestamp of C:\Users\hei2bk\pp-dfw-master2\git\pp-dfw\de.tesat.ppdfw.api.postprocessing.server\gen\bigDecimal_binding.xsd
      [xjc] Checking timestamp of C:\Users\hei2bk\pp-dfw-master2\git\pp-dfw\de.tesat.ppdfw.api.postprocessing.server\gen\postprocessingserver.xsd
      [xjc] the last modified time of the inputs is  1604333677874
      [xjc] the last modified time of the outputs is -9223372036854775808
      [xjc] SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
      [xjc] SLF4J: Defaulting to no-operation (nop) logger implementation
      [xjc] SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
      [xjc] Consider using <depends>/<produces> so that XJC won't do unnecessary compilation
      [xjc] Compiling file:/C:/Users/hei2bk/pp-dfw-master2/git/pp-dfw/de.tesat.ppdfw.api.postprocessing.server/gen/bigDecimal_binding.xsd and others
      [xjc] Nov 02,2020 5:57:49 PM com.sun.xml.bind.v2.util.XmlFactory createSchemaFactory
      [xjc] SCHWERWIEGEND: null
      [xjc] org.xml.sax.SAXNotSupportedException: FEATURE_SECURE_PROCESSING: Feature kann nicht auf "false" gesetzt werden,wenn Security Manager vorhanden ist.
      [xjc]     at com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory.setFeature(XMLSchemaFactory.java:369)
      [xjc]     at com.sun.xml.bind.v2.util.XmlFactory.createSchemaFactory(XmlFactory.java:110)
      [xjc]     at com.sun.tools.xjc.reader.xmlschema.parser.SchemaConstraintChecker.check(SchemaConstraintChecker.java:86)
      [xjc]     at com.sun.tools.xjc.ModelLoader.loadXMLSchema(ModelLoader.java:342)
      [xjc]     at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:162)
      [xjc]     at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:117)
      [xjc]     at com.sun.tools.xjc.XJCBase._doXJC(XJCBase.java:837)
      [xjc]     at com.sun.tools.xjc.XJCBase.doXJC(XJCBase.java:787)
      [xjc]     at com.sun.tools.xjc.XJCBase.execute(XJCBase.java:682)
      [xjc]     at com.sun.tools.xjc.XJC2Task.execute(XJC2Task.java:55)
      [xjc]     at org.jvnet.jaxb2_commons.xjc.XJC2Task.execute(XJC2Task.java:35)
      [xjc]     at org.apache.tools.ant.UnkNownElement.execute(UnkNownElement.java:292)
      [xjc]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      [xjc]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      [xjc]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      [xjc]     at java.lang.reflect.Method.invoke(Method.java:498)
      [xjc]     at org.apache.tools.ant.dispatch.dispatchUtils.execute(dispatchUtils.java:99)
      [xjc]     at org.apache.tools.ant.Task.perform(Task.java:350)
      [xjc]     at org.apache.tools.ant.Target.execute(Target.java:449)
      [xjc]     at org.apache.tools.ant.Target.performTasks(Target.java:470)
      [xjc]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1391)
      [xjc]     at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
      [xjc]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
      [xjc]     at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:39)
      [xjc]     at org.apache.tools.ant.Project.executeTargets(Project.java:1254)
      [xjc]     at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:461)
      [xjc]     at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:143)

BUILD Failed
C:\Users\hei2bk\pp-dfw-master2\git\pp-dfw\de.tesat.ppdfw.api.postprocessing.server\gen\buildWithEquals2.xml:22: java.lang.IllegalStateException: org.xml.sax.SAXNotSupportedException: FEATURE_SECURE_PROCESSING: Feature kann nicht auf "false" gesetzt werden,wenn Security Manager vorhanden ist.
    at org.apache.tools.ant.dispatch.dispatchUtils.execute(dispatchUtils.java:109)
    at org.apache.tools.ant.Task.perform(Task.java:350)
    at org.apache.tools.ant.Target.execute(Target.java:449)
    at org.apache.tools.ant.Target.performTasks(Target.java:470)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1391)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:39)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1254)
    at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:461)
    at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:143)
Caused by: java.lang.IllegalStateException: org.xml.sax.SAXNotSupportedException: FEATURE_SECURE_PROCESSING: Feature kann nicht auf "false" gesetzt werden,wenn Security Manager vorhanden ist.
    at com.sun.xml.bind.v2.util.XmlFactory.createSchemaFactory(XmlFactory.java:117)
    at com.sun.tools.xjc.reader.xmlschema.parser.SchemaConstraintChecker.check(SchemaConstraintChecker.java:86)
    at com.sun.tools.xjc.ModelLoader.loadXMLSchema(ModelLoader.java:342)
    at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:162)
    at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:117)
    at com.sun.tools.xjc.XJCBase._doXJC(XJCBase.java:837)
    at com.sun.tools.xjc.XJCBase.doXJC(XJCBase.java:787)
    at com.sun.tools.xjc.XJCBase.execute(XJCBase.java:682)
    at com.sun.tools.xjc.XJC2Task.execute(XJC2Task.java:55)
    at org.jvnet.jaxb2_commons.xjc.XJC2Task.execute(XJC2Task.java:35)
    at org.apache.tools.ant.UnkNownElement.execute(UnkNownElement.java:292)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tools.ant.dispatch.dispatchUtils.execute(dispatchUtils.java:99)
    ... 10 more
Caused by: org.xml.sax.SAXNotSupportedException: FEATURE_SECURE_PROCESSING: Feature kann nicht auf "false" gesetzt werden,wenn Security Manager vorhanden ist.
    at com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory.setFeature(XMLSchemaFactory.java:369)
    at com.sun.xml.bind.v2.util.XmlFactory.createSchemaFactory(XmlFactory.java:110)
    ... 25 more

解决方法

首先,感谢您提供更好的格式!

在此期间,我没有解决问题的根本原因,但我解决了问题。 我尝试使用maven而不是ANT,并且可以直接使用。由于maven从maven Central获得了必需的库,因此libs版本可能有所不同。为了尝试使用ANT,我从这里获得了必要的库 JAXB2-Basic Plugins

我的maven pom.xml是帮助任何可能遇到相同问题的人

<?xml version="1.0" encoding="UTF-8"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>

    <groupId>my own group id</groupId>
    <artifactId>my own artifact id</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <build>
        <plugins>

            <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <version>0.14.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <generateDirectory>../gen</generateDirectory>
                            <generatePackage>packagename</generatePackage>
                            <schemaDirectory>../src/main/resources</schemaDirectory>
                            <!-- Since we got non-generated code under src/main/java/de.tesat.pam.api.structure.tools,we cannot clean the output folder -->
                            <cleanPackageDirectories>false</cleanPackageDirectories>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <args>
                        <arg>-XsimpleEquals</arg>
                        <arg>-XsimpleHashCode</arg>
                    </args>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics</artifactId>
                        <version>0.12.0</version>
                    </dependency>
                </dependencies>
            </plugin>

        </plugins>
    </build>

</project>

pom.xml文件位于名为xjc.generator的文件夹中。 xsd文件包含在src / main / resources中。 要使用xjc生成Java类,请运行具有目标generate-resources的maven。