Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update fmi4j and replace use of JAXB #124

Merged
merged 2 commits into from
Nov 8, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/gradle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ jobs:
steps:
- uses: actions/checkout@v2

- name: Set up JDK 8
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 1.8
java-version: 11

- uses: actions/cache@v2
with:
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ println "Gradle version is ${gradle.getGradleVersion()}"

ext.slf4j_version = '1.7.25'
ext.picocli_version = '4.5.0'
ext.fmi4j_version = '0.33.4'
ext.fmi4j_version = '0.34.0'

wrapper {
distributionType = Wrapper.DistributionType.ALL
Expand Down
1 change: 1 addition & 0 deletions fmu-wrapper/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ dependencies {
implementation project(":rpc-gen")
implementation "no.ntnu.ihb.fmi4j:fmi-md:$fmi4j_version"
implementation "no.ntnu.ihb.fmi4j:fmi-export:$fmi4j_version"
implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.11.3"

def slf4j_version = '1.7.25'
implementation group: 'org.slf4j', name: 'slf4j-api', version: slf4j_version
Expand Down
12 changes: 7 additions & 5 deletions fmu-wrapper/src/main/kotlin/no/ntnu/ihb/fmuproxy/FmuWrapper.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package no.ntnu.ihb.fmuproxy

import com.fasterxml.jackson.dataformat.xml.XmlMapper
import no.ntnu.ihb.fmi4j.export.fmi2.Fmi2Slave
import no.ntnu.ihb.fmi4j.modeldescription.fmi1.FmiModelDescription
import no.ntnu.ihb.fmi4j.modeldescription.fmi2.Fmi2ModelDescription
import no.ntnu.ihb.fmi4j.modeldescription.util.FmiModelDescriptionUtil
import no.ntnu.ihb.fmuproxy.misc.*
import no.ntnu.ihb.fmuproxy.thrift.ModelDescription
import no.ntnu.ihb.fmuproxy.thrift.internal.InternalFmuService
Expand All @@ -11,7 +13,6 @@ import org.apache.thrift.transport.TFramedTransport
import org.apache.thrift.transport.TSocket
import java.io.*
import java.util.concurrent.TimeUnit
import javax.xml.bind.JAXB


class FmuWrapper(
Expand Down Expand Up @@ -107,10 +108,11 @@ class FmuWrapper(

override fun registerVariables() {

val xml = extractModelDescriptionXml(FileInputStream(fmu))
when (val version = extractFmiVersion(xml)) {
"1.0" -> processFmi1ModelDescription(JAXB.unmarshal(StringReader(xml), FmiModelDescription::class.java))
"2.0" -> processFmi2ModelDescription(JAXB.unmarshal(StringReader(xml), Fmi2ModelDescription::class.java))
val mapper = XmlMapper()
val xml = FmiModelDescriptionUtil.extractModelDescriptionXml(FileInputStream(fmu))
when (val version = FmiModelDescriptionUtil.extractVersion(xml)) {
"1.0" -> processFmi1ModelDescription(mapper.readValue(xml, FmiModelDescription::class.java))
"2.0" -> processFmi2ModelDescription(mapper.readValue(xml, Fmi2ModelDescription::class.java))
else -> throw IllegalArgumentException("Unknown FMI version: $version")
}

Expand Down

This file was deleted.

25 changes: 0 additions & 25 deletions fmu-wrapper/src/main/kotlin/no/ntnu/ihb/fmuproxy/misc/helpers.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package no.ntnu.ihb.fmuproxy.misc

import no.ntnu.ihb.fmi4j.modeldescription.fmi1.FmiCausality
import no.ntnu.ihb.fmi4j.modeldescription.fmi1.FmiModelDescription
import no.ntnu.ihb.fmi4j.modeldescription.fmi1.FmiScalarVariable
import no.ntnu.ihb.fmi4j.modeldescription.fmi1.FmiVariability
import no.ntnu.ihb.fmi4j.modeldescription.fmi2.Fmi2Causality
import no.ntnu.ihb.fmi4j.modeldescription.fmi2.Fmi2ModelDescription
Expand All @@ -13,13 +12,8 @@ import org.apache.thrift.transport.TFramedTransport
import org.apache.thrift.transport.TSocket
import java.io.File
import java.io.FileInputStream
import java.io.InputStream
import java.io.StringReader
import java.net.ServerSocket
import java.nio.ByteBuffer
import java.util.zip.ZipEntry
import java.util.zip.ZipInputStream
import javax.xml.bind.JAXB
import kotlin.concurrent.thread

internal fun String.isLoopback(): Boolean {
Expand Down Expand Up @@ -80,25 +74,6 @@ internal fun startLocalProxy(proxyFile: File, fmuFile: File): Pair<Process, Int>
return process to port
}

internal fun extractModelDescriptionXml(stream: InputStream): String {
val xmlFile = "modelDescription.xml"
ZipInputStream(stream).use { zis ->
var nextEntry: ZipEntry? = zis.nextEntry
while (nextEntry != null) {
if (nextEntry.name == xmlFile) {
return zis.bufferedReader().use { it.readText() }
}
nextEntry = zis.nextEntry
}
}
throw IllegalArgumentException("Input is not an valid FMU! No $xmlFile present!")
}


internal fun extractFmiVersion(xml: String): String {
return JAXB.unmarshal(StringReader(xml), MockupModelDescription::class.java).fmiVersion
}

internal fun parseSettings(settings: File): ProxySettings {
require(settings.exists()) { "No such file: $settings" }
return parseSettings(settings.readText())
Expand Down