26 november 2022
Handige menu’s op je Cisco bureautelefoon

Ik probeer een bijzonder oud stukje software te moderniseren: een Asterisk hulpje gebouwd in Java 1.8 met JAXB zodat de Cisco telefoon Menus werken.

van versie “antiek” naar recent

Laten we dat proberen te upgraden: JAXB is sinds Java 11 uit Java gehaald, in Java 9 deprecate. Dit was een eeuwigheid geleden. Is er een vervanger? een mooie implementatie buiten het standaard framework?

goed uitgelegd

In het bovenstaand artikel wordt goed uitgelegd hoe je toch JAXB kan gebruiken

https://eclipse-ee4j.github.io/jaxb-ri/

<!-- JAXB API v3.0.1 -->
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>3.0.1</version>
</dependency>

<!-- JAXB v3.0.2 reference implementation (curiously with com.sun coordinates) -->
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>3.0.2</version>
    <scope>runtime</scope>
</dependency>

Spring framework

Het Spring framework is van V3 vaar v5 geupdate, dit geeft geen probleem. Hier is alleen een update van de laatste stabiele versie nodig. Muchos kudos voor al die backwards compatibility!

Vervolgens is het nodig om een WAR builder aan te zetten op het project

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.3.1</version>
</plugin>

Voeg met de gcloud SDK de app engine ondersteuning toe op de mac

gcloud components install app-engine-java
Voeg een App Engine local dev server toe
gebruik de volgende path:  
/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/google_appengine/google/appengine/tools/java

Daarna voeg je een bestandje toe genaamd: appengine-web.xml in de WEB-INF folder

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <threadsafe>true</threadsafe>
  <runtime>java17</runtime>
</appengine-web-app>

Start de app engine omgeving en krijg de volgende fout

java.lang.RuntimeException: Unable to create a DevAppServer
	at com.google.appengine.tools.development.DevAppServerFactory.doCreateDevAppServer(DevAppServerFactory.java:378)
	at com.google.appengine.tools.development.DevAppServerFactory.createDevAppServer(DevAppServerFactory.java:310)
	at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:384)
	at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:58)
	at com.google.appengine.tools.development.DevAppServerMain.run(DevAppServerMain.java:258)
	at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:249)
Caused by: java.lang.ExceptionInInitializerError
	at com.google.appengine.tools.development.DevAppServerImpl.<init>(DevAppServerImpl.java:135)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	at com.google.appengine.tools.development.DevAppServerFactory.doCreateDevAppServer(DevAppServerFactory.java:363)
	... 5 more
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make static java.net.URLStreamHandler java.net.URL.getURLStreamHandler(java.lang.String) accessible: module java.base does not "opens java.net" to unnamed module @18e8568
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
	at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
	at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
	at com.google.appengine.tools.development.StreamHandlerFactory.<clinit>(StreamHandlerFactory.java:52)
	... 12 more
Disconnected from server

Process finished with exit code 1

Oorzaak: Java17, hoewel Java17 al een tijd stabiel is lijkt de combinatie van mijn (stok)oude code en App Engine dev server geen goede.

https://www.spigotmc.org/threads/inaccessibleobjectexception-unable-to-make-protected-void-java-net-urlclassloader-addurl.514803/

Bovenstaand is een oplossing voor het classloader probleem dat zich sinds java16 kan voordoen.

Als alternatief gaan we terug naar Java11, eens kijken of dat wat veranderd.

bingo! een stokoude Angular frontend die niet af is

Volgende stap: beveiliging inbouwen en deployen naar App Engine!

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.

Time limit is exhausted. Please reload the CAPTCHA.