2013-08-14 5 views
2

Мне нужно сгенерировать классы из файла XML Schema с помощью JAXB в скрипте Ant. Когда я сделал это по-умолчанию, все прошло хорошо. Позже я понял, что мне нужен конструктор значений для каждого класса. Я пытался использовать ценностно-конструктор плагин для XJC, но когда я побежал Ant сценарий, я получил error:Проблема с генерированием классов JAXB со значениями конструкторов

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) 

Вот мой 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> 

Если кто-то может мне помочь, как бороться с в этом исключении я был бы очень благодарен.

ответ

0

У меня нет опыта работы с этим конкретным плагином, но поиск предлагает проблему с версией JAXB. Я заметил, что имя файла конструктора значений JAR не имеет того же синтаксиса, что и другие (например, jaxb2 вместо jaxb). Хотя это может быть чисто поверхностно, я бы подтвердил, соответствуют ли ваши версии JAXB и что вы используете дистрибутив конструктора значений для вашей JDK и целевой версии JAXB.

В противном случае вы можете настроить выход JAXB с помощью JAXB bindings files.

4

Использование Java 7 (нет porobem при использовании java1.5), у меня была проблема, похожую решается с помощью "com.sun.tools.xjc.XJC2Task" в taskdef, т.е.

Вместо

<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask"> 

Используйте этот

<taskdef name="xjc" classname="com.sun.tools.xjc.XJC2Task">