Xstream 转成xml的元素名称规则

XStream xstream = new XStream() {
    		  
    		/* (non-Javadoc)
    		 * @see com.thoughtworks.xstream.XStream#wrapMapper(com.thoughtworks.xstream.mapper.MapperWrapper)
    		 */
    		@Override
    		protected MapperWrapper wrapMapper(MapperWrapper next) {
    			
    			final AtomicBoolean isListTypeOccurs = new AtomicBoolean(false);
    			MapperWrapper capitalizedElementNameWrapper = new MapperWrapper(next) {
    				/* (non-Javadoc)
    				 * @see com.thoughtworks.xstream.mapper.MapperWrapper#serializedClass(java.lang.Class)
    				 */
    				@Override
    				public String serializedClass(Class type) { 
    					return isListTypeOccurs.get() ? "Row" : type.getSimpleName();
    				}
    				
    				/* (non-Javadoc)
    				 * @see com.thoughtworks.xstream.mapper.MapperWrapper#serializedMember(java.lang.Class, java.lang.String)
    				 */
    				@Override
    				public String serializedMember(Class type, String memberName) {
    					
    					if(!isListTypeOccurs.get()) {
    						
    						Field f = null;
    						try {
								f = type.getDeclaredField(memberName);
							} catch (Exception e) { 
							} 
							if(f !=null && (Collection.class.isAssignableFrom(f.getType()) || f.getType().isArray()) ) {
								isListTypeOccurs.getAndSet(true);
								return "Detail";
							}
    					}
    					return StringUtils.capitalize(memberName);
    				}
    				
    				
    			};
    			return capitalizedElementNameWrapper;
    		}
    	};
    	 
    	 
    	XStreamXMLReader r = new XStreamXMLReader();
    	try {
    		r.intialize();
			r.setProperty(SaxWriter.CONFIGURED_XSTREAM_PROPERTY, null);
		} catch (Exception e) { 
			e.printStackTrace();
		} 
    	
    	
    	ExecutionContext exc = smooks.createExecutionContext(); 
    	Stack<XMLReader> readers = new Stack<XMLReader>();
    	readers.add(r);
    	exc.setAttribute(XMLReader.class, readers);

转载于:https://my.oschina.net/frankies/blog/104417

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值