`
zjnbshifox
  • 浏览: 316106 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

JAXB的使用

    博客分类:
  • Java
阅读更多
首先XML文件的内容如下,
<connection>
xml 代码
 
  1. <?xml version="1.0" encoding="GBK"?>  
  2. <connections>  
  3.  <connection>  
  4.   <isDataSource>true</isDataSource>  
  5.   <jndiname>jdbc/opendb</jndiname>  
  6.  </connection>  
  7.  <connection>  
  8.   <isDataSource>false</isDataSource>  
  9.   <driver>com.ibm.db2.jcc.DB2Driver</driver>  
  10.   <url>jdbc:db2://10.1.1.10:50000/dbjl</url>  
  11.   <user>db2admin</user>  
  12.   <pwd>db2admin</pwd>  
  13.  </connection>  
  14. </connections>  

 </connection>
要使用JAXB,需要通过DTD或者XSD文件,可以根据XML写出这两个文件,介绍一个XSD文件的过程:
根据内容写出xsd文件
   <xsd:schema xmlns:xsd="&amp;lt;a href=" http:="" www.w3.org="" xmlschema=""><xsd:element name="connections"><xsd:complextype><xsd:sequence> <xsd:element name="connection" minoccurs="1" maxoccurs="unbounded"><xsd:complextype><xsd:sequence><xsd:element name="isDataSource" type="xsd:boolean" minoccurs="1" maxoccurs="1"><xsd:element name="jndiname" type="xsd:string" minoccurs="0" maxoccurs="1"><xsd:element name="driver" type="xsd:string" minoccurs="0" maxoccurs="1"><xsd:element name="url" type="xsd:string" minoccurs="0" maxoccurs="1"><xsd:element name="user" type="xsd:string" minoccurs="0" maxoccurs="1"><xsd:element name="pwd" type="xsd:string" minoccurs="0" maxoccurs="1"></xsd:element></xsd:element></xsd:element></xsd:element></xsd:element>
xml 代码
 
  1. <?xml version="1.0"?>  
  2. <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
  3.  xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"  
  4.    jaxb:version="1.0">   
  5. <xsd:element name="connections">  
  6. <xsd:complexType>  
  7.  <xsd:sequence>  
  8.   <xsd:element name="connection" minOccurs="1" maxOccurs="unbounded">  
  9.    <xsd:complexType>  
  10.     <xsd:sequence>  
  11.      <xsd:element name="isDataSource" type="xsd:boolean" minOccurs="1" maxOccurs="1"/>  
  12.         <xsd:element name="jndiname" type="xsd:string" minOccurs="0" maxOccurs="1"/>  
  13.         <xsd:element name="driver" type="xsd:string" minOccurs="0" maxOccurs="1"/>  
  14.         <xsd:element name="url" type="xsd:string" minOccurs="0" maxOccurs="1"/>  
  15.         <xsd:element name="user" type="xsd:string" minOccurs="0" maxOccurs="1"/>  
  16.         <xsd:element name="pwd" type="xsd:string" minOccurs="0" maxOccurs="1"/>       
  17.      </xsd:sequence>         
  18.    </xsd:complexType>  
  19.   </xsd:element>  
  20.  </xsd:sequence>  
  21. </xsd:complexType>    
  22. </xsd:element>  
  23. </xsd:schema>  
</xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:schema>
到sun网站下载jwsdp-1.6,安装,然后把安装目录下面的jaxb目录下的所有Jar加入到classpath,再加上jwsp-1.6安装目录jwsdp-shared\lib目录下的relaxngDatatype.jar,xsdlib.jar到classpath,
 
进入到cmd命令行,执行命名%JAXB_HOME%\bin\xjc.bat decfg.xsd -d src -p net.fox.jaxb
在src目录下面会生成所有需要用的类
复制到你需使用到的工程里,写测试程序:
import java.io.FileInputStream;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import sun.security.krb5.internal.crypto.c;
import com.jl.de.jaxb.ConnectionsType;
import com.jl.de.jaxb.ConnectionsType.ConnectionType;
public class JaxbExample {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  try {
   JAXBContext cxt = JAXBContext.newInstance("net.fox.jaxb");
   Unmarshaller unm = cxt.createUnmarshaller();
   ConnectionsType cnt = (ConnectionsType) unm.unmarshal(new FileInputStream("apcfg.xml"));
   List list = cnt.getConnection();
   for(int i=0;i
}
觉得Jaxb来处理比较好理解了,但是还是需要对xml和xsd文档结构有一定的了解,其次,如果想要改变类路径(这里的net.fox.jaxb)需要重新生成有点不方便。还有在jaxb生成的时候会有一个jaxb.properites和bgm.ser生成在同一个包里,如果用户需要打jar,需要把这两个文件也打进去。其余的就是网上介绍的好处了:

 

 使用XML和JAXB的优势

l          简单易用。
通过上面的例子,大家可以发现所有对XML文档的操作都隐藏起来了,你的应用程序不用使用SAXDOM接口编程去操纵XML文档,使程序量降低,错误率减少,有助于程序质量的提高。

l          维护性好。
当你的产品需要更新,或是数据模型需要改变时,只需要重新定义Schema,然后让JAXB重新生成对XML文档进行操纵的类,使得你的应用程序具有很好的维护性。

l          数据兼容性好。
当你进行版本更新的时候,往往要考虑兼容性问题。由于你使用了XML作为数据交换的格式,只需要提供XSLT的模板就能将原有的数据格式自动转换成新版本的格式。除此以外,你可以将你的XML表示的图形数据文件任意转换成其他标准的CAD数据格式,一切都在你的掌握之中。

l          有较好的性能。
因为JAXB在运行时在大部分时间中都是直接操纵内存中的Java对象,只有在读取和存储文件的时候才会与XML文件进行IO操作,实质上是为XML文件做了一个缓存,因此运行时的性能很好。

 

劣势(也是网上的资料):

跟直接使用Java对象序列化相比,JAXB也有它的限制。在使用Java序列化的时候,Java对象和XML文档是直接对应起来的。例如,在画布上有一个java.awt.Button对象,那么当你进行序列化的时候,java.awt.Button的所有数据被直接存储到序列化文件中;在进行图形恢复的时候,文件中的序列化数据直接就转换成java.awt.Button对象了。然而在使用JAXB的时候,由于JAXB没有将XML文档转换成指定的Java类的功能,XML和应用程序中间会多一层。例如,你不能要求JAXBXML文档数据中直接生成java.awt.Button对象,JAXB在大多数环境中只能生成中间进行数据传递的对象。用java.awt.Button作为例子,使用JAXB,你只能根据XML中的数据生成JAXB特有的MyButton对象,在再通过MyButton对象中的数据去初始化java.awt.Button对象。这种间接的数据传递所带来的负面影响是使用JAXB的系统会产生大量传递数据的中间对象。虽然说,由于Java虚拟机自动回收内存的特点,大量中间对象的产生有可能在长时间运行的Server应用中降低系统的性能,但是这种数据传递的方法在许多系统设计中都是可行的。

ps:貌似jaxb以前版本要用还会生成很多的其他文件,很多个,用起来也有点不方便的,不知道最新的jaxb规范是如何的,
xml解析不仅可以用dom,jaxb,apache common的digester也不错的:)

 
 
分享到:
评论
1 楼 xiaxiaojuan 2008-08-15  
您好,

我想问一下sun.security.krb5.internal.crypto.c这个是哪个包里的类啊,我的qq号是744399894。如果您有时间给我发个消息,谢谢

我找不到相关资料~!

相关推荐

    jaxb 使用实例

    ### JAXB使用步骤 1. **创建Java模型类**:定义要序列化的Java类,使用注解如`@XmlRootElement`,`@XmlElement`等来标注字段。 2. **设置JAXB上下文**:使用`JAXBContext`来获取Java类型和XML之间的映射信息。这...

    JAXB使用及代码示例

    1. **编译时绑定**:在开发阶段,JAXB使用`xjc`工具将XML Schema(XSD)文件转换为一组Java类,这些类包含了对XML结构的表示。这个过程也被称为“逆向工程”。 2. **运行时转换**:在程序运行时,JAXB提供了一组API...

    如何更好地jaxb使用

    如何更好地jaxb使用如何更好地jaxb使用如何更好地jaxb使用如何更好地jaxb使用

    JAXB使用Socket流进行双向通信源码

    在本示例中,"JAXB使用Socket流进行双向通信源码"结合了这两个概念,创建了一个基于Java的客户端(Client_Socket)应用,实现了XML数据在客户端和服务端之间的双向传输。 首先,我们要理解JAXB的工作原理。JAXB允许...

    JAXB实例入门

    ### JAXB使用场景 - 数据交换:在分布式系统中,服务间通信常通过XML格式的数据交换,JAXB提供了便捷的序列化和反序列化手段。 - 配置文件解析:XML常被用作应用程序的配置文件,JAXB能帮助解析和操作这些配置。 - ...

    JAXB使用经验总结

    1. 什么是JAXB?  Java Architecture for XML Binding (JAXB) 是一个业界的标准,是一项可以根据XML

    jaxb (XML操作)

    2. **实例化(Unmarshalling)**:当需要将XML数据转换为Java对象时,JAXB使用Unmarshaller接口解析XML文档,生成对应的Java对象。这个过程是将XML数据"反序列化"为可操作的Java对象。 3. **序列化(Marshalling)*...

    JAXB-2.2.6-release-documentation

    - **软件许可**:明确了 JAXB 使用时的许可条款,通常遵循开放源代码许可证。 - **示例应用**:包含多个示例应用程序,演示如何使用 JAXB 进行 XML 数据绑定。 - **运行时绑定框架**:这部分详细介绍了如何在运行时...

    jaxb解析生成xml

    ### JAXB使用示例 以下是一个简单的JAXB解析生成XML的例子: ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; public class JaxbExample { ...

    JAXB的HelloWorld源码

    然后,JAXB使用这些类生成XML Schema(XSD),或者反过来,基于XML Schema生成Java类。这个过程叫做编译或绑定。这种方式使得Java应用程序能够轻松地与XML数据交互,而无需手动解析XML。 **HelloWorld示例** 是学习...

    jaxb.zip_jaxb

    JAXB使用Java注解来指定Java类和XML元素之间的映射关系。例如,我们可以使用`@XmlRootElement`、`@XmlElement`、`@XmlAttribute`等注解来定义Java类的结构。 ```java import javax.xml.bind.annotation....

    jaxb与jpa初应用

    JAXB使用注解或绑定文件来定义对象和XML之间的映射。例如,当我们有一个`Plan`类,我们可以通过JAXB将其序列化为`plan.xml`文件,反之亦然。 ```java @XmlRootElement(name = "plan") public class Plan { private...

    一个基于java jaxb的序列化例子,非常简单易懂

    在给定的例子"JAXBDemo"中,我们可以预期它包含了一个简单的JAXB使用示例,帮助我们理解这一过程。 首先,让我们了解一下JAXB的工作原理。JAXB的核心思想是通过元数据(如注解或XML Schema)将Java类与XML结构关联...

    JAXB XMLSPY

    **JAXB(Java Architecture for XML ...总结来说,JAXB是一种强大的Java XML处理技术,而XMLSPY作为一个全面的XML工具,是开发和调试XML相关项目的好帮手,尤其在配合JAXB使用时,可以大大提高开发效率和代码质量。

    JAXB资料集.rar

    "jaxb使用文档.doc"应该是详细介绍了JAXB的使用方法,包括基本操作、高级特性以及可能遇到的问题和解决方案。文档可能还涵盖了错误处理、性能优化、XML Schema的处理等内容。 总的来说,这份"JAXB资料集.rar"是一份...

    JAXB自定义命名前缀无效的问题

    JAXB使用`@XmlRootElement`和`@XmlElement`等注解来识别哪些类和字段应该映射到XML元素。默认情况下,JAXB会自动为这些元素和属性分配命名空间前缀。为了自定义这些前缀,我们需要使用`@XmlSchema`、`@...

    XML JAXB入门示例

    JAXB使用注解(Annotations)来定义这些类如何映射到XML结构。常见的注解包括: 1. `@XmlRootElement`:标记一个类作为XML文档的根元素。 2. `@XmlElement`:将类的字段映射为XML元素。 3. `@XmlAttribute`:将类的...

    JAXB-XML注解-应用

    JAXB 使用 javax.xml.bind.annotation 包下的 Java 标注,例如: * @XmlRootElement:标注 Java 类为 XML 根元素 * @XmlElement:标注 Java 属性为 XML 元素 * @XmlAttribute:标注 Java 属性为 XML 属性 六、JAXB...

    jaxb开发使用文档

    jaxb开发使用文档 JAXB(Java Architecture for XML Binding)是一种java标准库,用于处理XML与java对象的映射。jaxb技术在javaSE6.0中已经包含了jaxb定义的所有API,在处理XML文档时,使用jaxb要比使用JAXP(DOM、...

Global site tag (gtag.js) - Google Analytics