2020import grails .util .GrailsConfig ;
2121import org .apache .commons .logging .Log ;
2222import org .apache .commons .logging .LogFactory ;
23+ import org .codehaus .groovy .grails .support .proxy .DefaultProxyHandler ;
24+ import org .codehaus .groovy .grails .support .proxy .ProxyHandler ;
2325import org .codehaus .groovy .grails .web .converters .Converter ;
2426import org .codehaus .groovy .grails .web .converters .marshaller .ObjectMarshaller ;
2527import org .codehaus .groovy .grails .web .converters .marshaller .ProxyUnwrappingMarshaller ;
@@ -78,16 +80,17 @@ private void initJSONConfiguration() {
7880 marshallers .add (new org .codehaus .groovy .grails .web .converters .marshaller .json .ToStringBeanMarshaller ());
7981
8082 boolean includeDomainVersion = includeDomainVersionProperty ("json" );
83+ ProxyHandler proxyHandler = getProxyHandler ();
8184 if (GrailsConfig .get ("grails.converters.json.default.deep" , false )) {
8285 LOG .debug ("Using DeepDomainClassMarshaller as default." );
83- marshallers .add (new org .codehaus .groovy .grails .web .converters .marshaller .json .DeepDomainClassMarshaller (includeDomainVersion ));
86+ marshallers .add (new org .codehaus .groovy .grails .web .converters .marshaller .json .DeepDomainClassMarshaller (includeDomainVersion , proxyHandler ));
8487 } else {
85- marshallers .add (new org .codehaus .groovy .grails .web .converters .marshaller .json .DomainClassMarshaller (includeDomainVersion ));
88+ marshallers .add (new org .codehaus .groovy .grails .web .converters .marshaller .json .DomainClassMarshaller (includeDomainVersion , proxyHandler ));
8689 }
8790 marshallers .add (new org .codehaus .groovy .grails .web .converters .marshaller .json .GroovyBeanMarshaller ());
8891 marshallers .add (new org .codehaus .groovy .grails .web .converters .marshaller .json .GenericJavaBeanMarshaller ());
8992
90- DefaultConverterConfiguration <JSON > cfg = new DefaultConverterConfiguration <JSON >(marshallers );
93+ DefaultConverterConfiguration <JSON > cfg = new DefaultConverterConfiguration <JSON >(marshallers , proxyHandler );
9194 cfg .setEncoding (GrailsConfig .get ("grails.converters.encoding" , "UTF-8" ));
9295 String defaultCirRefBehaviour = GrailsConfig .get ("grails.converters.default.circular.reference.behaviour" , "DEFAULT" );
9396 cfg .setCircularReferenceBehaviour (Converter .CircularReferenceBehaviour .valueOf (
@@ -100,12 +103,12 @@ private void initJSONConfiguration() {
100103
101104 registerObjectMarshallersFromApplicationContext (cfg , JSON .class );
102105
103- ConvertersConfigurationHolder .setDefaultConfiguration (JSON .class , new ChainedConverterConfiguration <JSON >(cfg ));
106+ ConvertersConfigurationHolder .setDefaultConfiguration (JSON .class , new ChainedConverterConfiguration <JSON >(cfg , proxyHandler ));
104107 }
105108
106109 private void initDeepJSONConfiguration () {
107- DefaultConverterConfiguration <JSON > deepConfig = new DefaultConverterConfiguration <JSON >(ConvertersConfigurationHolder .getConverterConfiguration (JSON .class ));
108- deepConfig .registerObjectMarshaller (new org .codehaus .groovy .grails .web .converters .marshaller .json .DeepDomainClassMarshaller (includeDomainVersionProperty ("json" )));
110+ DefaultConverterConfiguration <JSON > deepConfig = new DefaultConverterConfiguration <JSON >(ConvertersConfigurationHolder .getConverterConfiguration (JSON .class ), getProxyHandler () );
111+ deepConfig .registerObjectMarshaller (new org .codehaus .groovy .grails .web .converters .marshaller .json .DeepDomainClassMarshaller (includeDomainVersionProperty ("json" ), getProxyHandler () ));
109112 ConvertersConfigurationHolder .setNamedConverterConfiguration (JSON .class , "deep" , deepConfig );
110113 }
111114
@@ -120,17 +123,18 @@ private void initXMLConfiguration() {
120123 marshallers .add (new org .codehaus .groovy .grails .web .converters .marshaller .xml .DateMarshaller ());
121124 marshallers .add (new ProxyUnwrappingMarshaller <XML >());
122125 marshallers .add (new org .codehaus .groovy .grails .web .converters .marshaller .xml .ToStringBeanMarshaller ());
126+ ProxyHandler proxyHandler = getProxyHandler ();
123127
124128 boolean includeDomainVersion = includeDomainVersionProperty ("xml" );
125129 if (GrailsConfig .get ("grails.converters.xml.default.deep" , false )) {
126- marshallers .add (new org .codehaus .groovy .grails .web .converters .marshaller .xml .DeepDomainClassMarshaller (includeDomainVersion ));
130+ marshallers .add (new org .codehaus .groovy .grails .web .converters .marshaller .xml .DeepDomainClassMarshaller (includeDomainVersion , proxyHandler ));
127131 } else {
128- marshallers .add (new org .codehaus .groovy .grails .web .converters .marshaller .xml .DomainClassMarshaller (includeDomainVersion ));
132+ marshallers .add (new org .codehaus .groovy .grails .web .converters .marshaller .xml .DomainClassMarshaller (includeDomainVersion , proxyHandler ));
129133 }
130134 marshallers .add (new org .codehaus .groovy .grails .web .converters .marshaller .xml .GroovyBeanMarshaller ());
131135 marshallers .add (new org .codehaus .groovy .grails .web .converters .marshaller .xml .GenericJavaBeanMarshaller ());
132136
133- DefaultConverterConfiguration <XML > cfg = new DefaultConverterConfiguration <XML >(marshallers );
137+ DefaultConverterConfiguration <XML > cfg = new DefaultConverterConfiguration <XML >(marshallers , proxyHandler );
134138 cfg .setEncoding (GrailsConfig .get ("grails.converters.encoding" , "UTF-8" ));
135139 String defaultCirRefBehaviour = GrailsConfig .get ("grails.converters.default.circular.reference.behaviour" , "DEFAULT" );
136140 cfg .setCircularReferenceBehaviour (Converter .CircularReferenceBehaviour .valueOf (
@@ -141,12 +145,23 @@ private void initXMLConfiguration() {
141145 Boolean prettyPrint = GrailsConfig .get ("grails.converters.xml.pretty.print" , defaultPrettyPrint );
142146 cfg .setPrettyPrint (prettyPrint );
143147 registerObjectMarshallersFromApplicationContext (cfg , XML .class );
144- ConvertersConfigurationHolder .setDefaultConfiguration (XML .class , new ChainedConverterConfiguration <XML >(cfg ));
148+ ConvertersConfigurationHolder .setDefaultConfiguration (XML .class , new ChainedConverterConfiguration <XML >(cfg , proxyHandler ));
145149 }
146150
151+ private ProxyHandler getProxyHandler () {
152+ ProxyHandler proxyHandler ;
153+ if (applicationContext != null ) {
154+ proxyHandler = applicationContext .getBean (ProxyHandler .class );
155+ }
156+ else {
157+ proxyHandler = new DefaultProxyHandler ();
158+ }
159+ return proxyHandler ;
160+ }
161+
147162 private void initDeepXMLConfiguration () {
148- DefaultConverterConfiguration <XML > deepConfig = new DefaultConverterConfiguration <XML >(ConvertersConfigurationHolder .getConverterConfiguration (XML .class ));
149- deepConfig .registerObjectMarshaller (new org .codehaus .groovy .grails .web .converters .marshaller .xml .DeepDomainClassMarshaller (includeDomainVersionProperty ("xml" )));
163+ DefaultConverterConfiguration <XML > deepConfig = new DefaultConverterConfiguration <XML >(ConvertersConfigurationHolder .getConverterConfiguration (XML .class ), getProxyHandler () );
164+ deepConfig .registerObjectMarshaller (new org .codehaus .groovy .grails .web .converters .marshaller .xml .DeepDomainClassMarshaller (includeDomainVersionProperty ("xml" ), getProxyHandler () ));
150165 ConvertersConfigurationHolder .setNamedConverterConfiguration (XML .class , "deep" , deepConfig );
151166 }
152167
0 commit comments