以前实习的时候用过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,
并且代码比以前更易读了)
分享到:
相关推荐
例如,用户可以定义帧结构,包括标识符、数据长度、发送周期等,并且支持多种CAN总线标准,如CAN2.0A、CAN2.0B和J1939。此外,它还支持扩展功能,如错误检测码和错误处理策略,使得开发者能够确保数据传输的准确性和...
KB-1B V2.0开发板通过集成多种功能模块,为用户提供了一个全面且易于使用的开发平台。无论是学习MSP430单片机的基础知识,还是进行复杂的项目开发,这款开发板都能提供强大的支持。通过对上述关键组件的分析,我们...
该命令设置了更新间隔为10分钟,appKey为"M100000052",密码为"n525A97z0M7Vyh91b0508l7j0U5g2g9Y",版本号为V2.0,并选择商用平台。重启后,设备成功联网后会注册至商用平台,并每隔10分钟更新心跳数据。 ### 关闭...
B(j) = B(j) + y(i)*x(i)^(j-1); end end B = B'; % 计算未知数矩阵 a a = inv(A) * B; % 画出拟合曲线 x_fit = -1.0:0.0001:2.0; z = a(1) + a(2)*x_fit + a(3)*x_fit.^2 + a(4)*x_fit.^3; plot(x_fit, z) ...
这个线性方程组可以表示为矩阵形式,即 (A'A)x = A'B,其中 A 是一个 (m+1) x (n+1) 的矩阵,它的第 i 行第 j 列元素为 xi^(j-1),B 是一个 (m+1) x 1 的向量,其第 i 个元素为 yi。 4. **MATLAB 实现**: 在...
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.^...
6. 表达式计算:题目中涉及单精度数和浮点数的运算,要使y的值为7.0,只有B) y+=x+2.0满足条件,因为x=2.0,所以y变为3.0+2.0=5.0。 7. 类型转换与算术运算:当x=(double)(y*3+((int)y%4))时,y=3.5,y%4的结果是1...
B(j) = B(j) + y(i) * x(i)^(j-1); end end; B = B'; ``` 3. **求解线性方程组**:使用矩阵的逆运算求解 a。 ```matlab a = inv(A) * B; ``` 4. **绘制拟合曲线**:用求得的系数 a 生成拟合曲线并显示在图上。 `...
B(j) = B(j) + y(i) * x(i)^(j-1); end end B = B'; % 转置B以便矩阵乘法 % 计算系数 a = inv(A) * B; % 画图 x_fit = -1.0:0.0001:2.0; y_fit = a(1) + a(2) * x_fit + a(3) * x_fit.^2 + a(4) * x_fit.^3; ...
B(j) = B(j) + y(i-1) * x(i-1)^(j-1); end end end B = B'; % 转置B % 计算系数a a = inv(A'*A) * A' * B; % 预测值计算 x_new = [-1.0:0.0001:2.0]; z = a(1) + a(2)*x_new + a(3)*x_new.^2 + a(4)*x_new.^3;...
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的角度分布,...
B. 数据展示与输入控件: - `<s:bean>`:类似于 Struts1.x 中的 JavaBean 属性访问。 - `<s:checkbox>` 和 `<s:checkboxlist>`:分别用于单个复选框和多个复选框的选择。 - `<s:combobox>`:创建一个下拉列表,支持 ...
根据泰勒公式,我们知道对于任意\(x\in [a,b]\),存在某个\(\varepsilon\),使得\(f(x)\)可以表示为\(L(x)\)加上一个余项\(R_n(x)\),其中\(L(x)\)是\(f(x)\)在\([a,b]\)上的插值多项式,而\(R_n(x)\)是该多项式的...
6. 浮点数运算与类型转换:`c=a/b+0.4`,当`a=8`,`b=5`时,`a/b`的结果为1.6,加上0.4后,结果为2.0,但C语言中浮点数默认保留小数点后几位可能会有误差,所以最接近的整数值是2,答案是B。 7. 表达式求值:`(x+y)...
- a=1,b=3,c=5,d=4时,根据条件分支,x的值为1,因为满足a<b,进入第一个if语句。 - 输入6时,x++>5为真,打印x+1,即7。输入4时,x++>5为假,打印x--,即3。 - 输入5时,m++>5为真,打印m+1,即6。输入其他值...
设计矩阵 `A` 的第 `i` 行、第 `j` 列元素为 `x_i^(j-1)`,而目标向量 `B` 的第 `i` 个元素为 `y_i`。这样,最小二乘解可以通过以下公式得到: `a = inv(A'*A)*A'*B` 在MATLAB中,我们可以按照以下步骤进行操作: ...
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这个...