有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从XSD生成JAXB类?

我对XML完全是个新手。我正在做一个JavaEE项目REST实现,我们返回了大量XML。有了这个,我们决定使用JAXB。到目前为止,我们为XML手动编写了模型

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

我的问题是:

1.)我读过关于XJC的书,在哪里可以找到

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


共 (5) 个答案

  1. # 1 楼答案

    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>
    
  2. # 2 楼答案

    对于EclipseST(至少3.5版)您不需要安装任何东西右键单击模式。xsd->;生成->;JAXB类您必须指定软件包&;在下一步中,仅此而已,应该生成您的类。我想上面提到的所有解决方案都有效,但这似乎是迄今为止最简单的(对于STS用户)

    [更新]Eclipse STS 3.6版(基于开普勒)也有相同的功能

    blah

  3. # 4 楼答案

    XJC包含在JDK的bin目录中,从JavaSE6开始。有关示例,请参见:

    博客内容如下:

    使用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模型

    以下模型由schema to Java编译器(XJC)生成。为了节省空间,我省略了get/set方法和注释

    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>();
    }
    

    iCountype

    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>();
    }
    

    IdType

    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>();
    }
    

    尿酸型

    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>();
    }
    
  4. # 5 楼答案

    1)您可以使用标准java实用工具xjc-([your java home dir]\bin\xjc.exe)。但你需要创造。使用它的bat(或.sh)脚本

    例如生成。蝙蝠:

    [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文件:生成。bat测试方案。xsd-d[你的src目录]

    有关更多信息,请使用本文档-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一起安装