Library org.json

Hallo zusammen,
Ich habe einen Controller geschrieben, der das Package org.json benötigt.

Wenn ich den Controller über io.openems.edge.application integrieren möchte,
bekomme ich folgende Fehlermeldung:

Resolution failed. Capabilities satisfying the following requirements could not be found:
[<>]
⇒ osgi.identity: (osgi.identity=io.openems.edge.temp)
⇒ [io.openems.edge.temp version=1.0.0.202003252043]
⇒ osgi.wiring.package: (&(osgi.wiring.package=org.json))
[org.eclipse.jetty.server version=9.4.8.v20171121]
⇒ osgi.wiring.package: (&(osgi.wiring.package=org.eclipse.jetty.http)(&(version>=9.4.8)(!(version>=9.4.9))))
[osgi.cmpn version=7.0.0.201802012110]
⇒ osgi.unresolvable: (&(must.not.resolve=)(!(must.not.resolve=)))
[osgi.cmpn version=6.0.0.201505202027]
⇒ osgi.compile.time.only: (&(must.not.resolve=)(!(must.not.resolve=)))
[org.apache.aries.jpa.container version=2.7.0]
⇒ osgi.service: (objectClass=javax.persistence.spi.PersistenceProvider)
[org.jboss.spec.javax.transaction.jboss-transaction-api_1.2_spec version=1.0.1.Final]
⇒ osgi.wiring.package: (&(osgi.wiring.package=javax.interceptor)(&(version>=1.2.0)(!>>(version>=2.0.0))))

Was ist das Problem?

Grüße

Hallo Dominik,

so wie es aussieht findet der Resolver nirgends ein Bundle, das org.json bereitstellt. Du müsstest also z. B. per maven pom.xml die Bibliothek bereitstellen.

Ich arbeite in OpenEMS durchgängig mit der Google GSON-Bibliothek und habe auch einige Helper-Utilities dafür umgesetzt. Diese befinden sich in der JsonUtils-Klasse in io.openems.common - vielleicht kannst du die ja stattdessen verwenden?

Gruß,
Stefan

Hallo Stefan,

Ich habe bereits 3 Controller mithilfe der org.json Bibliothek geschrieben, würde das also ungerne ändern.

Ich habe bereits in das pom.xml File folgendes eingetragen:

org.json
json
20080701

Hat aber nichts verändert.

Ich habe bisher eine veraltete Version von OpenEms benutzt ( Stand 20.04.2019) bei der die Benutzung der Bibliothek problemlos funktioniert hat

Grüße,
Dominik

Dann weiß ich leider erstmal auch nicht weiter. Ist der Quellcode irgendwo offen einsehbar?

Ich habe nun die neueste Version der org.json Bibliothek heruntergeladen und direkt mit dem erwünschten Bundle verknüpft.

Daraufhin habe ich folgende Zeile in den Source Code von EdgeBnd.run eingetragen:

json;version=’[20190722.0.0,20190722.0.1)’,\

Jetzt funktioniert soweit alles.

Danke für die Denkanstöße!

Grüße,
Dominik

Ok - gerne. Freu mich, dass es jetzt klappt.

Ich empfehle trotzdem allen anderen, die hier mitlesen, es erstmal mit Google Gson und den OpenEMS JsonUtils zu versuchen. Der Vorteil ist, dass diese im Fehlerfall schöne OpenemsExceptions werfen, was sich sehr gut in die gesamte Fehlerbehandlung integrieren lässt.