java - 使用 jaxb schemagen 创建 XSD

标签 java xsd jaxb2

我正在学习 JAXb 2.0,并且是新手。

我正在尝试使用 schemagen 基于 y POJO 类生成 XSD,对于简单的类,它工作正常,但是当我的类包含对其他类的引用时

schemagen 给我错误,下面是相同的错误跟踪

注释处理时遇到的问题; 有关详细信息,请参阅下面的堆栈跟踪。

java.lang.NullPointerException
        at com.sun.tools.jxc.model.nav.APTNavigator$2.onDeclaredType(APTNavigator.java:436)
        at com.sun.tools.jxc.model.nav.APTNavigator$2.onClassType(APTNavigator.java:410)
        at com.sun.tools.jxc.model.nav.APTNavigator$2.onClassType(APTNavigator.java:464)
        at com.sun.istack.tools.APTTypeVisitor.apply(APTTypeVisitor.java:27)
        at com.sun.tools.jxc.model.nav.APTNavigator.getBaseClass(APTNavigator.java:113)
        at com.sun.tools.jxc.model.nav.APTNavigator.getBaseClass(APTNavigator.java:89)
        at com.sun.xml.bind.v2.model.impl.PropertyInfoImpl.getIndividualType(PropertyInfoImpl.java:195)
        at com.sun.xml.bind.v2.model.impl.PropertyInfoImpl.<init>(PropertyInfoImpl.java:137)
        at com.sun.xml.bind.v2.model.impl.MapPropertyInfoImpl.<init>(MapPropertyInfoImpl.java:71)
        at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.createMapProperty(ClassInfoImpl.java:928)
        at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.addProperty(ClassInfoImpl.java:885)
        at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.findGetterSetterProperties(ClassInfoImpl.java:1004)
        at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.getProperties(ClassInfoImpl.java:314)
        at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:247)
        at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:213)
        at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:319)
        at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:334)
        at com.sun.tools.xjc.api.impl.j2s.JavaCompilerImpl.bind(JavaCompilerImpl.java:94)
        at com.sun.tools.jxc.apt.SchemaGenerator$1.process(SchemaGenerator.java:119)
        at com.sun.mirror.apt.AnnotationProcessors$CompositeAnnotationProcessor.process(AnnotationProcessors.java:60)
        at com.sun.tools.apt.comp.Apt.main(Apt.java:454)
        at com.sun.tools.apt.main.JavaCompiler.compile(JavaCompiler.java:258)
        at com.sun.tools.apt.main.Main.compile(Main.java:1102)
        at com.sun.tools.apt.main.Main.compile(Main.java:964)
        at com.sun.tools.apt.Main.processing(Main.java:95)
        at com.sun.tools.apt.Main.process(Main.java:85)
        at com.sun.tools.apt.Main.process(Main.java:67)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.tools.jxc.SchemaGenerator$Runner.main(SchemaGenerator.java:245)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.tools.jxc.SchemaGenerator.run(SchemaGenerator.java:177)
        at com.sun.tools.jxc.SchemaGenerator.run(SchemaGenerator.java:81)
        at com.sun.tools.jxc.SchemaGenerator.main(SchemaGenerator.java:73)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.tools.jxc.SchemaGeneratorFacade.main(SchemaGeneratorFacade.java:60)
C:\Users\Desktop\jaxb\jaxb-ri-20101119\bin\src\com\tr\model\destination\Destination.java:9: package com.tr.model.address does not exist
import com.tr.model.address.BasicAddress;[code]

下面是我的文件夹结构的详细信息

schemagen 位于以下位置

C:\Users\Desktop\jaxb\jaxb-ri-20101119\bin

我尝试生成 xsd 所基于的 Java 类位于以下位置

C:\Users\Desktop\jaxb\jaxb-ri-20101119\bin\src\com\tr\model\destination

目标.java

而从 Destination 引用的所有其他类以及类本身都位于以下结构内

C:\Users\Raisonne\Desktop\jaxb\jaxb-ri-20101119\bin\src\com\raisonne\tr\model

我知道问题出在类路径的设置上,但我无法弄清楚如何为这种情况设置正确的类路径

我尝试将系统的 CLASSPATH 变量设置为值

C:\Users\Raisonne\Desktop\jaxb\jaxb-ri-20101119\bin\src\com\raisonne\tr\model as well other 2 mentioned in my post but nothing worked out.

任何人都可以帮我设置 schemagen 的类路径吗?

提前致谢

乌梅什

最佳答案

看来您已将类的包声明设置为

com.tr.model.address  

它应该来自你的目录结构

com.tr.model.destination

关于java - 使用 jaxb schemagen 创建 XSD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4305847/

相关文章:

java - 如何检查变量是否为整数

java - 文件复制陷入无限循环

Java Applet 未加载 - 客户端/服务器

xml - 我什么时候应该使用元素而不是属性?

c# - xsi :type attribute messing up C# XML deserialization

java - JAXB 和动态选择要实例化的类

java - 根据编辑请求中的用户角色选择要使用的 pojo

xml - XSD - 可以更改扩展类型中的属性类型

java - 使用 JAXB 创建具有动态标签名称的 XML

java - Jax-b 在解码时解释过多