此方法是JDK1.6以后的。
下面假如我们的javabean是下面这个类Withdrawingvo。
//根节点命名
@XmlRootElement(name="demo")
//@XmlAccessorType(XmlAccessType.FIELD) 写这个的话下面@XmlElement就不用写了
public class Withdrawingvo {
@XmlElement
public Head head;
@XmlElement
public String firmid;
@XmlElement
public String accountid;
@XmlElement
public String balance;
}
其中Head是个类:
//此类书与公用类,也就是很多的javabean都会用到它的属性,为了不必要的重写所以单拿出来。所以此类不是跟元素
public class Head {
@XmlElement
public String tranFunc;//交易类型
@XmlElement
public String servType;//服务类型
@XmlElement
public String tranDate;//交易日期
@XmlElement
public String tranTime;//交易时间
@XmlElement
public String rqstSeq;//请求方系统流水号
@XmlElement
public String qydm;//机构代码
}
会用到的其他类:
Head的信息。然后根据head的信息来找到类。
@XmlRootElement(name = "demo")
public class UncertainMsg {
@XmlElement
public Head head;
}
public class TranFunc {
//会员开销户确认
public static final String RGST = "1002";
//入金
public static final String INMONEY = "1003";
//出金
public static final String OUTMONEY = "1004";
//通讯检测
public static final String CA="1001";
}
public class ServType {
//请求
public static final String RQST = "01";
//响应
public static final String RSP = "02";
}
public class ChoiceObject {
/**
* key:业务代码 value:业务类
*/
private static Hashtable<String,Class> map=new Hashtable<String,Class>();
static{
//开户请求
map.put(TranFunc.RGST+ServType.RQST, OpenAccountVo.class);
//开户响应
map.put(TranFunc.RGST+ServType.RSP, SocketResponse.class);
//入金请求
map.put(TranFunc.INMONEY+ServType.RQST, DepositVo.class);
//入金响应
map.put(TranFunc.INMONEY+ServType.RSP,SocketResponse.class);
//出金请求 拿了此类举例。其他类结构和Withdrawingvo一样。但是没有往上写
map.put(TranFunc.OUTMONEY+ServType.RQST,Withdrawingvo.class);
//出金响应
map.put(TranFunc.OUTMONEY+ServType.RSP,SocketResponse.class);
//通讯检测请求
map.put(TranFunc.CA+ServType.RQST, CAVO.class);
//通讯检测响应
map.put(TranFunc.CA+ServType.RSP,CAVO.class);
}
public static Class Choice(String tranFunc,String servType){
return map.get(tranFunc+servType);
}
}
下面是2中方法
//xml字符串转为类
public Object getMsgObj(String receivemsg) {
System.out.println("receivemsg==="+receivemsg);
UncertainMsg uncertainMsg = null;
JAXBContext context = null;
try {
context = JAXBContext.newInstance(UncertainMsg.class);
} catch (JAXBException e) {
throw new RuntimeException("报文头格式错误");
}
InputStream is=new ByteArrayInputStream(receivemsg.getBytes());
Unmarshaller us;
try {
us=context.createUnmarshaller();
//从指定的 InputStream 解组 XML 数据并返回得到的内容树。
uncertainMsg=(UncertainMsg) us.unmarshal(is);
} catch (JAXBException e) {
System.out.println("创建Unmarshaller实例异常...");
e.printStackTrace();
}
Object msgObj = null;
try {
context=JAXBContext.newInstance(ChoiceObject.Choice(uncertainMsg.head.tranFunc,uncertainMsg.head.servType));
} catch (JAXBException e) {
System.out.println("根据报头服务类型与交易类型获取操作类失败....");
e.printStackTrace();
}
is=new ByteArrayInputStream(receivemsg.getBytes());
try {
us=context.createUnmarshaller();
msgObj=us.unmarshal(is);
} catch (JAXBException e) {
e.printStackTrace();
}
return msgObj;
}
//类对象转为xml
public String getMsgStr(Object msg) {
JAXBContext context = null;
Marshaller ms = null;
try {
context = JAXBContext.newInstance(msg.getClass());
ms = context.createMarshaller();
} catch (JAXBException e) {
e.printStackTrace();
}
try {
ms.setProperty(Marshaller.JAXB_ENCODING, ENCODING);
} catch (PropertyException e) {
e.printStackTrace();
}
Writer writer = new StringWriter();
try {
ms.marshal(msg, writer);
} catch (JAXBException e) {
e.printStackTrace();
}
String msgStr = writer.toString();
return msgStr;
}
当我们调用的时候以及使用的时候:
javabean--->xml
Withdrawingvo vo=new Withdrawingvo();
vo.accountid="123";
vo.balance="1000";
vo.firmid="0001";
Head head=new Head();
head.qydm="市场1";
head.rqstSeq="abasdfsaf";
head.servType="01";
head.tranFunc="1004";
vo.head=head;
String msg=cxml.getMsgStr(vo);
xml--->javabean
Object o=convert.getMsgObj(receive);
//判断类对象是不是我要找的类。然后强转。使用的时候只要用类对象.出来就行
if(o.getClass().isInstance(new Withdrawingvo())){
Withdrawingvo withdraw=(Withdrawingvo) o;
System.out.println("Withdrawingvo.class.firmid"+withdraw.firmid);
System.out.println("Withdrawingvo.class.accountid"+withdraw.accountid);
System.out.println("Withdrawingvo.class.balance"+withdraw.balance);
}else if(o.getClass().isInstance(new OpenAccountVo())){
........................
分享到:
相关推荐
在Java开发中,有时我们需要将Java Bean对象转换成XML字符串,以便于数据交换或存储。XStream库就是这样一个工具,它提供了一种简单且高效的方式来实现这个目标。XStream不仅能够将Java对象转换为XML,还可以反向将...
通过调用Marshaller的marshal()方法,我们可以将JavaBean对象转换为XML字符串或者写入XML文件。 3. XML标签大小写问题: XML是大小写敏感的,这意味着“element”和“Element”被视为不同的元素。在定义XML Schema...
2. **转换为XML**:使用JAXB的Marshaller将Bean转换为XML字符串或写入文件。 ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import java.io.File; public class WebController { ...
这篇博客将探讨如何使用XStream库实现JavaBean到XML字符串以及XML字符串回转到JavaBean的过程。 首先,让我们了解XStream的基本概念。XStream由Johannes Brodskiy创建,它是一个基于Java的库,提供了简单且高性能的...
这个类可能包含静态方法,如`beanToXml(JavaBean bean)`用于将JavaBean转换为XML字符串,以及`xmlToBean(String xml)`用于将XML字符串反向转换回JavaBean。使用这样的工具类可以使代码更加简洁,提高代码复用性。 ...
同样,通过`JAXBContext`创建一个unmarshaller对象,调用其`unmarshal()`方法,可以将XML字符串或文件转换回Java对象。 **2. 示例代码** ```java import javax.xml.bind.annotation.XmlElement; import javax.xml...
xml 与 bean 互相转换 工具类 1、bean类的属性需要遵守BEAN规范,否则 无法 读存BEAN值。 2、bean类的属性如果 是集合 只支持数组以及List、Map、Set。 3、bean类属性(boolean除外)前面两个字母要么全部小写,要么...
`fromXml()`方法用于从XML字符串或输入流创建JavaBean实例,而`toXml()`方法则将JavaBean对象转换为XML字符串。这两个方法使得在处理数据时能够灵活地在Java对象和XML文档之间切换。 首先,让我们深入理解`fromXml...
`toXML()` 方法将JavaBean对象转换成XML字符串,而 `fromXML()` 方法则相反,将XML字符串转换回JavaBean对象。 XStream库还支持处理复杂的Java对象结构,如集合、嵌套对象等,无需额外的配置。同时,它还提供了对...
1. `toXML(JavaBean bean)`: 将JavaBean对象转换为XML字符串。 2. `fromXML(String xml)`: 从XML字符串创建JavaBean对象。 3. `readXMLFile(String filePath)`: 从XML文件读取数据并返回JavaBean列表。 4. `...
5. **转换JavaBean到XML**:现在你可以使用Castor的`Marshaller`类将JavaBean对象转换为XML字符串或文件。以下是一个示例代码: ```java import org.exolab.castor.xml.Marshaller; import org.exolab.castor.xml....
以Gson库为例,可以将JavaBean对象转换为JSON字符串,再由JSON字符串反序列化为JavaBean。 ```java import com.google.gson.Gson; public class BeanToJsonAndBack { public static class Person { private ...
这个库提供了丰富的API,使得我们可以轻松地将Java对象转化为JSON字符串,以及将JSON字符串反序列化为Java对象。 ### JSON对象与Java对象的转换 1. **JSON字符串转Java对象** 使用`json-lib`,我们可以将JSON...
反之,也可以从JavaBean创建一个`Document`,然后将其转换为XML字符串。 3. **SAX(Simple API for XML)**:SAX是一种基于事件驱动的XML解析器,适合处理大型XML文档。与DOM不同,SAX不需要将整个XML文档加载到...
首先创建`JAXBContext`实例,然后使用`Marshaller`来序列化对象到XML字符串或文件: ```java JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); Marshaller marshaller = jaxbContext....
4. 将JavaBean转换为XML:通过调用XStream的`toXML()`方法,将JavaBean对象转换为XML字符串。 ```java Person person = new Person(); person.setName("John"); person.setAge(30); String xml = xstream.toXML...
然后,可以使用`write()`方法将Java Bean对象写入XML字符串或文件。例如: ```java import net.sf.jox.JoxMapper; import net.sf.jox.io.JoxWriter; JoxMapper mapper = new JoxMapper(); JoxWriter writer = new ...
它会将JavaBean对象转换成XML文档或者XML字符串。 2. **XML to JavaBeans**: 这个过程称为XML到对象的反序列化,通过Unmarshaller接口的unmarshal方法实现。它可以将XML文档或字符串转换成JavaBean对象。 **使用...
将XSD转换为JavaBean后,开发者可以更轻松地在Java程序中读取、写入和操作XML数据,而不必直接处理XML字符串或DOM节点。 Castor是一个流行的Java库,专门用于对象关系映射(ORM)和XML绑定。在本案例中,Castor提供...
有时,我们需要将List对象转换为XML字符串,或者将XML数据解析为List对象。这个“java List XMl转换DEMO”就是用来演示这两个过程的实例。 首先,我们来讨论如何实现`List2XML`。在Java中,我们可以使用DOM...