Servoy 2020.03

Hi,
I just updated to 2020.03 for a client’s solution that is running on 2019.3.1 and there seem to be a few problems for me with FontAwesome stuff.

  1. I had a problem that for all the places where I had placed the ‘servoyextra-fontawesome’ component and set the ‘facials’ I was just using
fa-envelope fa-2x

to set the class, but this wasn’t working correctly after update, but luckily I realised that I just needed to change it to

fa fa-envelope fa-2x

(i.e. making sure to have

fa

at start of each one (took a while to go thru all forms…)
2) BUT, the main problem I now has is that I am using a lot of ‘servoyextra-table’ components and using the ‘styleClassDataprovider’ that uses a calculation that returns a CSS style and these aren’t working now. I have set various CSS styles in this form

.editicon:before {
    content: "\f044";
    color: orange;
    font-family: "FontAwesome";
    font-size: 20px;
    float: left;
    margin-right: 10px;
 }

and then have the calc return ‘editicon’, but it’s not displaying the FA icon correctly now.
Please can someone tell me how this should work now??
Thanks
Rafi

Hi Rafi,

The font-family is a little changed in Font Awesome.
The font awesome service provides the Font awesome 5 lib.
So your css should be:

.editicon:before {
    content: "\f044";
    color: orange;
    font-family: "Font Awesome 5 Free";
    font-size: 20px;
    float: left;
    margin-right: 10px;
}

rvanveen:
Hi Rafi,
The font-family is a little changed in Font Awesome.
The font awesome service provides the Font awesome 5 lib.

Awesome!

Thanks, that solved it!
And great to now be able to use v5 stuff from FA ;-)
Rafi

Quick question related to FA.

What is the Servoy recommended way to substitute FA pro for the supplied FA free. I have tried numerous ways but every one keeps getting reverted back whenever there is an update to any of the Web Packages that require the FontAwesome component. We have a license for FA Pro and would very much like to use it without the hassle of having to recreate things every time.

Thanks
Steve

The function utils.bytesToBase64() seems to be removed.

We use the svyUtils-module and the function scopes.svyCrypto.getHash() uses utils.bytesToBase64(), so this doesn’t work anymore.
Is there an alternative for this function? Or will there be an update for svyUtils soon?

that is not removed

this for example should work fine:

var bytes = utils.stringToBytes(“test string”);
var string = utils.bytesToBase64(bytes);
application.output(string)
var bytes2 = utils.base64ToBytes(string);
var string2 = utils.bytesToString(bytes);
application.output(string2)

why do you think that is removed?

Looking at 2020.03 and still see utils.bytesToBase64(). You don’t see that method anymore? Does it work when you call it?

Johan is always faster.

I updated to 2020.03 and now I can’t start the Smart Client on some machines (Windows 10 and Windows2016 RDS).
Errors in the Java log:

