0

When I run WURFL demo app for 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)

  }
}

I get this exception:

[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

The "wurfl.zip" is well located under "resources". I also tried adding it to main Scala classes path, but still not luck.

bashan
  • 3,572
  • 6
  • 41
  • 58
  • Luca Passani, ScientiaMobile CTO here. I'm sending a msg to the engineering team now and ask them to look at this on Monday morning – Luca P. Apr 24 '16 at 01:15
  • In the meantime, you may want to provide more info about the exact library and wurfl.xml version you are using – Luca P. Apr 24 '16 at 01:19
  • Thanks Luca, Java ver: 1.7.1.0, Scala ver: 1.7.1.0. When I use the direct file name instead of: classpath:/resources/wurfl.zip it seems to be working fine. – bashan Apr 24 '16 at 10:14

1 Answers1

1

From a code perspective

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

is a proper way to initialize your WURFL engine.

You may want to provide information about how you're running the demo, if you are running it inside an IDE (IDEA, Eclipse or Netbeans), or using command line, or other ways. It can also be useful to tell whether you're using Maven or not.

In case you are running it using command line, please provide a sample of how you launch the Scala app and how you set the classpath.

Assuming a scenario where you are compiling with maven and executing the project directly into the target dir using -cp classes, execution will result in your classpath error because resource files are not included in the classes directory.

Make sure that wurfl-scala-example-.jar is included your classpath.

If you are using the Demo project inside IntelliJ IDEA, please make sure that the resource directory is marked as "resource", otherwise IDEA run tool will not include the wurfl.zip file as a resource.

Hope this helps.

Andrea Castello
  • 117
  • 1
  • 10