FasterXML / FasterXML/jackson-dataformat-xml

Serializing `Map`s will produce non-well-formed XML as keys are not modified as per XML name rules

Abierto
#244 11 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Java
Estrellas
631
Forks
246
Merge medio
7 d 9 h
PR fusionados (30 d)
13

Descripción

Hello,
I can not parse Map to valid XML String if Map contains a key with white space.
I am using `jackson-dataformat-xml version: 2.5.3`

Here is sample code to reproduce this issue:

```

package com.asite.html;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

public class Test {
public static void main(String[] args) throws IOException{
parseMapWithNoSpace(); //This method works fine
parseMapWithSpace(); //This method will throw IOException
}
private static void parseMapWithNoSpace() throws JsonProcessingException, IOException, JsonParseException, JsonMappingException {
Map mapWithNoSpace = new HashMap<>();
mapWithNoSpace.put("mapWithNoSpace", "test test"); //Key with no space
XmlMapper mapper = new XmlMapper();
String xml = mapper.writeValueAsString(mapWithNoSpace);
System.out.println(xml);
Map map1 = mapper.readValue(xml, Map.class);
System.out.println(map1);
}

private static void parseMapWithSpace() throws JsonProcessingException, IOException, JsonParseException, JsonMappingException {
Map mapWithSpace = new HashMap<>();
mapWithSpace.put("tests pace", "test"); //key with space
XmlMapper mapper = new XmlMapper();
String xml = mapper.writeValueAsString(mapWithSpace);
System.out.println(xml);
Map map1 = mapper.readValue(xml, Map.class);
System.out.println(map1);
}
}

```

Here is console output
```

test test
{mapWithNoSpace=test test}
test
Exception in thread "main" java.io.IOException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,30]
Message: Attribute name "space" associated with an element type "test" must be followed by the ' = ' character.
at com.fasterxml.jackson.dataformat.xml.util.StaxUtil.throwXmlAsIOException(StaxUtil.java:24)
at com.fasterxml.jackson.dataformat.xml.deser.XmlTokenStream.next(XmlTokenStream.java:164)
at com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser.nextToken(FromXmlParser.java:453)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringMap(MapDeserializer.java:461)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:342)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:26)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3562)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2578)
at com.asite.html.Test.parseMapWithSpace(Test.java:33)
at com.asite.html.Test.main(Test.java:15)
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,30]
Message: Attribute name "space" associated with an element type "test" must be followed by the ' = ' character.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:601)
at javax.xml.stream.util.StreamReaderDelegate.next(StreamReaderDelegate.java:88)
at org.codehaus.stax2.ri.Stax2ReaderAdapter.next(Stax2ReaderAdapter.java:129)
at com.fasterxml.jackson.dataformat.xml.deser.XmlTokenStream._collectUntilTag(XmlTokenStream.java:349)
at com.fasterxml.jackson.dataformat.xml.deser.XmlTokenStream._next(XmlTokenStream.java:312)
at com.fasterxml.jackson.dataformat.xml.deser.XmlTokenStream.next(XmlTokenStream.java:162)
... 8 more

```

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.