【问题标题】:How to generate JAXB classes from XSD?如何从 XSD 生成 JAXB 类?
【发布时间】:2012-07-12 21:01:26
【问题描述】:

我是 XML 的新手。我正在做一个 Java EE 项目 REST 实现,我们返回了很多 XML。有了这个,我们决定使用 JAXB。到目前为止,我们为 XML 手动编码了模型。

但是已经有这些复杂的结构我们不知道如何编码。我们已经阅读了有关从 XSD 生成类的内容。我们确实有 XSD。

我的问题:

1.) 我读过 XJC,在哪里可以找到它?

2.) 我们必须安装整个 JAXB 吗? (所以到目前为止我们使用的是什么?这不是 JAXB 吗?)

【问题讨论】:

    标签: java jakarta-ee jaxb


    【解决方案1】:

    XJC 包含在从 Java SE 6 开始的 JDK 的 bin 目录中。示例参见:

    博客内容如下:

    使用 JAXB 处理 Atom 提要 Atom 是一种用于表示 Web 提要的 XML 格式。标准格式允许阅读器应用程序显示来自不同来源的提要。在此示例中,我们将处理此博客的 Atom 提要。

    演示

    在本例中,我们将使用 JAXB 将与此博客对应的 Atom XML 提要转换为对象,然后再转换回 XML。

    import java.io.InputStream;
    import java.net.URL;
    import javax.xml.bind.*;
    import javax.xml.transform.stream.StreamSource;
    import org.w3._2005.atom.FeedType;
    
    public class Demo {
    
        public static void main(String[] args) throws Exception {
            JAXBContext jc = JAXBContext.newInstance("org.w3._2005.atom");
    
            Unmarshaller unmarshaller = jc.createUnmarshaller();
            URL url = new URL("http://bdoughan.blogspot.com/atom.xml");
            InputStream xml = url.openStream();
            JAXBElement<feedtype> feed = unmarshaller.unmarshal(new StreamSource(xml), FeedType.class);
            xml.close();
    
            Marshaller marshaller = jc.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.marshal(feed, System.out);
        }
    
    }
    

    JAXB 模型

    以下模型由模式生成到 Java 编译器 (XJC)。我省略了 get/set 方法和 cmets 以节省空间。

    xjc -d generated http://www.kbcafe.com/rss/atom.xsd.xml
    

    包裹信息

    @XmlSchema(
            namespace = "http://www.w3.org/2005/Atom",
            elementFormDefault = XmlNsForm.QUALIFIED)
    @XmlAccessorType(XmlAccessType.FIELD)
    package org.w3._2005.atom;
    
    import javax.xml.bind.annotation.*;
    

    类别类型

    package org.w3._2005.atom;
    
    import java.util.*;
    import javax.xml.bind.annotation.*;
    import javax.xml.bind.annotation.adapters.*;
    import javax.xml.namespace.QName;
    
    @XmlType(name = "categoryType")
    public class CategoryType {
        @XmlAttribute(required = true)
        protected String term;
    
        @XmlAttribute
        @XmlSchemaType(name = "anyURI")
        protected String scheme;
    
        @XmlAttribute
        protected String label;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlSchemaType(name = "anyURI")
        protected String base;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlSchemaType(name = "language")
        protected String lang;
    
        @XmlAnyAttribute
        private Map<QName, String> otherAttributes = new HashMap<QName, String>();
    }
    

    内容类型

    package org.w3._2005.atom;
    
    import java.util.*;
    import javax.xml.bind.annotation.*;
    import javax.xml.bind.annotation.adapters.*;
    import javax.xml.namespace.QName;
    
    @XmlType(name = "contentType", propOrder = {"content"})
    public class ContentType {
        @XmlMixed
        @XmlAnyElement(lax = true)
        protected List<Object> content;
    
        @XmlAttribute
        protected String type;
    
        @XmlAttribute
        @XmlSchemaType(name = "anyURI")
        protected String src;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlSchemaType(name = "anyURI")
        protected String base;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlSchemaType(name = "language")
        protected String lang;
    
        @XmlAnyAttribute
        private Map<QName, String> otherAttributes = new HashMap<QName, String>();
    }
    

    日期时间类型

    package org.w3._2005.atom;
    
    import java.util.*;
    import javax.xml.bind.annotation.*;
    import javax.xml.bind.annotation.adapters.*;
    import javax.xml.datatype.XMLGregorianCalendar;
    import javax.xml.namespace.QName;
    
    @XmlType(name = "dateTimeType", propOrder = {"value"})
    public class DateTimeType {
        @XmlValue
        @XmlSchemaType(name = "dateTime")
        protected XMLGregorianCalendar value;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlSchemaType(name = "anyURI")
        protected String base;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlSchemaType(name = "language")
        protected String lang;
    
        @XmlAnyAttribute
        private Map<QName, String> otherAttributes = new HashMap<QName, String>();
    }
    

    条目类型

    package org.w3._2005.atom;
    
    import java.util.*;
    import javax.xml.bind.JAXBElement;
    import javax.xml.bind.annotation.*;
    import javax.xml.bind.annotation.adapters.*;
    import javax.xml.namespace.QName;
    
    @XmlType(name = "entryType", propOrder = {"authorOrCategoryOrContent"})
    public class EntryType {
        @XmlElementRefs({
            @XmlElementRef(name = "id", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "rights", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "summary", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "title", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "author", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "source", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "updated", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "category", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "content", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "published", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "contributor", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "link", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class)
        })
        @XmlAnyElement(lax = true)
        protected List<Object> authorOrCategoryOrContent;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlSchemaType(name = "anyURI")
        protected String base;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlSchemaType(name = "language")
        protected String lang;
    
        @XmlAnyAttribute
        private Map<QName, String> otherAttributes = new HashMap<QName, String>();
    }
    

    饲料类型

    package org.w3._2005.atom;
    
    import java.util.*;
    import javax.xml.bind.JAXBElement;
    import javax.xml.bind.annotation.*;
    import javax.xml.bind.annotation.adapters.*;
    import javax.xml.namespace.QName;
    
    @XmlType(name = "feedType", propOrder = {"authorOrCategoryOrContributor"})
    public class FeedType {
        @XmlElementRefs({
            @XmlElementRef(name = "link", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "updated", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "category", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "rights", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "contributor", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "title", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "id", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "generator", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "icon", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "subtitle", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "author", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "entry", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "logo", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class)
        })
        @XmlAnyElement(lax = true)
        protected List<Object> authorOrCategoryOrContributor;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlSchemaType(name = "anyURI")
        protected String base;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlSchemaType(name = "language")
        protected String lang;
    
        @XmlAnyAttribute
        private Map<QName, String> otherAttributes = new HashMap<QName, String>();
    }
    

    发电机类型

    package org.w3._2005.atom;
    
    import java.util.*;
    import javax.xml.bind.annotation.*;
    import javax.xml.bind.annotation.adapters.*;
    import javax.xml.namespace.QName;
    
    @XmlType(name = "generatorType", propOrder = {"value"})
    public class GeneratorType {
        @XmlValue
        protected String value;
    
        @XmlAttribute
        @XmlSchemaType(name = "anyURI")
        protected String uri;
    
        @XmlAttribute
        protected String version;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlSchemaType(name = "anyURI")
        protected String base;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlSchemaType(name = "language")
        protected String lang;
    
        @XmlAnyAttribute
        private Map<QName, String> otherAttributes = new HashMap<QName, String>();
    }
    

    图标类型

    package org.w3._2005.atom;
    
    import java.util.*;
    import javax.xml.bind.annotation.*;
    import javax.xml.bind.annotation.adapters.*;
    import javax.xml.namespace.QName;
    
    @XmlType(name = "iconType", propOrder = {"value"})
    public class IconType {
        @XmlValue
        @XmlSchemaType(name = "anyURI")
        protected String value;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlSchemaType(name = "anyURI")
        protected String base;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlSchemaType(name = "language")
        protected String lang;
    
        @XmlAnyAttribute
        private Map<QName, String> otherAttributes = new HashMap<QName, String>();
    }
    

    身份类型

    package org.w3._2005.atom;
    
    import java.util.*;
    import javax.xml.bind.annotation.*;
    import javax.xml.bind.annotation.adapters.*;
    import javax.xml.namespace.QName;
    
    @XmlType(name = "idType", propOrder = {"value"})
    public class IdType {
        @XmlValue
        @XmlSchemaType(name = "anyURI")
        protected String value;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlSchemaType(name = "anyURI")
        protected String base;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlSchemaType(name = "language")
        protected String lang;
    
        @XmlAnyAttribute
        private Map<QName, String> otherAttributes = new HashMap<QName, String>();
    }
    

    链接类型

    package org.w3._2005.atom;
    
    import java.math.BigInteger;
    import java.util.*;
    import javax.xml.bind.annotation.*;
    import javax.xml.bind.annotation.adapters.*;
    import javax.xml.namespace.QName;
    
    @XmlType(name = "linkType", propOrder = {"content"})
    public class LinkType {
        @XmlValue
        protected String content;
    
        @XmlAttribute(required = true)
        @XmlSchemaType(name = "anyURI")
        protected String href;
    
        @XmlAttribute
        protected String rel;
    
        @XmlAttribute
        protected String type;
    
        @XmlAttribute
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlSchemaType(name = "NMTOKEN")
        protected String hreflang;
    
        @XmlAttribute
        protected String title;
    
        @XmlAttribute
        @XmlSchemaType(name = "positiveInteger")
        protected BigInteger length;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlSchemaType(name = "anyURI")
        protected String base;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlSchemaType(name = "language")
        protected String lang;
    
        @XmlAnyAttribute
        private Map<QName, String> otherAttributes = new HashMap<QName, String>();
    }
    

    标志类型

    package org.w3._2005.atom;
    
    import java.util.*;
    import javax.xml.bind.annotation.*;
    import javax.xml.bind.annotation.adapters.*;
    import javax.xml.namespace.QName;
    
    @XmlType(name = "logoType", propOrder = {"value"})
    public class LogoType {
        @XmlValue
        @XmlSchemaType(name = "anyURI")
        protected String value;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlSchemaType(name = "anyURI")
        protected String base;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlSchemaType(name = "language")
        protected String lang;
    
        @XmlAnyAttribute
        private Map<QName, String> otherAttributes = new HashMap<QName, String>();
    }
    

    人物类型

    package org.w3._2005.atom;
    
    import java.util.*;
    import javax.xml.bind.JAXBElement;
    import javax.xml.bind.annotation.*;
    import javax.xml.bind.annotation.adapters.*;
    import javax.xml.namespace.QName;
    
    @XmlType(name = "personType", propOrder = {"nameOrUriOrEmail"})
    public class PersonType {
        @XmlElementRefs({
            @XmlElementRef(name = "email", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "name", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "uri", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class)
        })
        @XmlAnyElement(lax = true)
        protected List<Object> nameOrUriOrEmail;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlSchemaType(name = "anyURI")
        protected String base;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlSchemaType(name = "language")
        protected String lang;
    
        @XmlAnyAttribute
        private Map<QName, String> otherAttributes = new HashMap<QName, String>();
    }
    

    来源类型

    package org.w3._2005.atom;
    
    import java.util.*;
    import javax.xml.bind.JAXBElement;
    import javax.xml.bind.annotation.*;
    import javax.xml.bind.annotation.adapters.*;
    import javax.xml.namespace.QName;
    
    @XmlType(name = "sourceType", propOrder = {"authorOrCategoryOrContributor"})
    public class SourceType {
        @XmlElementRefs({
            @XmlElementRef(name = "updated", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "category", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "subtitle", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "logo", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "generator", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "icon", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "title", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "id", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "author", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "contributor", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "link", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class),
            @XmlElementRef(name = "rights", namespace = "http://www.w3.org/2005/Atom", type = JAXBElement.class)
        })
        @XmlAnyElement(lax = true)
        protected List<Object> authorOrCategoryOrContributor;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlSchemaType(name = "anyURI")
        protected String base;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlSchemaType(name = "language")
        protected String lang;
    
        @XmlAnyAttribute
        private Map<QName, String> otherAttributes = new HashMap<QName, String>();
    }
    

    文本类型

    package org.w3._2005.atom;
    
    import java.util.*;
    import javax.xml.bind.annotation.*;
    import javax.xml.bind.annotation.adapters.*;
    import javax.xml.namespace.QName;
    
    @XmlType(name = "textType", propOrder = {"content"})
    public class TextType {
        @XmlMixed
        @XmlAnyElement(lax = true)
        protected List<Object> content;
    
        @XmlAttribute
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        protected String type;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlSchemaType(name = "anyURI")
        protected String base;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlSchemaType(name = "language")
        protected String lang;
    
        @XmlAnyAttribute
        private Map<QName, String> otherAttributes = new HashMap<QName, String>();
    }
    

    UriType

    package org.w3._2005.atom;
    
    import java.util.*;
    import javax.xml.bind.annotation.*;
    import javax.xml.bind.annotation.adapters.*;
    import javax.xml.namespace.QName;
    
    @XmlType(name = "uriType", propOrder = {"value"})
    public class UriType {
        @XmlValue
        @XmlSchemaType(name = "anyURI")
        protected String value;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlSchemaType(name = "anyURI")
        protected String base;
    
        @XmlAttribute(namespace = "http://www.w3.org/XML/1998/namespace")
        @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
        @XmlSchemaType(name = "language")
        protected String lang;
    
        @XmlAnyAttribute
        private Map<QName, String> otherAttributes = new HashMap<QName, String>();
    }
    

    【讨论】:

    • 最佳答案,因为我也使用此答案找到了解决方案(尽管我自己找到了)。谢谢:)
    • xjc -d generated http://www.kbcafe.com/rss/atom.xsd.xml 不再有效(链接失效)。使用例如another Atom XSD 如果您只想生成 something 而不是复制上述内容。 xjc -d generated http://exyus.com/xcs/tasklist/source/?f=put_atom.xsd 目前有效。不过,请先创建 generated 目录。
    • 在哪里可以找到 org.w3._2005.atom.FeedType 的依赖关系?
    【解决方案2】:

    对于 Eclipse STS(至少 3.5) 你不需要安装任何东西。 右键单击 schema.xsd -> Generate -> JAXB Classes。 您必须在下一步中指定包和位置,仅此而已,您的类应该会生成。我猜上面提到的所有解决方案都有效,但这似乎是迄今为止最简单的(对于 STS 用户)。

    [更新] Eclipse STS 3.6 版(基于 Kepler)具有相同的功能。

    【讨论】:

    • 在 Eclipse Kepler 中,这些工具似乎不再存在
    • 请注意,您需要安装“dali”JAXB webtools 才能获得该菜单选项。见eclipse.org/webtools/dali
    • 您可以添加 jaxb-impl jar 而不是安装“dali”网络工具
    【解决方案3】:

    1) 您可以使用标准的 java 实用程序 xjc - ([your java home dir]\bin\xjc.exe)。但是您需要创建 .bat(或 .sh)脚本才能使用它。

    例如生成.bat:

    [your java home dir]\bin\xjc.exe %1 %2 %3
    

    例如测试方案.xsd:

    <?xml version="1.0"?>
    <xs:schema version="1.0"
               xmlns:xs="http://www.w3.org/2001/XMLSchema"
               elementFormDefault="qualified" 
               targetNamespace="http://myprojects.net/xsd/TestScheme"
               xmlns="http://myprojects.net/xsd/TestScheme">
        <xs:element name="employee" type="PersonInfoType"/>
    
        <xs:complexType name="PersonInfoType">
            <xs:sequence>
                <xs:element name="firstname" type="xs:string"/>
                <xs:element name="lastname" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:schema>
    

    运行带有参数的 .bat 文件:generate.bat test-scheme.xsd -d [your src dir]

    有关更多信息,请使用此文档 - http://docs.oracle.com/javaee/5/tutorial/doc/bnazg.html

    还有这个 - http://docs.oracle.com/javase/6/docs/technotes/tools/share/xjc.html

    2)JAXB(xjc实用程序)默认与JDK6一起安装。

    【讨论】:

    • 我不明白这里需要脚本。
    【解决方案4】:

    我希望这会有所帮助!

    【讨论】:

      【解决方案5】:

      cxf 非常支持这种东西,例如

      <plugin>
          <groupId>org.apache.cxf</groupId>
          <artifactId>cxf-xjc-plugin</artifactId>
          <version>2.3.0</version>
          <configuration>
            <extensions>
              <extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:2.3.0</extension>
            </extensions>
          </configuration>
          <executions>
            <execution>
              <id>generate-sources-trans</id>
              <phase>generate-sources</phase>
              <goals>
                <goal>xsdtojava</goal>
              </goals>
              <configuration>
                <sourceRoot>${basedir}/src/main/java</sourceRoot>
                <xsdOptions>
                  <xsdOption>
                    <xsd>src/main/resources/xxx.xsd</xsd>
                  </xsdOption>
                </xsdOptions>
              </configuration>
            </execution>
          </executions>
        </plugin>
      

      【讨论】:

        【解决方案6】:

        在 intellij 点击 .xsd 文件 -> 网络服务 ->从 Xml Schema JAXB 生成 Java 代码 然后给出包路径和包名 ->好的

        请注意,所需的插件是:Java EE: Web Services (JAX-WS)(捆绑)

        【讨论】:

          【解决方案7】:
          1. 下载http://java.net/downloads/jaxb-workshop/IDE%20plugins/org.jvnet.jaxbw.zip
          2. 解压 zip 文件。
          3. 将 org.jvnet.jaxbw.eclipse_1.0.0 文件夹放入 .eclipse\plugins 文件夹中
          4. 重启 Eclipse。
          5. 右键单击 XSD 文件,您可以找到联系菜单。 JAXB 2.0 -> 运行 XJC。

          【讨论】:

            【解决方案8】:

            您还可以使用 jaxb2-maven-plugin 插件从架构生成源代码:

                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>jaxb2-maven-plugin</artifactId>
                        <version>2.2</version>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>xjc</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <sources>
                                <source>src/main/resources/your_schema.xsd</source>
                            </sources>
                            <xjbSources>
                                <xjbSource>src/main/resources/bindings.xjb</xjbSource>
                            </xjbSources>
                            <packageName>some_package</packageName>
                            <outputDirectory>src/main/java</outputDirectory>
                            <clearOutputDir>false</clearOutputDir>
                            <generateEpisode>false</generateEpisode>
                            <noGeneratedHeaderComments>true</noGeneratedHeaderComments>
                        </configuration>
                    </plugin>
            

            【讨论】:

              【解决方案9】:

              Eclipse 中,右键单击要获取的xsd 文件 --> 生成 --> Java... --> 生成器:“Schema to JAXB Java Classes”。

              我刚刚遇到了同样的问题,我有一堆 xsd 文件,其中只有一个是 XML Root Element,它运行良好,正如我上面在 Eclipse 中解释的那样

              【讨论】:

              • NetBeans 是否具有相同的功能? Eclipse 是如何做到的?
              【解决方案10】:

              您可以从http://jaxb.java.net/2.2.5/ 下载 JAXB jar 文件 您不需要安装任何东西,只需调用 xjc 命令并使用指向下载的 JAXB jar 文件的类路径参数。

              【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-06-08
              • 2015-04-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多