es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de sintaxis dentro del mapa, pero funciona en el servicio web en línea.

Estoy tratando de usar plantuml dentro de Java para generar un archivo SVG. El código que estoy utilizando es básicamente el mismo que el del ejemplo:

        byte[] bytes = source.getBytes(StandardCharsets.UTF_8);
        String utf8EncodedString = new String(bytes, StandardCharsets.UTF_8);
        System.out.println(utf8EncodedString);
        SourceStringReader reader = new SourceStringReader(utf8EncodedString);
        final ByteArrayOutputStream os = new ByteArrayOutputStream();
        // Escribir la primera imagen en "os"
        reader.generateImage(os, new FileFormatOption(FileFormat.SVG));
        os.close();
        // El XML se almacena en svg
        final String svg = new String(os.toByteArray(), Charset.forName("UTF-8"));
        return svg;

Básicamente, la parte de utf-8 es porque pensé que el problema estaba en la codificación, pero resulta que no es así. La cadena utilizada como fuente es la siguiente:

@startuml
left to right direction
' Líneas horizontales: -->, <--, <-->
' Líneas verticales: ->, <-, <->
map Transport.Personnel{
ID => 38
}
map Airplane1{
ID => 39
}
map Airplane2{
ID => 40
}
map Lathe1{
ID => 41
}
map Lathe2{
ID => 42
}
map Production.from.Mold1{
ID => 43
}
map Production.from.Mold2{
ID => 44
}
map Assembly.Line1{
ID => 45
}
map Assembly.Line2{
ID => 46
}
map Assembly.Line3{
ID => 47
}
@enduml

Esta cadena genera un diagrama en el servicio web de plantuml en línea, pero al ejecutarlo en Java, el SVG generado indica un error de sintaxis en la cadena cuando se abre:

... (omitir 1 línea) ...
left to right direction
' Líneas horizontales:
-->, <--
, <-->
' Líneas verticales: ->, <-, <->
map Transport.Personnel{
¿Error de sintaxis?

¿Necesito hacer algo más? Realmente no tengo idea de qué podría estar saliendo mal y no sé qué buscar aquí/en sus foros para intentar solucionar el problema.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar relacionado con los caracteres especiales utilizados en la cadena PlantUML. Específicamente, las entidades HTML (> y <) utilizadas para las flechas podrían no ser reconocidas correctamente por SourceStringReader.

    Una solución podría ser reemplazar las entidades HTML con los caracteres reales que representan (> y <), así:

    @startuml
    dirección de izquierda a derecha
    ' Líneas horizontales: -->, <--, <-->
    ' Líneas verticales: ->, <-, <->
    map Transport.Personnel{
    ID => 38
    }
    map Airplane1{
    ID => 39
    }
    map Airplane2{
    ID => 40
    }
    map Lathe1{
    ID => 41
    }
    map Lathe2{
    ID => 42
    }
    map Production.from.Mold1{
    ID => 43
    }
    map Production.from.Mold2{
    ID => 44
    }
    map Assembly.Line1{
    ID => 45
    }
    map Assembly.Line2{
    ID => 46
    }
    map Assembly.Line3{
    ID => 47
    }
    @enduml
    

    Alternativamente, puedes intentar utilizar una codificación diferente para los bytes, como ISO-8859-1, para ver si hay alguna diferencia en el SVG generado. Sin embargo, dado que el problema parece estar relacionado con los caracteres especiales, reemplazar las entidades HTML con sus caracteres reales es probablemente la solución más fácil.

Comments are closed.