[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [mdt-papyrus.dev] Diagrams with SVG in latest photon broken

On 01/06/2018 10:53, Ansgar Radermacher wrote:

there are multiple SVG issue which are partly already resolved. I understand that photon will revert to batik 1.6, but here's the info anyway:



Thanks for the summary.

1. SVGs are not displayed: instead of displaying an SVG, we observe a "println" output that is coming from the DefaultGraphics2D (which is a sample implementation). The reason is that class AbstractGraphicsNode demands a copy in case of clipping (which is always used in case of Papyrus). It uses the following code g2d = (Graphics2D)g2d.create(); The current g2d is the GMF runtime Graphics2DToGraphicsAdaptor. This class should overload the create operation inherited from DefaultGraphics2D. Since it does not, a new DefaultGraphics2D is created instead. The fix is therefore to overload this class. Quentin has already created a patch: https://git.eclipse.org/r/#/c/123759/

The patch is postponed until we get around to actually upgrading GMF Runtime to Batik 1.9 or later. I've added the corresponding bugzilla (#535342) to the next GMF Runtime version (1.13.0, not idea yet when this will be released).



2. "File-> Save as image" file fails with an NPE in case of SVG. The reason is that no (batik) ImageWriter (batik.ext-awt) is registered for "image/png". This is due to a missing dependency from batik.util to batik.codec, as proposed in https://bz.apache.org/bugzilla/show_bug.cgi?id=44682 and https://stackoverflow.com/questions/16138850/batik-svggraphics2d-nullpointerexception-when-drawing-image. Batik.util contains a class "Service" which looks up registered services, but does not "see" the batik.codec image writers due to the missing dependency. However, this solution is not possible (at least not on Eclipse level), since batik.codec also depends on batik.util, i.e. would introduce a dependency cycle. A workaround is to register image/png, image/jpeg, ... manually in GMF.

I've had to do a similar workaround on Sirius (https://git.eclipse.org/r/c/122769/1/plugins/org.eclipse.sirius.diagram.ui/src-gen/org/eclipse/sirius/diagram/ui/provider/DiagramUIPlugin.java), but then got busy with the other Batik packaging issues and never got around to move the workaround directly in GMF. Sorry about that. Ansgar, if you create the corresponding ticket in GMF, you can put it directly in 1.13.0 as Target Milestone.



3. Hangs on startup on "non-clean" workspaces. Might be an installation problem on my machine, caused by exception below.


MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.e4.ui.workbench.swt".
!STACK 0
java.lang.LinkageError: loader constraint violation in interface itable initialization: when resolving method "org.apache.batik.dom.AbstractDocument.createEvent(Ljava/lang/String;)Lorg/w3c/dom/events/Event;" the class loader (instance of org/eclipse/osgi/internal/loader/EquinoxClassLoader) of the current class, org/apache/batik/anim/dom/SVGOMDocument, and the class loader (instance of <bootloader>) for interface org/w3c/dom/events/DocumentEvent have different Class objects for the type org/w3c/dom/events/Event used in the signature
ÂÂÂ at org.apache.batik.anim.dom.SVGDOMImplementation.createDocument(SVGDOMImplementation.java:139)
ÂÂÂ at org.apache.batik.dom.util.SAXDocumentFactory.startElement(SAXDocumentFactory.java:641)
ÂÂÂ at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
...

This is the main issue for which I have no fix or workaround and which caused the decision to revert to Batik 1.6 for Photon. It's not just you, BIRT was the first to see it, and we could also reproduce it with Sirius.


The only good news regarding this one is that the new Batik 1.10 *may* have made changes on their side that would fix that (as part of changes to by compatible with java 9 & 10). See https://bugs.eclipse.org/bugs/show_bug.cgi?id=522740#c85.