flowable / flowable/flowable-engine
Text with xml entity references in <extensionElements> is truncated
- Lingua principale
- Java
- Stelle
- 9.5k
- Fork
- 2.9k
- Merge medio
- 7h 8m
- PR unite (30g)
- 2
Descrizione
# 1. Description
Bpmn xml text like this:
```xml
a>b
```
After convertion to json, the text `a>b` in element is converted to `b`, while expection is: `a>b`.
# 2. Reason
## 2.1 Behavior of XMLStreamReader
The XMLStreamReader treate entity references specially. `a>b` will report 3 times.
I wrote a simple code:
```java
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import java.io.StringReader;
public class Application {
public static void main(String[] args){
String xmlString = " a>b";
XMLInputFactory xif = XMLInputFactory.newInstance();
xif.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, false);
try {
XMLStreamReader xtr = xif.createXMLStreamReader(new StringReader(xmlString));
while (xtr.hasNext()) {
xtr.next();
if (xtr.isCharacters()) {
System.out.printf("eventType:%d, text:%s\n", xtr.getEventType(), xtr.getText());
}
}
}catch (Exception ex){
System.out.println(ex);
}
}
}
```
The output is:
```
eventType:4, text:a
eventType:4, text:>
eventType:4, text:b
```
We can see that,there is only a line `a>b`, but XMLStreamReader reported 3 times.
## 2.2 BpmnXMLUtil.parseChildElements() only got the last reported text
Relatived code :
https://github.com/flowable/flowable-engine/blob/d763b143d9b80b32ec8483fe6584429283e87e75/modules/flowable-bpmn-converter/src/main/java/org/flowable/bpmn/converter/util/BpmnXMLUtil.java#L190-L204
At line 195, `extensionElement.setElementText(xtr.getText().trim())` only got the last reported text `b`.
# 3. Suggestion
Modify L195 as: extensionElement.setElementText(extensionElement.getElementText() + xtr.getText().trim())
Please forgive me for my poor English.
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Direzione di ricerca
Inizia in modules/flowable-bpmn-converter/src/main/java/org/flowable/bpmn/converter/util/BpmnXMLUtil.java, in particolare in parseChildElements() intorno alla riga indicata. Riproduci l’XML BPMN fornito con un riferimento a un’entità in extensionElements ed esamina come vengono gestiti gli eventi di testo di XMLStreamReader. Il lavoro è completato quando il testo di mytag rimane completo dopo la conversione in JSON.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- java
- Ambito
- backend
- Tipo di issue
- Bug
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Stato di attività
- Ferma
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 48/100