问题描述
这是我关于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。