Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 411382 | Differences between
and this patch

Collapse All | Expand All

(-)a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/oxm/json/JsonGeneratorResult.java (-1 / +8 lines)
Lines 20-33 import org.eclipse.persistence.oxm.record.JsonGeneratorRecord; Link Here
20
public class JsonGeneratorResult extends ExtendedResult{
20
public class JsonGeneratorResult extends ExtendedResult{
21
21
22
    private JsonGenerator generator;
22
    private JsonGenerator generator;
23
    private String rootKeyName;
23
    
24
    
24
    public JsonGeneratorResult(JsonGenerator generator){
25
    public JsonGeneratorResult(JsonGenerator generator){
25
        this.generator = generator;
26
        this.generator = generator;
27
        rootKeyName = null;
28
    }
29
    
30
    public JsonGeneratorResult(JsonGenerator generator, String rootKeyName){
31
        this.generator = generator;
32
        this.rootKeyName = rootKeyName;
26
    }
33
    }
27
34
28
    @Override
35
    @Override
29
    public org.eclipse.persistence.oxm.record.MarshalRecord createRecord() {
36
    public org.eclipse.persistence.oxm.record.MarshalRecord createRecord() {
30
        JsonGeneratorRecord record = new JsonGeneratorRecord(generator);
37
        JsonGeneratorRecord record = new JsonGeneratorRecord(generator, rootKeyName);
31
        return record;
38
        return record;
32
    }    
39
    }    
33
40
(-)a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/oxm/record/JsonGeneratorRecord.java (-3 / +10 lines)
Lines 31-42 public class JsonGeneratorRecord extends JsonRecord { Link Here
31
31
32
    private Level position;    
32
    private Level position;    
33
    private JsonGenerator jsonGenerator;
33
    private JsonGenerator jsonGenerator;
34
    private String rootKeyName;
34
          
35
          
35
    public JsonGeneratorRecord(JsonGenerator generator){
36
    public JsonGeneratorRecord(JsonGenerator generator, String rootKeyName){
36
        super();       
37
        super();       
37
        this.jsonGenerator = generator;
38
        this.jsonGenerator = generator;
39
        this.rootKeyName = rootKeyName;
38
    }
40
    }
39
      
41
    
40
    @Override
42
    @Override
41
    public void startDocument(String encoding, String version) {      
43
    public void startDocument(String encoding, String version) {      
42
        if(isRootArray){  
44
        if(isRootArray){  
Lines 49-54 public class JsonGeneratorRecord extends JsonRecord { Link Here
49
            isLastEventStart = true;
51
            isLastEventStart = true;
50
        }else{
52
        }else{
51
            Level rootLevel = new Level(false, null);
53
            Level rootLevel = new Level(false, null);
54
            rootLevel.setKeyName(rootKeyName);
52
            position = rootLevel;
55
            position = rootLevel;
53
            setComplex(position, true);
56
            setComplex(position, true);
54
        }
57
        }
Lines 74-80 public class JsonGeneratorRecord extends JsonRecord { Link Here
74
             isRootArray = true;              
77
             isRootArray = true;              
75
             Level rootLevel = new Level(true, null); 
78
             Level rootLevel = new Level(true, null); 
76
             position = rootLevel;
79
             position = rootLevel;
77
             jsonGenerator.writeStartArray();
80
             if(rootKeyName != null){
81
                jsonGenerator.writeStartArray(rootKeyName);
82
             }else{
83
                 jsonGenerator.writeStartArray();
84
             }
78
        } else {            
85
        } else {            
79
            if(isLastEventStart){
86
            if(isLastEventStart){
80
                setComplex(position, true);         
87
                setComplex(position, true);         
(-)a/moxy/eclipselink.moxy.test/src/org/eclipse/persistence/testing/jaxb/json/rootlevellist/JsonObjectInArrayBuilderTestCases.java (-5 / +42 lines)
Lines 77-94 public class JsonObjectInArrayBuilderTestCases extends OXTestCase { Link Here
77
        
77
        
78
        StringWriter sw = new StringWriter();
78
        StringWriter sw = new StringWriter();
79
        JsonGenerator jsonGenerator = Json.createGenerator(sw);
79
        JsonGenerator jsonGenerator = Json.createGenerator(sw);
80
        
81
        JsonGenerator arrayGenerator = jsonGenerator.writeStartArray();
80
        JsonGeneratorResult result = new JsonGeneratorResult(jsonGenerator);    
82
        JsonGeneratorResult result = new JsonGeneratorResult(jsonGenerator);    
81
        
83
        
82
        WithoutXmlRootElementRoot foo = new WithoutXmlRootElementRoot();
84
        WithoutXmlRootElementRoot foo = new WithoutXmlRootElementRoot();
83
        foo.setName("FOO");
85
        foo.setName("FOO");
86
        jsonMarshaller.marshal(foo, result);
84
        
87
        
85
        WithoutXmlRootElementRoot foo2 = new WithoutXmlRootElementRoot();
88
        WithoutXmlRootElementRoot foo2 = new WithoutXmlRootElementRoot();
86
        foo2.setName("FOO2");
89
        foo2.setName("FOO2");
87
        
90
        jsonMarshaller.marshal(foo2, result);
88
        List<WithoutXmlRootElementRoot> things = new ArrayList<WithoutXmlRootElementRoot>();
91
   
89
        things.add(foo);
92
        jsonGenerator.writeEnd();
90
        things.add(foo2);
91
        jsonMarshaller.marshal(things, result);
92
        jsonGenerator.flush();
93
        jsonGenerator.flush();
93
        
94
        
94
        log(sw.toString());
95
        log(sw.toString());
Lines 126-130 public class JsonObjectInArrayBuilderTestCases extends OXTestCase { Link Here
126
        assertEquals(controlString, sw.toString());        
127
        assertEquals(controlString, sw.toString());        
127
    }
128
    }
128
    
129
    
130
    public void testNestedResults() throws Exception{
131
        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{WithXmlRootElementRoot.class}, null);
132
        Marshaller jsonMarshaller = ctx.createMarshaller();
133
        jsonMarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, MediaType.APPLICATION_JSON);
134
        jsonMarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
135
        
136
        StringWriter sw = new StringWriter();
137
        
138
             
139
        WithXmlRootElementRoot foo = new WithXmlRootElementRoot();
140
        foo.setName("FOO");
141
142
        WithXmlRootElementRoot foo2 = new WithXmlRootElementRoot();
143
        foo2.setName("FOO2");
144
        
145
        List<WithXmlRootElementRoot> foos = new ArrayList<WithXmlRootElementRoot>();
146
        foos.add(foo);
147
        foos.add(foo2);
148
149
        JsonGenerator generator = Json.createGenerator(sw);
150
        JsonGenerator arrayGenerator = generator.writeStartObject();        
151
        JsonGeneratorResult nestedResult = new JsonGeneratorResult(arrayGenerator,"foosList");          
152
        jsonMarshaller.marshal(foos, nestedResult);        
153
154
        JsonGeneratorResult nestedSingleResult = new JsonGeneratorResult(generator,"singleThing");
155
        jsonMarshaller.marshal(foo, nestedSingleResult);
156
        
157
        generator.writeEnd(); //end root object
158
        generator.flush();
159
        
160
        log(sw.toString());
161
        String controlString = "{\"foosList\":[{\"name\":\"FOO\"},{\"name\":\"FOO2\"}],\"singleThing\":{\"name\":\"FOO\"}}";
162
        
163
        assertEquals(controlString, sw.toString());        
164
    }
165
    
129
   
166
   
130
}
167
}

Return to bug 411382