Reputation: 31
I have to generate classes from XML Schema file using JAXB in Ant script. When I did it in default way, everything went good. Later I realized that I need value constructor for each class. I tried to use value-constructor plugin for XJC but when I ran Ant script I got an 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)
Here is my Ant 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>
If anyone could help me how to deal with this exception I would be very grateful.
Upvotes: 2
Views: 4152
Reputation: 51
Using Java 7(no porobem when use java1.5), I had a similiar problem, solved by using "com.sun.tools.xjc.XJC2Task" in taskdef, ie
Instead of
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
Use this
<taskdef name="xjc" classname="com.sun.tools.xjc.XJC2Task">
Upvotes: 5
Reputation: 8313
I've no experience with this particular plugin but searches suggest a JAXB versioning issue. I notice the filename of the value constructor JAR doesn't have the same syntax as the others (e.g. jaxb2 instead of just jaxb). Whilst this may be purely superficial I would confirm whether your JAXB versions match and that you're using the value constructor distribution for your JDK and target JAXB version.
Failing that you could customise the JAXB output with JAXB bindings files.
Upvotes: 0