`
younglibin
  • 浏览: 1213841 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Xmlbean阶段总结

阅读更多

Xmlbean阶段总结

 

当时因为要求方便后续开发 要求使用xmlbean方式来生成xml,至于为什么要这种方式,怎么个方便,理由很多,大脑装不下,只得左耳进左耳出(其实压根就没进),只好硬着头皮网上找资料学,后又要求总结成文档发给大家。估计没人看,竟然查点当垃圾一样丢掉(被偶尔从垃圾堆路过的我给翻出来),不行,我得粘到网上,不管好不好,当时费劲巴拉的。

 

 

 

Java对xml操作很多 ,dom4j,SAX方式就不说了,介绍xmlbean方式

 

神奇的 CTRL V.............................//

xmlbeans的主要特点:

1、对schema生成强Java类型

2、生成的类型可以读取相应schema的文档,或者DOM

3、加载数据后可以根据schema验证.

4、可以对XmlObject取得对应的SchemaType知道其Schema定义.这是dom3的特性

内建xpath查询

5、强大的输出到xml.(最简单的方法是toString())

 

研究不是很深,只是在项目中用到第1、5条:

 

首先从APACHE上下载最新的xmlbeans的包(目前最新版为xmlbeans-2.5.0)。

 

做一个简单的例子,公司和员工的模型,公司company的属性有名称name、地址address和员工列表emplist,其中雇员列表中的employe又包含姓名name、性别sex和年龄age。现在需要使用xmlbean生成一个类似下边xml格式的一个文件。

 

<?xml version='1.0' encoding='UTF-8' ?>

<company>

<cname>XX科技股份有限公司</cname>

<address>海淀XX路XXXX软件园</address>

<emplist>

<employee>

<name>李四</ename>

<sex>男</sex>

<age>28</age>

<employee>

<employee>

<name>张三</ename>

<sex>男</sex>

<age>32</age>

<employee>

……

</emplist>

<company>

 

Xmlbean生成文件的过程是先构造一个此结构的java对象,再讲此java对象输出成xml格式文档。

 

1、 构造java对象

构造此对象需要先写一个schema定义文件(类似wsdl),后缀名为.xsd。例如以下的test.xsd

 

<?xmlversion="1.0"encoding="UTF-8"?>

<schematargetNamespace="http://www.example.org"xmlns:tns="http://www.example.org"xmlns="http://www.w3.org/2001/XMLSchema">

<complexTypename="company">

<sequence>

<elementname="name"type="string"minOccurs="0"maxOccurs="1"/>

<elementname="address"type="string"minOccurs="0"maxOccurs="1"/>

<elementname="emplist"type="tns:emplist"minOccurs="0"maxOccurs="1"/>

</sequence>

</complexType>

<complexTypename="emplist">

<sequence>

<elementname="name"type="string"minOccurs="0"maxOccurs="1"/>

<elementname="sex"type=" string "minOccurs="0"maxOccurs="1"/>

<elementname="age"type="short"minOccurs="0"maxOccurs="1"/>

</sequence>

</complexType>

</schema>

 

使用test.xsd生成相应的JAR包。xmlbeans-2.5.0提供了相应的命令,编写批处理文件xml.bat

 

set JAVA_HOME=C:\jdk150_06

set XMLBEANS_HOME=C:\xmlbeans-2.5.0

set PATH=%JAVA_HOME%\bin;%XMLBEANS_HOME%\bin

echo "正在生成相应JAR..."

scomp.cmd %XMLBEANS_HOME%\test.xsd -out %XMLBEANS_HOME%\XmlBeans.jar

 

注意:绿色部分根据自己环境设置

2、 由Javabean生成文档

将jar加入工程,编写测试类XmlTest.java:

//创建公司

CompanyDocument companydoc = CompanyDocument.Factory.newInstance();

Company company = companydoc.addNewCompany();

company.setName("瑞友科技股份有限公司");

company.setAddress("海淀区北清路永丰用友软件园");

//添加第一个员工

Emplist emplist1 = company.addNewEmplist();

emplist1.setName("李四");

emplist1.setSex("男");

emplist1.setAge((short)28);

//添加第二个员工

Emplist emplist2 = company.addNewEmplist();

emplist2.setName("张三");

emplist2.setSex("男");

emplist2.setAge((short)32);

 

String xmlStr = companydoc.toString();

以下是测试类输出内容:

 

<company xmlns="http://www.example.org">

<name xmlns="">XX股份有限公司</name>

<address xmlns="">海淀区XX路XXXX软件园</address>

<emplist xmlns="">

<name>李四</name>

<sex></sex>

<age>28</age>

</emplist>

<emplist xmlns="">

<name>张三</name>

<sex></sex>

<age>32</age>

</emplist>

</company>

根据输出即可根据要求生成文件。

 

 

xmlBean使用中遇见的问题:

在网上也有一些使用xmlbean的问题,感觉比较有参考性的摘录下来

 

1.默认根据xsd生成的java类,namespace定义的名字,(本例用的targetNamespace="http://www.example.org"),如果没有定义xsd的namespace就默认为noNamespace。用这些java类生成出来的xml文件也自动带有namespace。其实这是很烦的事情,因为我们通常希望生成出来的xml文件没有namespace。

 

解决办法:没有给。

说明:目前我采取办法是将生成字符串再截取一遍,将没用的namespace去掉。我用的是笨方法,应该还有其他方试。

 

2. xsdConfig可以定义出一个namespace和package的对应关系,可如果我有两个无namespace的文件,我打算生成到两个package中,怎么办?

答案:没好办法,把两套xsd/xsdConfig文件放置在两个目录,然后在ant脚本中做两个target,再写一个target调用这两个target好了。如果时再bea的workshop中,需要建立两个schema project。

说明:此配置应该是再解析时遇到的,此次EBP的FTP服务没有用到,所以我还没有试过。

 

3.但apache的xmlbean和bea公司的xmlbean有冲突,因为他们都用到了javax.xml.namespace.QName,不幸,他们用的是同名但又不相同的类,而且差异较大。所以如果在一个app中,如果即用了apache的又用了bea的,哪就只有一个能用,就看哪一个QName先被实例化了。

解决办法就是:如果项目中用了weblogic,哪就用bean的xmlbean,反正一样可以用。两者的ant脚本基本一样,就是taskdef不一样而已。

 

apache的taskdef:

<taskdef name="xmlbean"

classname="org.apache.xmlbeans.impl.tool.XMLBean"

classpathref="lib.xmlbean.apace"/>

 

bean的taskdef

<taskdef name="xmlbean"

classname="com.bea.xbean.tool.XMLBean"

classpathref="lib.xmlbean.bea"/>

说明:虽说xmlbean是bea送给apache的,但是反编译了一下大致看了看,确实像上边所说。由于ebp180服务器是weblogic,所以应用中最好使用weblogic自带的。将其替换掉本例中apache的包,还有待测试。

分享到:
评论

相关推荐

    利用digester来将xml转换为bean

    总结起来,Apache Commons Digester通过定义规则实现了XML到Java Bean的自动映射,大大提高了开发效率。在实际项目中,可以根据XML文档的复杂性定义更复杂的规则,处理嵌套、循环等结构。此外,由于Digester的灵活性...

    struts资料\前半阶段小结

    在"struts资料\前半阶段小结"这个主题中,我们可以理解为是对学习或使用Struts框架初期阶段的一个总结。以下是对Struts框架核心知识点的详细解释: 1. **MVC模式**:MVC是一种设计模式,用于分离应用程序的数据、...

    ejb实体bean实例

    EJB实体Bean的生命周期由容器管理,包括实例化、初始化、激活、钝化、终止等阶段。例如,`@PostConstruct`和`@PreDestroy`注解用于标记生命周期回调方法。 ### 五、 ejb实体Bean的应用场景 EJB实体Bean常用于企业...

    Spring動態加載Bean

    在Spring中,Bean的生命周期包括实例化、初始化、正常服务和销毁等阶段。通常,Spring容器会在应用启动时扫描配置文件,创建并初始化所有定义的Bean。然而,通过动态加载,我们可以避免不必要的初始化,直到真正需要...

    SpingIOC注入实例化bean

    Spring容器管理bean的生命周期,包括初始化、正常使用和销毁三个阶段。可以通过实现`InitializingBean`接口或定义`init-method`属性来进行初始化操作,通过实现`DisposableBean`接口或定义`destroy-method`属性来...

    00000029_bean-cookie的用法.rar

    Bean的生命周期包括初始化、使用和销毁三个阶段,Spring提供了多种回调方法来控制这些阶段,如init-method和destroy-method。 接下来,我们来看看“Cookie”。Cookie是Web服务器发送到用户浏览器并存储的一小块数据...

    spring装配bean实例代码

    总结,Spring装配Bean的XML配置方式是Spring框架的基础,通过定义Bean、设置属性、处理生命周期和依赖关系,我们可以构建出复杂的应用程序结构。在实际开发中,结合注解配置和XML配置的混合使用,可以更加灵活地管理...

    EJB 会话BEAN PPT

    Bean接口定义了客户端调用的方法,Bean类实现了这些方法,部署描述符(XML文件)包含了Bean的配置信息,如Bean的类型、访问策略等。 **EJB的生命周期** 无论是有状态还是无状态会话Bean,它们都有自己的生命周期,...

    Spring在代码中获取bean的方法小结

    本文将总结几种在代码中获取Spring Bean的方法,以供学习和工作中参考。 **1. 通过`ContextLoader.getCurrentWebApplicationContext()`获取** 这种方式适用于Web应用程序,不依赖于Servlet。在服务器启动后,...

    EJB2 SessionBean

    - 部署描述符(ejb-jar.xml)是配置EJB的重要文件,其中包含了bean的元数据,如bean的类型、接口、安全性设置、事务策略等。 7. **EJBClient** - EJBClient是客户端用来访问和交互Session Bean的模块,通过JNDI...

    JAVA bean 技术.JSP

    不过,通过在Tomcat的`server.xml`配置文件中设置`reloadable="true"`,可以实现自动加载新编译的类,但这样会降低服务器性能,因此只推荐在开发阶段使用。 接下来,我们看看如何在JSP中使用Java Bean: **方法一...

    Spring框架通过工厂创建Bean的三种方式实现

    静态工厂和实例工厂是两种常见的实现方式,它们允许开发者通过预定义的工厂方法来生成Bean,而`BeanPostProcessor`则提供了一种通用的后处理方式,可以在Bean生命周期的不同阶段进行干预。理解并熟练运用这些机制,...

    Spring源码学习四:BeanDefinition装载前奏曲1

    总结来说,Spring的BeanDefinition装载过程涉及了从XML配置文件解析、BeanDefinition创建、BeanFactory初始化到Bean实例化的多个步骤。在学习源码时,应重点关注BeanDefinition的创建、加载和实例化过程,理解Spring...

    jsp+servlet+bean 网上书店

    总结来说,"jsp+servlet+bean 网上书店"项目展示了如何使用Java技术栈构建一个基本的Web应用。JSP处理用户界面,Servlet处理请求和响应,JavaBeans封装数据,而Access数据库则存储了所有相关数据。对于想要学习Java ...

    servlet+jsp+bean+dao

    总结来说,"Servlet+jsp+bean+dao"的组合是Java Web开发的基石,它们协同工作,提供了高效、灵活的解决方案,以构建复杂的企业级Web应用。理解并熟练掌握这些技术对于任何Java Web开发者来说都是至关重要的。

    如何高效学习spring源码 预习资料.pdf

    1. 配置阶段:主要是完成 application.xml 配置和 Annotation 配置。 2. 初始化阶段:主要是加载并解析配置信息,然后,初始化 IOC 容器,完成容器的 DI 操作,已经完成 HandlerMapping 的初始化。 3. 运行阶段:...

    Spring实战之Bean销毁之前的行为操作示例

    在Spring框架中,Bean的生命周期包括初始化、正常使用和销毁三个阶段。当应用关闭或容器停止时,Spring会触发Bean的销毁过程,这是清理资源、关闭连接等操作的关键时刻。本篇将详细介绍如何在Bean销毁之前进行行为...

    Message-Driven Bean EJB实例源代码

    总结,"Message-Driven Bean EJB实例源代码"涵盖了MDB的基本概念、实现方式以及在Java企业级应用中的使用。通过理解这些源代码,开发者可以学习如何利用MDB和JMS构建高效、可扩展的分布式系统。

    Spring Bean

    Spring Bean是Spring框架...总结,Spring Bean是Spring框架的核心组件,它的生命周期、装配、作用域、依赖注入等特性构建了强大的企业级应用开发能力。理解并熟练掌握Spring Bean的使用,对于Java开发者来说至关重要。

Global site tag (gtag.js) - Google Analytics