`

java xml字符串变javabean javabean变xml字符串

 
阅读更多

此方法是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 bean)转换为xml字符串

    在Java开发中,有时我们需要将Java Bean对象转换成XML字符串,以便于数据交换或存储。XStream库就是这样一个工具,它提供了一种简单且高效的方式来实现这个目标。XStream不仅能够将Java对象转换为XML,还可以反向将...

    xml转javaBean,javaBean转xml,xml标签大小写问题,以及对xml特殊符号的处理

    通过调用Marshaller的marshal()方法,我们可以将JavaBean对象转换为XML字符串或者写入XML文件。 3. XML标签大小写问题: XML是大小写敏感的,这意味着“element”和“Element”被视为不同的元素。在定义XML Schema...

    xml和bean 互相转换

    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字符串的互转

    这篇博客将探讨如何使用XStream库实现JavaBean到XML字符串以及XML字符串回转到JavaBean的过程。 首先,让我们了解XStream的基本概念。XStream由Johannes Brodskiy创建,它是一个基于Java的库,提供了简单且高性能的...

    javabean和xml互相转换工具类以及jar包

    这个类可能包含静态方法,如`beanToXml(JavaBean bean)`用于将JavaBean转换为XML字符串,以及`xmlToBean(String xml)`用于将XML字符串反向转换回JavaBean。使用这样的工具类可以使代码更加简洁,提高代码复用性。 ...

    利用JAXB进行xml和javabean之间转换

    同样,通过`JAXBContext`创建一个unmarshaller对象,调用其`unmarshal()`方法,可以将XML字符串或文件转换回Java对象。 **2. 示例代码** ```java import javax.xml.bind.annotation.XmlElement; import javax.xml...

    xml和java bean互相转换工具包(简单易用)

    xml 与 bean 互相转换 工具类 1、bean类的属性需要遵守BEAN规范,否则 无法 读存BEAN值。 2、bean类的属性如果 是集合 只支持数组以及List、Map、Set。 3、bean类属性(boolean除外)前面两个字母要么全部小写,要么...

    xml与javabean的转换

    `fromXml()`方法用于从XML字符串或输入流创建JavaBean实例,而`toXml()`方法则将JavaBean对象转换为XML字符串。这两个方法使得在处理数据时能够灵活地在Java对象和XML文档之间切换。 首先,让我们深入理解`fromXml...

    xml与javabean之间的相互转换,很方便,导入即可使用

    `toXML()` 方法将JavaBean对象转换成XML字符串,而 `fromXML()` 方法则相反,将XML字符串转换回JavaBean对象。 XStream库还支持处理复杂的Java对象结构,如集合、嵌套对象等,无需额外的配置。同时,它还提供了对...

    java持久化工具类:JavaBean与XML

    1. `toXML(JavaBean bean)`: 将JavaBean对象转换为XML字符串。 2. `fromXML(String xml)`: 从XML字符串创建JavaBean对象。 3. `readXMLFile(String filePath)`: 从XML文件读取数据并返回JavaBean列表。 4. `...

    javabean到XML的转换

    5. **转换JavaBean到XML**:现在你可以使用Castor的`Marshaller`类将JavaBean对象转换为XML字符串或文件。以下是一个示例代码: ```java import org.exolab.castor.xml.Marshaller; import org.exolab.castor.xml....

    xml与json、javabean的互相转换

    以Gson库为例,可以将JavaBean对象转换为JSON字符串,再由JSON字符串反序列化为JavaBean。 ```java import com.google.gson.Gson; public class BeanToJsonAndBack { public static class Person { private ...

    json_lib使用实例:java对象与json字符串的互转

    这个库提供了丰富的API,使得我们可以轻松地将Java对象转化为JSON字符串,以及将JSON字符串反序列化为Java对象。 ### JSON对象与Java对象的转换 1. **JSON字符串转Java对象** 使用`json-lib`,我们可以将JSON...

    Xml与javaBean互转.zip

    反之,也可以从JavaBean创建一个`Document`,然后将其转换为XML字符串。 3. **SAX(Simple API for XML)**:SAX是一种基于事件驱动的XML解析器,适合处理大型XML文档。与DOM不同,SAX不需要将整个XML文档加载到...

    使用JAXB完成JAVAbean与xml互转

    首先创建`JAXBContext`实例,然后使用`Marshaller`来序列化对象到XML字符串或文件: ```java JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); Marshaller marshaller = jaxbContext....

    javaBean生成xml

    4. 将JavaBean转换为XML:通过调用XStream的`toXML()`方法,将JavaBean对象转换为XML字符串。 ```java Person person = new Person(); person.setName("John"); person.setAge(30); String xml = xstream.toXML...

    用JOX实现xml和javabean的相互转换

    然后,可以使用`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转换

    它会将JavaBean对象转换成XML文档或者XML字符串。 2. **XML to JavaBeans**: 这个过程称为XML到对象的反序列化,通过Unmarshaller接口的unmarshal方法实现。它可以将XML文档或字符串转换成JavaBean对象。 **使用...

    xsd生成javaBean

    将XSD转换为JavaBean后,开发者可以更轻松地在Java程序中读取、写入和操作XML数据,而不必直接处理XML字符串或DOM节点。 Castor是一个流行的Java库,专门用于对象关系映射(ORM)和XML绑定。在本案例中,Castor提供...

    java List XMl转换DEMO

    有时,我们需要将List对象转换为XML字符串,或者将XML数据解析为List对象。这个“java List XMl转换DEMO”就是用来演示这两个过程的实例。 首先,我们来讨论如何实现`List2XML`。在Java中,我们可以使用DOM...

Global site tag (gtag.js) - Google Analytics