以前实习的时候用过JAXB1.x,据说JAXB2.0使用了Java 5.0的新特性,例如注解、泛型,使得JAXB更容易使用,于是从
网上下来试了一下:
从https://jaxb.dev.java.net/servlets/ProjectDocumentList?folderID=6344&expandFolder=6344&folderID=0
下载到JAXB2_20061115.jar,为了方便使用把JAXB2_20061115.jar拷到工程中,本事例使用Eclipse开发,工程目录
为:D:\eclipse\workspace\JaxbTest,可以新建一个目录jaxb来存放JAXB2_20061115.jar,在命令行下,把目录切换
到jaxb下(当然开始要配置好环境变量),使用java -jar JAXB2_20061115.jar生成一个目录:jaxb-ri-20061115,里面
有bin和lib,在bin目录下新建一个generator.bat的批处理:
xjc -d D:\eclipse\workspace\JaxbTest\src -p "edu.jlu.xml" "D:\eclipse\workspace\JaxbTest\schema\messages.xsd"
其中D:\eclipse\workspace\JaxbTest\src为原文件的目录,edu.jlu.xml为生成Java类的包名,D:\eclipse\workspace\JaxbTest\schema\messages.xsd为xml schema文件的路径。
这样以后我们每次修改messages.xsd,我们只需要双击generator.bat来更新Java类就可以了。
下面我们我们在messages.xsd定义schema:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="catalog" type="catalogType"/>
<xsd:complexType name="catalogType">
<xsd:sequence>
<xsd:element ref="journal" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="section" type="xsd:string"/>
<xsd:attribute name="publisher" type="xsd:string"/>
</xsd:complexType>
<xsd:element name="journal" type="journalType"/>
<xsd:complexType name="journalType">
<xsd:sequence>
<xsd:element ref="article" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="article" type="articleType"/>
<xsd:complexType name="articleType">
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="author" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="level" type="xsd:string"/>
<xsd:attribute name="date" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>
然后双击generator.bat就可以生成Java类了,本例我们生成了ArticleType.java,CatalogType.java,
JournalType.java和ObjectFactory.java
一般我们会对XML根的那个element对应的Java类,写一个实用的xml与object之间转换的类,本例中
为那个element为catalog,对应的Java类为CatalogType.java,我们可以写一个CatalogTypeUtils来帮助
我们实现xml与object之间的转换:
package edu.jlu.xml;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class CatalogTypeUtils ...{
private static JAXBContext jaxbContext = null;
private static Marshaller marshaller = null;
private static ObjectFactory factory = null;
/**//*
*@param catalogType is the object that is used to build xml
*@param xmlDocument is the file where xml to output
*/
public static void buildXml(CatalogType catalogType, File xmlDocument) ...{
try ...{
jaxbContext = JAXBContext.newInstance("edu.jlu.xml");
marshaller = jaxbContext.createMarshaller();
ObjectFactory factory = new ObjectFactory();
JAXBElement<CatalogType> catalogElement = factory.createCatalog(catalogType);
marshaller.marshal(catalogElement,new FileOutputStream(xmlDocument));
} catch (FileNotFoundException e) ...{
e.printStackTrace();
} catch (JAXBException e) ...{
e.printStackTrace();
}
}
/**//*
*@param xmlDocument the xml file to build object
*@return the built object
*/
public static CatalogType buildObject(File xmlDocument) ...{
JAXBElement<CatalogType> catalogElement = null;
try ...{
JAXBContext jaxbContext = JAXBContext.newInstance("edu.jlu.xml");
Unmarshaller unMarshaller = jaxbContext.createUnmarshaller();
catalogElement = (JAXBElement<CatalogType>) unMarshaller.unmarshal(xmlDocument);
} catch (Exception e) ...{
e.printStackTrace();
}
return catalogElement.getValue();
}
}
下面我们做一下测试:
package edu.jlu.test;
import java.io.File;
import edu.jlu.xml.ArticleType;
import edu.jlu.xml.CatalogType;
import edu.jlu.xml.CatalogTypeUtils;
import edu.jlu.xml.JournalType;
import edu.jlu.xml.ObjectFactory;
public class Test ...{
private ObjectFactory factory = new ObjectFactory();
/**//*
* @param xmlDocument is the output xml file
*/
public void testObject2Xml(File xmlDocument) ...{
CatalogType catalog = factory.createCatalogType();
assmbleCatalogForTest(catalog);
CatalogTypeUtils.buildXml(catalog,xmlDocument);
}
/**//*
* @param xmlDocument is the source xml file for generating Object
*/
public CatalogType testXml2Object(File xmlDocument)...{
return CatalogTypeUtils.buildObject(xmlDocument);
}
/**//*
* This function is used to assmble CatalogType object for test
*/
private CatalogType assmbleCatalogForTest(CatalogType catalog)...{
catalog.setSection("Java Technology");
catalog.setPublisher("IBM developerWorks");
JournalType journal = factory.createJournalType();
ArticleType article = factory.createArticleType();
article.setLevel("Intermediate");
article.setDate("January-2004");
article.setTitle("Service Oriented Architecture Frameworks");
article.setAuthor("Naveen Balani");
java.util.List journalList = catalog.getJournal();
journalList.add(journal);
java.util.List articleList = journal.getArticle();
articleList.add(article);
article = factory.createArticleType();
article.setLevel("Advanced");
article.setDate("October-2003");
article.setTitle("Advance DAO Programming");
article.setAuthor("Sean Sullivan");
articleList = journal.getArticle();
articleList.add(article);
article = factory.createArticleType();
article.setLevel("Advanced");
article.setDate("May-2002");
article.setTitle("Best Practices in EJB Exception Handling");
article.setAuthor("Srikanth Shenoy");
articleList = journal.getArticle();
articleList.add(article);
return catalog;
}
public static void main(String[] argv) ...{
Test test = new Test();
test.testObject2Xml(new File("E:\hello.xml"));
CatalogType type = test.testXml2Object(new File("E:\hello.xml"));
System.out.println(type.getPublisher());
}
}
我们发现JAXB2.0比以前简单多了,并且生成的代码少了许多。(以前会生成type接口和Type的
实现类,其实生成的Object分离出接口的意义并不大,JAXB2.0直接生成一个type具体的class,
并且代码比以前更易读了)
分享到:
相关推荐
(a) 1<X(b) X==2||X==3||X==4 (c) 1<X&&X(d) !(X)&&!(X>=5) 26. 已知x=5,则执行语句 x += x -= x*x ; 后,x的值为( c )。 (a)25 (b)40 (c)-40 (d)20 27. 设a=1,b=2,c=3,d=4,则条件表达式...
B(j) = B(j) + y(i)*x(i)^(j-1); end end B = B'; a = inv(A)*B; x = [-1.0:0.0001:2.0]; z = a(1) + a(2)*x + a(3)*x.^2 + a(4)*x.^3; plot(x, z) legend('离散点', 'y=a(1)+a(2)*x+a(3)*x.^2+a(4)*x.^...
n B A ∀1 ≤ i < j ≤ m a and a = b i b j 0 and B = {a ,a ,⋯ ,a } b 1 b 2 b m φ(1 + a ) ∑ i=1 m b i φ(x) x x A 10 + 9 7 n n a ,a ,⋯ ,a 1 2 n 10 + 9 7 样例1输出 12 样例1解释 符合条件的子序列有: ...
或者,假设JP = 1 +,则显着性为3.8σ,质量和宽度分别为(2062.8±13.1±7.2)MeV / c2和(177±36±35)MeV,产物分支分数B(J /ψ→ηX)×B(X→ϕη′)=(9.6±1.4±2.0)×10-5。 研究了J /ψ→ηX的角度分布,...
x(j+1) = x(j-1) + 2.0 * dt * ((b * x(j) + c * (j) * dt) / a); t(j+1) = tinit + (j-1) * dt; end % 绘图 plot(t, x) title('中点法') xlabel('t'), ylabel('x(t)') ``` 四、二阶Runge-Kutta法 二阶Runge-...
1、 按照规则计算单词的值,如果 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 26个字母(全部用大写)的值分别为1 2 3 4 5 6 7 8 9 10 11 12 13 1 15 16 17 18 19 20 21 22 23 24 25 26, 如 WINJACK这个...
X/A/N/H/V/P ### 3.2.19 变压器 TR/TYPE/N ### 3.2.20 按键 SW/N/(TYPE)R1 ### 3.2.21 蜂鸣器/喇叭 SP/TYPE ### 3.2.22 商标/标志 LOGO/TYPE ### 3.2.23 编码钮 ENC/TYPE ### 3.2.24 排线组件 JW/A/N #...
在质子中心能量为7和13 TeV的pp碰撞中研究了B±介子的产生,分别使用B±→J /ψK±衰变和分别对应于1.0 fb -1和0.3 fb -1的数据样本 。 两种装料相加并在横向动量范围0 <p T <40 GeV / c和速度范围2.0 <y &...
Pse-in-One 2.0是从Pse-in-one(Liu,B.,Liu,F.,Wang,X.,Chen,J.Fang,L.&Chou,KC Nucleic Acids)演变而来的Web服务器程序包研究,2015,43:W65-W71)。 为了使它更加灵活和全面,正如许多用户所建议的...
c[i][j]+=a[i][k]*b[k][j]; } } } return c; } public double[][] trans(double tem[][]){ double t1[][]=new double[tem[0].length][tem.length]; for(int i=0;i;i++){ for...
USBCAN-XE -X系列工业级CAN通讯卡可选支持CANopen 、DeviceNet 、SAE J1939、iCAN或 CAN2.0A/B 等 CAN-bus 应用层协议,支持 5Kbps ~ 1M bps 之间的任意波特率,并提供多个操作系统的设备驱波特率,工具 软件 等,能...
21.23Renderpath0 a- k7 h3 e: F+ X: {5 a* F 22.24surface5.00 P9 O+ f* ]4 r$ x0 s1 K/ o3 K$ w 23.25顶点变化! ]; M# l$ B: _: a 24.26片段着色器 25.27参数传递 26.28向量的运算) a$ r1 U/ e9 y7 |2 k% ]/ @ 27....
E% B# ` j3 g+ n X 21.23Renderpath1 v4 Q/ S M" [) O; D1 X 22.24surface5.0 23.25顶点变化6 r( p2 D9 F* Y( O7 |" B 24.26片段着色器% p; M5 s- _& V2 ~! v# b 25.27参数传递 26.28向量的运算 27.29灯光原理 28....
若有定义语句:double x[5]={1.0,2.0,3.0,4.0,5.0}, *p=x;则错误引用x数组元素的是x[5]。若有定义语句:char s[10]="1234567\0\0"; ,则strlen(s)的值是7。 6. 选择题(36)~(40) 在C语言中,以下叙述中错误的...
国内不少企业采用的这套代码: $ P`,%M X 比如:美吾发快速护发染发霜-品牌直销WAP 站点:http://WAP.MWF.HK fg/fP tTP 吐鲁番党建网:http://wap.turpandj.gov.cn ;8!I?Nb\;( 迷你驿站:...
ˆ = 1.74±0.29±0.28±0.18B,在质心能量s = 7TeV,使用对应于0.7 fb -1和σc(1S)/σ的综合亮度的数据 J / ψ = 1.60±0.29±0.25±0.17B在s = 8TeV使用2.0 fb -1。 引用的不确定性是按顺序的,统计的,...
char[] character ={ ''2'', ''3'', ''4'', ''5'', ''6'', ''8'', ''9'', ''A'', ''B'', ''C'', ''D'', ''E'', ''F'', ''G'', ''H'', ''J'', ''K'', ''L'', ''M'', ''N'', ''P'', ''R'', ''S'', ''T'', ''W'', ''X...
if( ++a==b ) x=++a*x; A) 35 B) 25 C) 20 D) 5 11.下列语句序列执行后,k 的值是( )。 int i=6,j=8,k=10,m=7; if(i>j||m) k++; else k--; A) 12 B)11 C) 10 D) 9 12.下列语句序列执行后,k的值是( )。 int j=8,...
和输出单元的激活函数为一S 型函数: tanh( ) j j y = a bnet ,且a =1.716,b = 2 / 3。 (a) 设 描 述 输入层到隐含层权值( , 1,2, 0,1,2) ji w j = i = 及隐含层到输出层权值 ( , 1, 0,1,2) kj w k = j = 的矩阵...