17
17
18
18
import org .springframework .util .Assert ;
19
19
import org .springframework .util .ClassUtils ;
20
+ import org .springframework .util .ObjectUtils ;
20
21
import rx .Observable ;
21
22
import rx .functions .Action0 ;
22
23
import rx .functions .Action1 ;
@@ -34,21 +35,12 @@ public CacheResultWrapperManager() {
34
35
unwrapperByClass = new HashMap <Class <?>, CacheResultWrapper >();
35
36
36
37
List <CacheResultWrapper > unwrapperList = new ArrayList <CacheResultWrapper >();
37
- try {
38
- ClassUtils .forName ("java.util.Optional" , CacheAspectSupport .class .getClassLoader ());
39
- unwrapperList .add (new OptionalUnWrapper ());
40
- }
41
- catch (ClassNotFoundException ex ) {
42
- // Java 8 not available - Optional references simply not supported then.
43
- }
44
38
45
- try {
46
- ClassUtils .forName ("rx.Observable" , CacheAspectSupport .class .getClassLoader ());
39
+ unwrapperList .add (new OptionalUnWrapper ());
40
+
41
+ if (ClassUtils .isPresent ("rx.Observable" , CacheAspectSupport .class .getClassLoader ())) {
47
42
unwrapperList .add (new ObservableWrapper ());
48
43
}
49
- catch (ClassNotFoundException ex ) {
50
- // RxJava not available
51
- }
52
44
53
45
for (CacheResultWrapper unwrapper : unwrapperList ) {
54
46
unwrapperByClass .put (unwrapper .getWrapClass (), unwrapper );
@@ -102,14 +94,11 @@ private class OptionalUnWrapper implements CacheResultWrapper {
102
94
@ Override
103
95
public Object unwrap (Object optionalObject , AsyncWrapResult asyncResult ) {
104
96
Optional <?> optional = (Optional <?>) optionalObject ;
105
- if (!optional .isPresent ()) {
106
- asyncResult .complete (null );
107
- }
108
- else {
109
- Object result = optional .get ();
110
- Assert .isTrue (!(result instanceof Optional ), "Multi-level Optional usage not supported" );
111
- asyncResult .complete (result );
112
- }
97
+
98
+ Object value = ObjectUtils .unwrapOptional (optional );
99
+
100
+ asyncResult .complete (value );
101
+
113
102
return optionalObject ;
114
103
}
115
104
0 commit comments