26
26
*/
27
27
package com .emc .object .s3 .bean ;
28
28
29
- import javax .xml .bind .annotation .XmlElement ;
30
- import javax .xml .bind .annotation .XmlElementWrapper ;
31
- import javax .xml .bind .annotation .XmlEnum ;
32
- import javax .xml .bind .annotation .XmlType ;
29
+ import com .fasterxml .jackson .annotation .JsonRawValue ;
30
+ import com .fasterxml .jackson .core .JsonParser ;
31
+ import com .fasterxml .jackson .databind .DeserializationContext ;
32
+ import com .fasterxml .jackson .databind .JsonDeserializer ;
33
+ import com .fasterxml .jackson .databind .annotation .JsonDeserialize ;
34
+
35
+ import javax .xml .bind .annotation .*;
36
+ import java .io .IOException ;
33
37
import java .util .*;
34
38
35
- @ XmlType (propOrder = {"sid" , "effect" , "principal " , "actions" , "resource" , "conditions" })
39
+ @ XmlType (propOrder = {"sid" , "effect" , "rawPrincipal " , "actions" , "resource" , "conditions" })
36
40
public class BucketPolicyStatement {
37
41
private String sid ;
38
42
private Effect effect ;
@@ -57,10 +61,23 @@ public void setSid(String sid) {
57
61
58
62
public void setEffect (Effect effect ) { this .effect = effect ; }
59
63
64
+ @ XmlTransient
65
+ public String getPrincipal () {
66
+ if ("\" *\" " .equals (principal )) return "*" ; // backward-compatible for "*"
67
+ return principal ;
68
+ }
69
+
60
70
@ XmlElement (name = "Principal" )
61
- public String getPrincipal () { return principal ; }
71
+ @ JsonRawValue ()
72
+ @ JsonDeserialize (using = RawDeserializer .class )
73
+ public String getRawPrincipal () { return principal ; }
74
+
75
+ public void setPrincipal (String principal ) {
76
+ if ("*" .equals (principal )) this .principal = "\" *\" " ; // backward-compatible for "*"
77
+ else this .principal = principal ;
78
+ }
62
79
63
- public void setPrincipal (String principal ) { this .principal = principal ; }
80
+ public void setRawPrincipal (String principal ) { this .principal = principal ; }
64
81
65
82
@ XmlElement (name = "Action" )
66
83
public List <BucketPolicyAction > getActions () {
@@ -159,4 +176,11 @@ public int hashCode() {
159
176
public enum Effect {
160
177
Allow , Deny
161
178
}
179
+
180
+ public static class RawDeserializer extends JsonDeserializer <String > {
181
+ @ Override
182
+ public String deserialize (JsonParser p , DeserializationContext ctxt ) throws IOException {
183
+ return p .getCodec ().readTree (p ).toString ();
184
+ }
185
+ }
162
186
}
0 commit comments