@@ -31,6 +31,22 @@ static class AttrAndElem
31
31
public int attr = 42 ;
32
32
}
33
33
34
+ static class Floats
35
+ {
36
+ public float elem ;
37
+
38
+ @ JacksonXmlProperty (isAttribute =true , localName ="attr" )
39
+ public float attr ;
40
+ }
41
+
42
+ static class Doubles
43
+ {
44
+ public double elem ;
45
+
46
+ @ JacksonXmlProperty (isAttribute =true , localName ="attr" )
47
+ public double attr ;
48
+ }
49
+
34
50
static class WrapperBean <T >
35
51
{
36
52
public T value ;
@@ -175,4 +191,62 @@ public void testJAXB() throws Exception
175
191
System.out.println("JAXB -> "+sw);
176
192
}
177
193
*/
194
+
195
+ public void testFloatInfinity () throws IOException
196
+ {
197
+ Floats infinite = new Floats ();
198
+ infinite .attr = Float .POSITIVE_INFINITY ;
199
+ infinite .elem = Float .NEGATIVE_INFINITY ;
200
+
201
+ Floats finite = new Floats ();
202
+ finite .attr = 42.5f ;
203
+ finite .elem = 1337.875f ;
204
+
205
+ checkFloatInfinity (infinite , false , "<Floats attr=\" Infinity\" ><elem>-Infinity</elem></Floats>" );
206
+ checkFloatInfinity (finite , false , "<Floats attr=\" 42.5\" ><elem>1337.875</elem></Floats>" );
207
+ checkFloatInfinity (infinite , true , "<Floats attr=\" INF\" ><elem>-INF</elem></Floats>" );
208
+ checkFloatInfinity (finite , true , "<Floats attr=\" 42.5\" ><elem>1337.875</elem></Floats>" );
209
+ }
210
+
211
+ private void checkFloatInfinity (Floats original , boolean xmlSchemaConforming , String expectedXml ) throws IOException
212
+ {
213
+ _xmlMapper .configure (ToXmlGenerator .Feature .XML_SCHEMA_CONFORMING_FLOATS , xmlSchemaConforming );
214
+
215
+ String xml = _xmlMapper .writeValueAsString (original );
216
+ xml = removeSjsxpNamespace (xml );
217
+ assertEquals (expectedXml , xml );
218
+
219
+ Floats deserialized = _xmlMapper .readValue (xml , Floats .class );
220
+ assertEquals (original .attr , deserialized .attr );
221
+ assertEquals (original .elem , deserialized .elem );
222
+ }
223
+
224
+ public void testDoubleInfinity () throws IOException
225
+ {
226
+ Doubles infinite = new Doubles ();
227
+ infinite .attr = Double .POSITIVE_INFINITY ;
228
+ infinite .elem = Double .NEGATIVE_INFINITY ;
229
+
230
+ Doubles finite = new Doubles ();
231
+ finite .attr = 42.5d ;
232
+ finite .elem = 1337.875d ;
233
+
234
+ checkDoubleInfinity (infinite , false , "<Doubles attr=\" Infinity\" ><elem>-Infinity</elem></Doubles>" );
235
+ checkDoubleInfinity (finite , false , "<Doubles attr=\" 42.5\" ><elem>1337.875</elem></Doubles>" );
236
+ checkDoubleInfinity (infinite , true , "<Doubles attr=\" INF\" ><elem>-INF</elem></Doubles>" );
237
+ checkDoubleInfinity (finite , true , "<Doubles attr=\" 42.5\" ><elem>1337.875</elem></Doubles>" );
238
+ }
239
+
240
+ private void checkDoubleInfinity (Doubles original , boolean xmlSchemaConforming , String expectedXml ) throws IOException
241
+ {
242
+ _xmlMapper .configure (ToXmlGenerator .Feature .XML_SCHEMA_CONFORMING_FLOATS , xmlSchemaConforming );
243
+
244
+ String xml = _xmlMapper .writeValueAsString (original );
245
+ xml = removeSjsxpNamespace (xml );
246
+ assertEquals (expectedXml , xml );
247
+
248
+ Doubles deserialized = _xmlMapper .readValue (xml , Doubles .class );
249
+ assertEquals (original .attr , deserialized .attr );
250
+ assertEquals (original .elem , deserialized .elem );
251
+ }
178
252
}
0 commit comments