XStream

	/** 
     * 将Bean转换为XML 
     * 
     * @param clazzMap 别名-类名映射Map 
     * @param bean     要转换为xml的bean对象 
     * @return XML字符串 
     */ 
public static String bean2xml(Map<String, Class> clazzMap, Object bean) { 
	XStream xstream = new XStream(); 
	for (Iterator it = clazzMap.entrySet().iterator(); it.hasNext();) { 
		@SuppressWarnings("unchecked")
		Map.Entry<String, Class> m = (Map.Entry<String, Class>) it.next(); 
		xstream.alias(m.getKey(), m.getValue()); 
		// 上面可以使用这种方法xstream.alias(obj.getClass().getSimpleName(), obj.getClass()); 利用getSimpleName得到类的简写名称

		xstream.alias("HotelID", String.class); 
		xstream.useAttributeFor(Destination.class, "CityCode");//添加为属性1
		// xstream.useAttributeFor(IsRealTime.class, "RoomCount");
		xstream.registerConverter(new IsRealTime()); //添加为属性2
		if(m.getKey().equals("PriceSearchRequest")){
			xstream.registerConverter(new PriceRange());
		}
		if(m.getKey().equals("PriceConfirmRequest")){
			xstream.registerConverter(new RoomOccupancy());
		}
		if(m.getKey().equals("HotelBookingConfirmRQ")){
			xstream.useAttributeFor(Room.class, "RoomNum");
			xstream.registerConverter(new Name());
		}
		xstream.addImplicitCollection(Room.class, "GuestInfo");
		xstream.aliasSystemAttribute(null, "class"); // 去掉 class 属性  
		xstream.aliasPackage("", "com.dida.pojo"); //去掉包名
	} 
	String xml = xstream.toXML(bean); 
	return xml; 
} 

/** 
     * 将XML转换为Bean 
     * 
     * @param clazzMap 别名-类名映射Map 
     * @param xml      要转换为bean对象的xml字符串 
     * @return Java Bean对象 
     */ 
    public static Object xml2Bean(Map<String, Class> clazzMap, String xml) { 
        XStream xstream = new XStream(); 
        for (Iterator it = clazzMap.entrySet().iterator(); it.hasNext();) { 
            @SuppressWarnings("unchecked")
	    Map.Entry<String, Class> m = (Map.Entry<String, Class>) it.next(); 
            xstream.alias(m.getKey(), m.getValue()); 
            if (m.getKey().equals("RoomOccupancy")) {
             	xstream.registerConverter(new RoomOccupancy()); //取属性
	    }

            if (m.getKey().equals("HotelBookingConfirmRS")) {
                xstream.omitField(BookingDetails.class, "GuestList");
                xstream.omitField(BookingDetails.class, "CustomerRequest");
                xstream.omitField(BookingDetails.class, "ClientReference");
                xstream.omitField(Hotel.class, "CancellationPolicyList");
                xstream.omitField(Hotel.class, "CancellationPolicy");
//              xstream.addImplicitCollection(Room.class, "Room");
	    }
            if (m.getKey().equals("HotelBookingSearchRS")) {
                xstream.omitField(BookingDetails.class, "GuestList");
                xstream.omitField(Hotel.class, "CancellationPolicyList");
                xstream.omitField(Hotel.class, "CancellationPolicy");
	    }
       } 
       Object bean = xstream.fromXML(xml); 
       return bean; 
    }

//调用
Map<String, Class> map = new LinkedHashMap<String, Class>();
map.put("PriceConfirmRequest", GetPriceConfirmRequest.class);
//生成xml
String xml = bean2xml(map, bean);
//解析xml
Map<String, Class> clazzMap = new LinkedHashMap<String, Class>();  
clazzMap.put("Success", Success.class);
clazzMap.put("PriceConfirmResponse", PriceConfirmResponse.class);
PriceConfirmResponse response = (PriceConfirmResponse) xml2Bean(clazzMap, result);

//Converter
package com.dida.pojo;


import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;


public class RoomOccupancy implements Converter{


/**
* 房间编号,依次为1,2,3…,应和房间数对应。
*/
private String RoomNum = "1";

/**
* 大人数量
*/
private String AdultCount = "1";


public RoomOccupancy() {
}


public String getRoomNum() {
return RoomNum;
}


public void setRoomNum(String roomNum) {
RoomNum = roomNum;
}


public String getAdultCount() {
return AdultCount;
}


public void setAdultCount(String adultCount) {
AdultCount = adultCount;
}


@Override
public boolean canConvert(Class arg0) {
return arg0.equals(RoomOccupancy.class);
}


@Override
public void marshal(Object arg0, HierarchicalStreamWriter arg1,
MarshallingContext arg2) {
RoomOccupancy roomOccupancy = (RoomOccupancy)arg0;
arg1.addAttribute("RoomNum", roomOccupancy.getRoomNum());
arg1.addAttribute("AdultCount", roomOccupancy.getAdultCount());
/*if (StringUtils.isNotBlank(roomOccupancy.getChildCount()) && "0".equals(roomOccupancy.getChildCount())) {
arg1.addAttribute("ChildCount", roomOccupancy.getChildCount());
}*/
}

@Override
public Object unmarshal(HierarchicalStreamReader arg0,
UnmarshallingContext arg1) {
return new RoomOccupancy();
}


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值