1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.krad.service.impl;
17
18 import com.thoughtworks.xstream.XStream;
19 import com.thoughtworks.xstream.mapper.MapperWrapper;
20 import org.apache.commons.logging.Log;
21 import org.apache.commons.logging.LogFactory;
22 import org.apache.ojb.broker.core.proxy.ListProxyDefaultImpl;
23 import org.kuali.rice.krad.service.PersistenceService;
24 import org.kuali.rice.krad.service.util.DateTimeConverter;
25
26 import java.util.ArrayList;
27
28
29
30
31
32
33
34 public class XmlObjectSerializerIgnoreMissingFieldsServiceImpl extends XmlObjectSerializerServiceImpl {
35 private static final Log LOG = LogFactory.getLog(XmlObjectSerializerIgnoreMissingFieldsServiceImpl.class);
36
37 private PersistenceService persistenceService;
38
39 private XStream xstream;
40
41 public XmlObjectSerializerIgnoreMissingFieldsServiceImpl() {
42
43 xstream = new XStream(new ProxyAwareJavaReflectionProvider()) {
44 @Override
45 protected MapperWrapper wrapMapper(MapperWrapper next) {
46 return new MapperWrapper(next) {
47 @Override
48 public boolean shouldSerializeMember(Class definedIn,
49 String fieldName) {
50 if (definedIn == Object.class) {
51 return false;
52 }
53 return super.shouldSerializeMember(definedIn, fieldName);
54 }
55 };
56 }
57 };
58
59 xstream.registerConverter(new ProxyConverter(xstream.getMapper(), xstream.getReflectionProvider() ));
60 xstream.addDefaultImplementation(ArrayList.class, ListProxyDefaultImpl.class);
61 xstream.registerConverter(new DateTimeConverter());
62 }
63
64
65
66
67
68
69 public Object fromXml(String xml) {
70 if ( LOG.isDebugEnabled() ) {
71 LOG.debug( "fromXml() : \n" + xml );
72 }
73 if ( xml != null ) {
74 xml = xml.replaceAll( "--EnhancerByCGLIB--[0-9a-f]{0,8}", "" );
75 }
76 return xstream.fromXML(xml);
77 }
78 }