2012-08-11 36 views
3

如何從JAXB對象中生成引用不同包中的枚舉的模式?帶有枚舉的JAXB SchemaGen使用不同的包

下面是一個例子:

枚舉類

package com.example.one 

public enum EnumExample { 
    VALUE_ONE 
    VALUE_TWO 
} 

JAXB類

package com.example.two 

public class Example { 

private EnumExample enumExample; 

    @XMLElement(name="enumExample", required=true) 
    public EnumExample getEnumExample() { 
     return enumExample 
    } 

    public void setEnumExample() { 
     this.enumExample = enumExample; 
    } 
} 

package-info.java

@javax.xml.bind.annotation.XmlSchema(namespace = "http://example.com", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 
package com.example.two; 

Ant目標

<path id="glassfish.schemagen.classpath"> 
    <pathelement location="/apps/glassfish/lib/webservices-tools.jar" /> 
</path> 

<taskdef name="schemagen" classname="com.sun.tools.jxc.SchemaGenTask"> 
    <classpath refid="glassfish.schemagen.classpath" /> 
</taskdef> 

<schemagen srcdir="${src.dir}/com/example/two" destdir="xsd"> 
    <schema namespace="http://exmaple.com" file="example.xsd" /> 
</schemagen> 

當運行上述的例子得到以下:

[schemagen]異常package-info.java路徑:package-info.java [schemagen ]從7個源文件生成模式 [schemagen]註釋處理期間遇到的問題; [schemagen]請參閱下面的stacktrace獲取更多信息。 [schemagen]顯示java.lang.NullPointerException [schemagen]在com.sun.tools.jxc.model.nav.APTNavigator $ 2.onDeclaredType(APTNavigator.java:428) [schemagen]在com.sun.tools.jxc。 model.nav.APTNavigator $ 2.onClassType(APTNavigator.java:402) [schemagen] at com.sun.tools.jxc.model.nav.APTNavigator $ 2.onClassType(APTNavigator.java:456) [schemagen] at com。 sun.istack.tools.APTTypeVisitor.apply(APTTypeVisitor.java:27) [schemagen] at com.sun.tools.jxc.model.nav.APTNavigator.getBaseClass(APTNavigator.java:109) [schemagen] at com。 sun.tools.jxc.model.nav.APTNavigator.getBaseClass(APTNavigator.java:85) [schemagen] at com.sun.xml.bind.v2.model.impl.PropertyInfoImpl.getIndividualType(PropertyInfoImpl.java:190) [schemag en] at com.sun.xml.bind.v2.model.impl.PropertyInfoImpl。(PropertyInfoImpl.java:132) [schemagen] at com.sun.xml.bind.v2.model.impl.ERPropertyInfoImpl。(ERPropertyInfoImpl。 java:53) [schemagen] at com.sun.xml.bind.v2.model.impl.ElementPropertyInfoImpl。(ElementPropertyInfoImpl.java:96) [schemagen] at com.sun.xml.bind.v2.model.impl .ClassInfoImpl.createElementProperty(ClassInfoImpl.java:886) [schemagen] at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.addProperty(ClassInfoImpl.java:841) [schemagen] at com.sun.xml .bind.v2.model.impl.ClassInfoImpl.findGetterSetterProperties(ClassInfoImpl.java:966) [schemagen] at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.getProperties(ClassInfoImpl.java:298) [ schemagen] at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(Mode lBuilder.java:243) [schemagen] at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:209) [schemagen] at com.sun.xml.bind.v2。 model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:315) [schemagen] at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:330) [schemagen] at com。 sun.tools.xjc.api.impl.j2s.JavaCompilerImpl.bind(JavaCompilerImpl.java:90) [schemagen] at com.sun.tools.jxc.apt.SchemaGenerator $ 1.process(SchemaGenerator.java:115) [ (註釋處理程序)中的[schemagen] at com.sun.mirror.apt.AnnotationProcessors $ CompositeAnnotationProcessor.process(AnnotationProcessors。的java:60) [schemagen]在com.sun.tools.apt.comp.Apt.main(Apt.java:454) [schemagen]在com.sun.tools.apt.main.JavaCompiler.compile(JavaCompiler進行。的java:258) [schemagen]在com.sun.tools.apt.main.Main.compile(Main.java:1102) [schemagen]在com.sun.tools.apt.main.Main.compile(主。的java:964) [schemagen]在com.sun.tools.apt.Main.processing(Main.java:95) [schemagen]在com.sun.tools.apt.Main.process(Main.java:85) [schemagen]在com.sun.tools.apt.Main.process(Main.java:67) [schemagen]在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法) [schemagen]在sun.reflect.NativeMethodAccessorImpl。調用(NativeMethodAccessorImpl.java:39) [schemagen] at sun.reflect.Delegat ingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [schemagen] at java.lang.reflect.Method.invoke(Method.java:597) [schemagen] at com.sun.tools.jxc.AptBasedTask $ InternalAptAdapter.execute( AptBasedTask.java:97) [schemagen] at com.sun.tools.jxc.AptBasedTask.compile(AptBasedTask.java:144) [schemagen] at org.apache.tools.ant.taskdefs.Javac.execute(Javac。 [schemagen] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) [schemagen] at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) [schemagen] at sun。 reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [schemagen]在java.lang.reflect.Method.invoke(Method.java:597) [秒chemagen]在org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) [schemagen]在org.apache.tools.ant.Task.perform(Task.java:348) [schemagen]在org.apache.tools.ant.Target.execute(Target.java:390) [schemagen]在org.apache.tools.ant.Target.performTasks(Target.java:411) [schemagen]在org.apache .tools.ant.Project.executeSortedTargets(Project.java:1397) [schemagen] at org.apache.tools.ant.Project.executeTarget(Project.java:1366) [schemagen] at org.apache.tools.ant .helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) [schemagen] at org.apache.tools.ant.Project.executeTargets(Project.java:1249) [schemagen] at org.apache.tools.ant.Main .runBuild(Main.java:801) [schem agen] at org.apache.tools.ant.Main.startAnt(Main.java:218) [schemagen] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) [schemagen]在org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

我知道這是枚舉的,因爲如果我切換到一個字符串它消失導致錯誤。如何使用上面的示例生成一個模式,其中枚舉或者位於相同的名稱空間或不同的名稱空間中?

回答

0

schemagen支持您是否嘗試過使用包含或排除元素(未經測試)由javac task

大多數屬性的定義?

<schemagen srcdir="${src.dir}/com/example" destdir="xsd"> 
    <schema namespace="http://exmaple.com" file="example.xsd" /> 
    <include name="one/EnumExample.java"/> 
    <include name="two/Example.java"/> 
</schemagen>