当时因为要求方便后续开发 要求使用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的包,还有待测试。
相关推荐
总结起来,Apache Commons Digester通过定义规则实现了XML到Java Bean的自动映射,大大提高了开发效率。在实际项目中,可以根据XML文档的复杂性定义更复杂的规则,处理嵌套、循环等结构。此外,由于Digester的灵活性...
在"struts资料\前半阶段小结"这个主题中,我们可以理解为是对学习或使用Struts框架初期阶段的一个总结。以下是对Struts框架核心知识点的详细解释: 1. **MVC模式**:MVC是一种设计模式,用于分离应用程序的数据、...
EJB实体Bean的生命周期由容器管理,包括实例化、初始化、激活、钝化、终止等阶段。例如,`@PostConstruct`和`@PreDestroy`注解用于标记生命周期回调方法。 ### 五、 ejb实体Bean的应用场景 EJB实体Bean常用于企业...
在Spring中,Bean的生命周期包括实例化、初始化、正常服务和销毁等阶段。通常,Spring容器会在应用启动时扫描配置文件,创建并初始化所有定义的Bean。然而,通过动态加载,我们可以避免不必要的初始化,直到真正需要...
Spring容器管理bean的生命周期,包括初始化、正常使用和销毁三个阶段。可以通过实现`InitializingBean`接口或定义`init-method`属性来进行初始化操作,通过实现`DisposableBean`接口或定义`destroy-method`属性来...
Bean的生命周期包括初始化、使用和销毁三个阶段,Spring提供了多种回调方法来控制这些阶段,如init-method和destroy-method。 接下来,我们来看看“Cookie”。Cookie是Web服务器发送到用户浏览器并存储的一小块数据...
总结,Spring装配Bean的XML配置方式是Spring框架的基础,通过定义Bean、设置属性、处理生命周期和依赖关系,我们可以构建出复杂的应用程序结构。在实际开发中,结合注解配置和XML配置的混合使用,可以更加灵活地管理...
Bean接口定义了客户端调用的方法,Bean类实现了这些方法,部署描述符(XML文件)包含了Bean的配置信息,如Bean的类型、访问策略等。 **EJB的生命周期** 无论是有状态还是无状态会话Bean,它们都有自己的生命周期,...
本文将总结几种在代码中获取Spring Bean的方法,以供学习和工作中参考。 **1. 通过`ContextLoader.getCurrentWebApplicationContext()`获取** 这种方式适用于Web应用程序,不依赖于Servlet。在服务器启动后,...
- 部署描述符(ejb-jar.xml)是配置EJB的重要文件,其中包含了bean的元数据,如bean的类型、接口、安全性设置、事务策略等。 7. **EJBClient** - EJBClient是客户端用来访问和交互Session Bean的模块,通过JNDI...
不过,通过在Tomcat的`server.xml`配置文件中设置`reloadable="true"`,可以实现自动加载新编译的类,但这样会降低服务器性能,因此只推荐在开发阶段使用。 接下来,我们看看如何在JSP中使用Java Bean: **方法一...
静态工厂和实例工厂是两种常见的实现方式,它们允许开发者通过预定义的工厂方法来生成Bean,而`BeanPostProcessor`则提供了一种通用的后处理方式,可以在Bean生命周期的不同阶段进行干预。理解并熟练运用这些机制,...
总结来说,Spring的BeanDefinition装载过程涉及了从XML配置文件解析、BeanDefinition创建、BeanFactory初始化到Bean实例化的多个步骤。在学习源码时,应重点关注BeanDefinition的创建、加载和实例化过程,理解Spring...
总结来说,"jsp+servlet+bean 网上书店"项目展示了如何使用Java技术栈构建一个基本的Web应用。JSP处理用户界面,Servlet处理请求和响应,JavaBeans封装数据,而Access数据库则存储了所有相关数据。对于想要学习Java ...
总结来说,"Servlet+jsp+bean+dao"的组合是Java Web开发的基石,它们协同工作,提供了高效、灵活的解决方案,以构建复杂的企业级Web应用。理解并熟练掌握这些技术对于任何Java Web开发者来说都是至关重要的。
1. 配置阶段:主要是完成 application.xml 配置和 Annotation 配置。 2. 初始化阶段:主要是加载并解析配置信息,然后,初始化 IOC 容器,完成容器的 DI 操作,已经完成 HandlerMapping 的初始化。 3. 运行阶段:...
在Spring框架中,Bean的生命周期包括初始化、正常使用和销毁三个阶段。当应用关闭或容器停止时,Spring会触发Bean的销毁过程,这是清理资源、关闭连接等操作的关键时刻。本篇将详细介绍如何在Bean销毁之前进行行为...
总结,"Message-Driven Bean EJB实例源代码"涵盖了MDB的基本概念、实现方式以及在Java企业级应用中的使用。通过理解这些源代码,开发者可以学习如何利用MDB和JMS构建高效、可扩展的分布式系统。
Spring Bean是Spring框架...总结,Spring Bean是Spring框架的核心组件,它的生命周期、装配、作用域、依赖注入等特性构建了强大的企业级应用开发能力。理解并熟练掌握Spring Bean的使用,对于Java开发者来说至关重要。