2016-04-23 6 views
0

zu verwenden, wenn ich WURFL Demo-Anwendung für scala laufen:Unable WURFL mit Scala

object Demo { 

    def main(args: Array[String]) { 

    // Create WURFL passing a GeneralWURFLEngine object with a wurfl xml 
    val wurflWrapper = new Wurfl(new GeneralWURFLEngine("classpath:/resources/wurfl.zip")) 

    // Set cache provider 
    wurflWrapper.setCacheProvider(new LRUMapCacheProvider) 

    // Set Performance/Accuracy Mode 
    wurflWrapper.setTargetAccuracy 

    // Set Capability Filter 
    wurflWrapper.setFilter(
     "can_assign_phone_number", 
     "marketing_name", 
     "brand_name", 
     "model_name", 
     "is_smarttv", 
     "is_wireless_device", 
     "device_os", 
     "device_os_version", 
     "is_tablet", 
     "ux_full_desktop", 
     "pointing_method", 
     "preferred_markup", 
     "resolution_height", 
     "resolution_width", 
     "xhtml_support_level") 

    // User-Agent here 
    var userAgent = "" 

    // Defining headers 
    var headers = Map("Accept-Datetime"->"Thu, 31 May 2007 20:35:00 GMT") 
    headers += ("Content-Type"-> "application/x-www-form-urlencoded") 

    var device = wurflWrapper.deviceForHeaders(userAgent, headers) 

    val matchType = device.matchType 
    if (matchType == MatchType.conclusive) 
    { 
     println("Match Type is conclusive") 
    } 

    val wireless = device.capability("is_wireless_device") 
    println("Is wireless: " + wireless) 

    } 
} 

Ich erhalte diese Ausnahme:

[main] ERROR net.sourceforge.wurfl.core.GeneralWURFLEngine - cannot initialize: java.lang.NullPointerException: in is null 
java.lang.NullPointerException: in is null 
    at java.util.zip.ZipInputStream.<init>(ZipInputStream.java:101) 
    at java.util.zip.ZipInputStream.<init>(ZipInputStream.java:80) 
    at net.sourceforge.wurfl.core.resource.FileLoader.fromZipFile(FileLoader.java:248) 
    at net.sourceforge.wurfl.core.resource.FileLoader.openInputStream(FileLoader.java:230) 
    at net.sourceforge.wurfl.core.resource.FileLoader.getStream(FileLoader.java:288) 
    at net.sourceforge.wurfl.core.resource.XMLResource.getData(XMLResource.java:163) 
    at net.sourceforge.wurfl.core.resource.DefaultWURFLModel.init(DefaultWURFLModel.java:115) 
    at net.sourceforge.wurfl.core.resource.DefaultWURFLModel.<init>(DefaultWURFLModel.java:107) 
    at net.sourceforge.wurfl.core.GeneralWURFLEngine.init(GeneralWURFLEngine.java:340) 
    at net.sourceforge.wurfl.core.GeneralWURFLEngine.initIfNeeded(GeneralWURFLEngine.java:319) 
    at net.sourceforge.wurfl.core.GeneralWURFLEngine.getDeviceForRequest(GeneralWURFLEngine.java:451) 
    at com.scientiamobile.wurfl.Wurfl.deviceForHeaders(Wurfl.scala:77) 
    at com.Demo$.main(Demo.scala:49) 
    at com.Demo.main(Demo.scala) 
Exception in thread "main" net.sourceforge.wurfl.core.exc.WURFLRuntimeException: WURFL unexpected exception 
    at net.sourceforge.wurfl.core.GeneralWURFLEngine.initIfNeeded(GeneralWURFLEngine.java:322) 
    at net.sourceforge.wurfl.core.GeneralWURFLEngine.getDeviceForRequest(GeneralWURFLEngine.java:451) 
    at com.scientiamobile.wurfl.Wurfl.deviceForHeaders(Wurfl.scala:77) 
    at com.Demo$.main(Demo.scala:49) 
    at com.Demo.main(Demo.scala) 
Caused by: java.lang.NullPointerException: in is null 
    at java.util.zip.ZipInputStream.<init>(ZipInputStream.java:101) 
    at java.util.zip.ZipInputStream.<init>(ZipInputStream.java:80) 
    at net.sourceforge.wurfl.core.resource.FileLoader.fromZipFile(FileLoader.java:248) 
    at net.sourceforge.wurfl.core.resource.FileLoader.openInputStream(FileLoader.java:230) 
    at net.sourceforge.wurfl.core.resource.FileLoader.getStream(FileLoader.java:288) 
    at net.sourceforge.wurfl.core.resource.XMLResource.getData(XMLResource.java:163) 
    at net.sourceforge.wurfl.core.resource.DefaultWURFLModel.init(DefaultWURFLModel.java:115) 
    at net.sourceforge.wurfl.core.resource.DefaultWURFLModel.<init>(DefaultWURFLModel.java:107) 
    at net.sourceforge.wurfl.core.GeneralWURFLEngine.init(GeneralWURFLEngine.java:340) 
    at net.sourceforge.wurfl.core.GeneralWURFLEngine.initIfNeeded(GeneralWURFLEngine.java:319) 
    ... 4 more 

Die "wurfl.zip" ist gut gelegen unter "Ressourcen" . Ich habe auch versucht, es zu Haupt Scala Klassen Pfad hinzuzufügen, aber immer noch nicht Glück.

+0

Luca Passani, Scientia- Mobile CTO hier. Ich sende jetzt eine Nachricht an das Engineering-Team und bitte sie, sich dies am Montagmorgen anzusehen. –

+0

In der Zwischenzeit möchten Sie vielleicht mehr Informationen über die genaue Bibliothek und die Version von wurfl.xml, die Sie verwenden, geben –

+0

Danke Luca, Java ver: 1.7.1.0, Scala ver: 1.7.1.0. Wenn ich den direkten Dateinamen anstelle von: classpath: /resources/wurfl.zip verwende, scheint es gut zu funktionieren. – bashan

Antwort

1

Aus Code Perspektive

val wurflWrapper = new Wurfl(new GeneralWURFLEngine("classpath:/resources/wurfl.zip"))

ist eine richtige Art und Weise Ihres WURFL Motor zu initialisieren.

Sie können Informationen zur Ausführung der Demo bereitstellen, wenn Sie sie in einer IDE (IDEA, Eclipse oder Netbeans) oder über die Befehlszeile oder auf andere Weise ausführen. Es kann auch nützlich sein zu sagen, ob Sie Maven verwenden oder nicht.

Falls Sie es über die Befehlszeile ausführen, geben Sie bitte ein Beispiel dafür, wie Sie die Scala-App starten und wie Sie den Klassenpfad einstellen.

Unter der Annahme, ein Szenario, in dem Sie mit Maven kompilieren und die Projektdurchführung direkt in den Ziel dir mit -cp Klassen, wird die Ausführung in Ihrem Classpath Fehler führen, da Ressourcendateien im Verzeichnis classes nicht enthalten sind.

Stellen Sie sicher, dass wurfl-scala-example-.jar in Ihrem Klassenpfad enthalten ist.

Wenn Sie das Demo-Projekt in IntelliJ IDEA verwenden, stellen Sie bitte sicher, dass das Ressourcenverzeichnis als "Ressource" markiert ist, da das IDEA-Ausführungstool sonst die Datei wurfl.zip nicht als Ressource enthält.

Hoffe, das hilft.

+0

Wie Sie bemerkt haben, ist die direkte Verwendung des Dateinamens oder Pfades auch eine gültige Methode, WURFL zu initialisieren. –