Inc*_*ito 114 java jaxb java-ee
我是XML的新手.我正在做一个Java EE项目REST实现,我们返回了很多XML.有了这个,我们决定使用JAXB.到目前为止,我们手动编写了XML的模型.
但是已经存在这些复杂的结构,我们不知道如何编码.我们已经阅读了有关从XSD生成类的信息.我们有一个XSD.
我的问题:
1.)我读过有关XJC的文章,我在哪里可以找到它?
2.)我们必须安装整个JAXB吗?(所以我们到目前为止使用的是什么?这不是JAXB?)
bdo*_*han 104
从Java SE 6开始,XJC包含在JDK的bin目录中.有关示例,请参阅:
博客的内容如下:
使用JAXB处理Atom Feed Atom是一种用于表示Web Feed的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);
}
}
Run Code Online (Sandbox Code Playgroud)
JAXB模型
模式生成以下模型到Java编译器(XJC).我省略了get/set方法和注释以节省空间.
xjc -d generated http://www.kbcafe.com/rss/atom.xsd.xml
Run Code Online (Sandbox Code Playgroud)
包信息
@XmlSchema(
namespace = "http://www.w3.org/2005/Atom",
elementFormDefault = XmlNsForm.QUALIFIED)
@XmlAccessorType(XmlAccessType.FIELD)
package org.w3._2005.atom;
import javax.xml.bind.annotation.*;
Run Code Online (Sandbox Code Playgroud)
CategoryType
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>();
}
Run Code Online (Sandbox Code Playgroud)
内容类型
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>();
}
Run Code Online (Sandbox Code Playgroud)
DateTimeType
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>();
}
Run Code Online (Sandbox Code Playgroud)
EntryType
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>();
}
Run Code Online (Sandbox Code Playgroud)
的FeedType
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>();
}
Run Code Online (Sandbox Code Playgroud)
GeneratorType
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>();
}
Run Code Online (Sandbox Code Playgroud)
IconType
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>();
}
Run Code Online (Sandbox Code Playgroud)
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>();
}
Run Code Online (Sandbox Code Playgroud)
链接类型
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>();
}
Run Code Online (Sandbox Code Playgroud)
标识
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>();
}
Run Code Online (Sandbox Code Playgroud)
PersonType
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>();
}
Run Code Online (Sandbox Code Playgroud)
SourceType中
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>();
}
Run Code Online (Sandbox Code Playgroud)
TextType
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>();
}
Run Code Online (Sandbox Code Playgroud)
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>();
}
Run Code Online (Sandbox Code Playgroud)
ili*_*nca 47
对于Eclipse STS(至少3.5),您不需要安装任何东西.右键单击schema.xsd - > Generate - > JAXB Classes.您必须在下一步中指定包和位置,这就是全部,您的类应该生成.我猜所有上述解决方案都有效,但这似乎是最简单的(对于STS用户).
[更新] Eclipse STS版本3.6(基于Kepler)具有相同的功能.

小智 18
1)您可以使用标准的java实用程序xjc - ([您的java home目录]\bin\xjc.exe).但是您需要创建.bat(或.sh)脚本才能使用它.
例如generate.bat:
[your java home dir]\bin\xjc.exe %1 %2 %3
Run Code Online (Sandbox Code Playgroud)
例如test-scheme.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>
Run Code Online (Sandbox Code Playgroud)
使用参数运行.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一起安装.
如果您使用的是Eclipse,还可以尝试使用JAXB Eclipse插件
您可以在此处找到有关jdk安装随附的XJC绑定编译器的更多信息:xjc: XML绑定的Java™体系结构-Binding编译器
我希望这有帮助!
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>
Run Code Online (Sandbox Code Playgroud)
小智 5
在 intellij 中点击 .xsd 文件 -> WebServices ->Generate Java code from Xml Schema JAXB 然后给出包路径和包名 ->ok
请注意,所需的插件是:Java EE: Web Services (JAX-WS)(捆绑)
您还可以使用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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
255202 次 |
| 最近记录: |