CacheEntry[https://172.20.1.55:8443/servoy-client/BOSS.jnlp]: updateAvailable=true,lastModified=Wed Apr 15 10:04:19 CEST 2020,length=-1
storing the cache in C:\Users\Administrator.servoy\libCache\172_20_1_558443 (null)
The jnlp files resources are not the same, downloading it
CacheEntry[https://172.20.1.55:8443/lib/j2db.jar]: updateAvailable=false,lastModified=Wed Apr 08 23:32:52 CEST 2020,length=1304605
CacheEntry[https://172.20.1.55:8443/lib/jabsorb.jar]: updateAvailable=false,lastModified=Wed Apr 08 23:32:54 CEST 2020,length=57215
CacheEntry[https://172.20.1.55:8443/lib/js.jar]: updateAvailable=false,lastModified=Wed Apr 08 23:32:56 CEST 2020,length=494714
CacheEntry[https://172.20.1.55:8443/lib/BrowserLauncher2.jar]: updateAvailable=false,lastModified=Wed Apr 08 23:32:54 CEST 2020,length=17998
CacheEntry[https://172.20.1.55:8443/lib/slf4j-jdk14.jar]: updateAvailable=false,lastModified=Wed Apr 08 23:32:57 CEST 2020,length=7345
CacheEntry[https://172.20.1.55:8443/lib/MRJAdapter.jar]: updateAvailable=false,lastModified=Wed Apr 08 23:32:57 CEST 2020,length=23583
CacheEntry[https://172.20.1.55:8443/lib/slf4j-api.jar]: updateAvailable=false,lastModified=Wed Apr 08 23:32:57 CEST 2020,length=20107
CacheEntry[https://172.20.1.55:8443/lib/l2fprod-common-outlookbar.jar]: updateAvailable=false,lastModified=Wed Apr 08 21:32:58 UTC 2020,length=37556
CacheEntry[https://172.20.1.55:8443/lib/fs-parser.jar]: updateAvailable=false,lastModified=Wed Apr 08 21:32:58 UTC 2020,length=81504
java.util.zip.ZipException: no current ZIP entry
at java.util.zip.ZipOutputStream.write(Unknown Source)
at java.util.zip.DeflaterOutputStream.write(Unknown Source)
at java.util.zip.ZipOutputStream.writeInt(Unknown Source)
at java.util.zip.ZipOutputStream.writeLOC(Unknown Source)
at java.util.zip.ZipOutputStream.putNextEntry(Unknown Source)
at java.util.jar.JarOutputStream.putNextEntry(Unknown Source)
at com.sun.java.util.jar.pack.NativeUnpack.writeEntry(Unknown Source)
at com.sun.java.util.jar.pack.NativeUnpack.run(Unknown Source)
at com.sun.java.util.jar.pack.NativeUnpack.run(Unknown Source)
at com.sun.java.util.jar.pack.UnpackerImpl.unpack(Unknown Source)
at com.servoy.bootstrapper.Pack200Wrapper.unpack(Pack200Wrapper.java:93)
at com.servoy.bootstrapper.JarDownloader.run(JarDownloader.java:55)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Suppressed: java.util.zip.ZipException: no current ZIP entry
at java.util.zip.ZipOutputStream.write(Unknown Source)
at java.util.zip.DeflaterOutputStream.deflate(Unknown Source)
at java.util.zip.ZipOutputStream.closeEntry(Unknown Source)
at java.util.zip.ZipOutputStream.finish(Unknown Source)
at java.util.zip.DeflaterOutputStream.close(Unknown Source)
at java.util.zip.ZipOutputStream.close(Unknown Source)
at com.servoy.bootstrapper.Pack200Wrapper.unpack(Pack200Wrapper.java:95)
… 4 more
trying to download again: https://172.20.1.55:8443/lib/commons-codec.jar
CacheEntry[https://172.20.1.55:8443/lib/PBKDF2.jar]: updateAvailable=false,lastModified=Wed Apr 08 23:32:58 CEST 2020,length=6048
java.util.zip.ZipException: no current ZIP entry
at java.util.zip.ZipOutputStream.write(Unknown Source)
at java.util.zip.DeflaterOutputStream.write(Unknown Source)
at java.util.zip.ZipOutputStream.writeInt(Unknown Source)
at java.util.zip.ZipOutputStream.writeLOC(Unknown Source)
at java.util.zip.ZipOutputStream.putNextEntry(Unknown Source)
at java.util.jar.JarOutputStream.putNextEntry(Unknown Source)
at com.sun.java.util.jar.pack.NativeUnpack.writeEntry(Unknown Source)
at com.sun.java.util.jar.pack.NativeUnpack.run(Unknown Source)
at com.sun.java.util.jar.pack.NativeUnpack.run(Unknown Source)
at com.sun.java.util.jar.pack.UnpackerImpl.unpack(Unknown Source)
at com.servoy.bootstrapper.Pack200Wrapper.unpack(Pack200Wrapper.java:93)
at com.servoy.bootstrapper.JarDownloader.run(JarDownloader.java:55)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Suppressed: java.util.zip.ZipException: no current ZIP entry
at java.util.zip.ZipOutputStream.write(Unknown Source)
at java.util.zip.DeflaterOutputStream.deflate(Unknown Source)
at java.util.zip.ZipOutputStream.closeEntry(Unknown Source)
at java.util.zip.ZipOutputStream.finish(Unknown Source)
at java.util.zip.DeflaterOutputStream.close(Unknown Source)
at java.util.zip.ZipOutputStream.close(Unknown Source)
at com.servoy.bootstrapper.Pack200Wrapper.unpack(Pack200Wrapper.java:95)
… 4 more
trying to download again: https://172.20.1.55:8443/lib/fs-commons.jar
CacheEntry[https://172.20.1.55:8443/lib/prompt.jar]: updateAvailable=false,lastModified=Wed Apr 08 23:33:00 CEST 2020,length=7435
CacheEntry[https://172.20.1.55:8443/lib/xstream.jar]: updateAvailable=false,lastModified=Wed Apr 08 23:32:59 CEST 2020,length=129755
java.util.zip.ZipException: no current ZIP entry

About 70 users can work normal.
Any ideas?

Now I deactivated the Option “servoy.smartclient.usepack200” and it’s running fine. Looks like a problem with that option that we used since years.

jcompagner:
that is not removed

this for example should work fine:

var bytes = utils.stringToBytes(“test string”);
var string = utils.bytesToBase64(bytes);
application.output(string)
var bytes2 = utils.base64ToBytes(string);
var string2 = utils.bytesToString(bytes);
application.output(string2)

why do you think that is removed?

My bad! I used a different installer than I thought… :?

@briese-it - the error message you are getting looks a lot like the issue described here: svyUtil 1.4.1, svyIO.zip(): java.util.zip.ZipException

thats weird, not sure why that is i think those 2 files that it complains about didn’t really change for 2020.03 (maybe other signing but we already had that new signing also for 2019.12.1)

we do check if the pack works for jars on the server side (we pack and try to unpack there also again to see if it validates)
But for some reason that i guess works (else we didn’t send the pack file) but a certain clients can’t unpack it
Maybe this is because of some differences in java version server/client (and between clients)

But Pack200 will be gone because it is already fully removed from Java14, so from that java on (server or client side) you can’t use pack200 at all anymore

Yes, that’s really weird Johan.
Signing should not be that problem because I always sign the files after updating. Furthermore the Java version was not changed after the Servoy update.
I have Pack200 deactivated and according to your information it makes no sense to activate it, since it will be removed from Java 14 anyway.

Since upgrading to 2020.03 we are getting a lot of warnings in the log similar to the following:

WARN com.servoy.j2db.util.Debug - Filter is created using a custom query without using the sql-modifier, this will be removed in a future version of servoy, please use operator 'sql:in'

I located the lines that produced this warning and changed the addTableFilter operator from ‘IN’ to ‘sql:in’ and this removed the warning. Two observations on this:

  1. There is nothing in the release notes or documentation that mentions this and certainly no mention of any “sql-modifier” in the wiki
  2. When I first tried to fix the issue I changed the operator to ‘SQL:IN’ as it had previously been ‘IN’. This failed completely. Why can I put ‘IN’ in upper or lower case and it works but as soon as I add the sql-modifier it has to be in lower case?

Have just updated to 2020.03 from 2019.12 by checking for updates and installing from there. When prompted upgraded my current workspace. After Servoy starts Solution Explorer has an error. Any ideas on how to fix this and get working again?

Could not create the view: com.servoy.eclipse.ui.views.SolutionExplorerView
java.lang.Exception
at org.eclipse.ui.internal.ViewReference.createErrorPart(ViewReference.java:114)
at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:100)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPart(CompatibilityPart.java:300)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:338)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:1002)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:967)
at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139)
at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:408)
at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:331)
at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:202)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:91)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:60)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:42)
at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:132)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:547)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:531)
at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:1002)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:662)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717)
at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1297)
at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717)
at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717)
at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:51)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717)
at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:82)
at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:105)
at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:64)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717)
at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:140)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717)
at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:665)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:768)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:739)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:733)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:717)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1086)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:660)
at org.eclipse.ui.internal.Workbench$$Lambda$130.0000000000000000.run(Unknown Source)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:559)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:154)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:594)
at org.eclipse.equinox.launcher.Main.run(Main.java:1465)

Thanks
Richard

this needs a fresh install pointing to your workspace
We already investigated this, and there is no way to recover this, somehow eclipse broke the installation when updating (it deletes a plugin that shouldn’t be deleted)"
we couldn’t also find a fix for that by making the update “better”
A installation like that would always result in a bad installation

Thanks Johan, will download and install.

Richard

With Servoy2020.03 some jar file collisions with Servoy plugins:

Google2 plugin : httpclient.jar (collision was introduced a bit longer ago), jackson-core.jar.
Servoy Jasperreports: jackson-core.jar and some jackson related jars.

Can those plugins (and maybe others?) be aligned with the shipped Servoy2020.03 jar files?

After upgrade to Servoy2020.03 (Tomcat 8.5.5) we are getting x-frame errors when running servoy-webclient at the moment we use dialog windows.
In Chrome empty screen with message: Blocked by policy for x-frame options. I think Tomcat (security) defaults have changed in 8.5.

Can that be fixed for Servoy war file deployment?