我的程序以前使用的是JDK 1.4。现在我想用1.6来编译它。 它已成功针对 1.4 编译,但是当我将 JDK 更改为 1.6 时,它给出了以下编译错误。
[javac] symbol : constructor StartTagInfo(java.lang.String,java.lang.String,java.lang.String,org.xml.sax.helpers.At
tributesImpl,com.abc.jaxb.ssdclm.impl.runtime.MSVValidator)
[javac] location: class com.sun.msv.util.StartTagInfo
[javac] StartTagInfo sti = new StartTagInfo(
但是我的类路径中有jaxb-libs-jwsdp-1.6 jar,其中包含带有上述构造函数的StartTagInfo类。如果有人对这个问题有想法,请告诉我。谢谢。
我怀疑由于JDK版本的变化,会有一个支持lib jar的版本变得不兼容。最糟糕的是,它可能是一个原生的 lib jar。
我不是在提供当前问题的解决方案。但提供另一种方法。如果您无法使用此方法更改代码,请告诉我;我们将尝试查找现有 Java 升级的问题。
在 Java 1.6 中,不再需要 JWSDP 包。Java 1.6版本带有内置的JAXB版本,因此可以直接使用它。
Java1.6版本带有"xjc"编译器,用于从XML生成Java对象。
Usage: xjc [-options ...]
下面的代码片段显示了如何在 ant 脚本中使用 1.6 的 xjc 编译器来生成 XML 文件中的 java 对象。
下面的 ant 目标将编译 xsd 文件 test1.xsd 和 test2.xsd,并将 java 对象从 xsd 创建到文件夹输出/java 中
。<target name=”xsd2java” description=”Generate java model from XSD xml schema using XJC compiler.”>
<echo message=”Generating java files from XSD using XJC compiler…” />
<mkdir dir=”output/java”/>
<exec executable=”xjc”>
<arg value=”-d”/>
<arg value=”output/java”/>
<arg value=”test1.xsd”/>
<arg value=”test2.xsd”/>
</exec>
</target>
下面的代码片段显示了如何从 dtd 文件编译 Java 对象。
<div><macrodef name=”dtd2java”>
<attribute name=”dtdDir”/>
<attribute name=”dtdFile”/>
<attribute name=”javaPackage”/>
<attribute name=”javaDir”/>
<sequential>
<mkdir dir=”output/java/@{javaDir}”/>
<exec executable=”xjc”>
<arg value=”-d”/>
<arg value=”${output.dir}/java”/>
<arg value=”-p”/>
<arg value=”@{javaPackage}”/>
<arg value=”${output.dir}/java/@{javaDir}”/>
<arg value=”-extension”/><arg value=”-dtd”/>
<arg value=”@{dtdDir}/@{dtdFile}”/>
</exec>
</sequential>
</macrodef>
<target name=”dtd2java” description=”Generate java model from DTD using XJC2 compiler.” >
<echo message=”Generating java files from DTD using XJC2 compiler…”/>
<dtd2java dtdDir=”test/dtd” dtdFile=”test1.dtd” javaPackage=”com.test1.dtd” javaDir=”com/test1/dtd”/>
<dtd2java dtdDir=”test/dtd” dtdFile=”test2.dtd” javaPackage=”com.test2.dtd” javaDir=”com/test2/dtd”/>
</target>
</div>