我必须在Ant脚本中使用JAXB从XML Schema文件生成类。当我以默认方式做到这一点时,一切都很顺利。后来我意识到我需要每个类的值构造函数。我试图为XJC使用value-constructor插件,但是当我运行Ant脚本时,我得到了error:
BUILD FAILED
c:\HOME\plt\owf2-testing\EdytorScenariuszy\build.xml:17:
java.util.ServiceConfigurationError: com.sun.tools.xjc.Plugin: Provider org.jvnet.jaxb2_commons.plugin.value_constructor.ValueConstructorPlugin not a subtype
at java.util.ServiceLoader.fail(ServiceLoader.java:214)
at java.util.ServiceLoader.access$300(ServiceLoader.java:164)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:352)
at java.util.ServiceLoader$1.next(ServiceLoader.java:428)
at com.sun.tools.xjc.Options.findServices(Options.java:957)
at com.sun.tools.xjc.Options.getAllPlugins(Options.java:374)
at com.sun.tools.xjc.Options.parseArgument(Options.java:688)
at com.sun.tools.xjc.Options.parseArguments(Options.java:809)
at com.sun.tools.xjc.XJC2Task._doXJC(XJC2Task.java:474)
at com.sun.tools.xjc.XJC2Task.doXJC(XJC2Task.java:457)
at com.sun.tools.xjc.XJC2Task.execute(XJC2Task.java:380)
at com.sun.istack.tools.ProtectedTask.execute(ProtectedTask.java:103)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
这是我的蚂蚁script:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<project name="EdytorScenariuszy" default="createClasses">
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
<classpath>
<pathelement path="lib/jaxb-xjc.jar"/>
<pathelement path="lib/jaxb-impl.jar"/>
<pathelement path="lib/jaxb2-value-constructor.jar"/>
</classpath>
</taskdef>
<target name="clean">
<delete dir="src/xml" />
</target>
<target name="createClasses" depends="clean">
<xjc schema="scenariuszTestowy.xsd" binding="mapowanieTypow.xjb" destdir="src" package="xml" encoding="UTF-8">
<arg value="-Xvalue-constructor"/>
</xjc>
</target>
</project>
如果有人能帮助我如何处理这个例外,我将非常感激。
答案 0 :(得分:4)
使用Java 7(使用java1.5时没问题),我有一个类似的问题,通过在taskdef中使用“com.sun.tools.xjc.XJC2Task”来解决,即
而不是
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
使用此
<taskdef name="xjc" classname="com.sun.tools.xjc.XJC2Task">
答案 1 :(得分:0)
我没有使用此特定插件的经验,但搜索建议JAXB版本问题。我注意到值构造函数JAR的文件名与其他文件名没有相同的语法(例如jaxb2而不仅仅是jaxb)。虽然这可能纯粹是肤浅的,但我会确认您的JAXB版本是否匹配,以及您是否正在使用JDK的值构造函数分发并定位JAXB版本。
如果您无法使用JAXB bindings files自定义JAXB输出。