2016-04-23 2 views
0

Когда я бегом WURFL демонстрационного приложения для Скале:Невозможно использовать WURFL с 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) 

    } 
} 

Я получаю это исключение:

[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 

"wurfl.zip" хорошо расположен под "ресурсами" , Я также попытался добавить его к основному пути классов Scala, но все равно не повезло.

+0

Luca Passani, ScientiaMobile CTO здесь. Я отправляю сообщение в инженерную команду и попрошу их посмотреть это в понедельник утром. –

+0

. Тем временем вы можете предоставить дополнительную информацию о конкретной библиотеке и версии wurfl.xml, которую используете –

+0

. Спасибо, Luca, Java ver: 1.7.1.0, Scala ver: 1.7.1.0. Когда я использую прямое имя файла, а не: classpath: /resources/wurfl.zip, похоже, работает нормально. – bashan

ответ

1

С точки зрения кода

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

правильный способ инициализировать WURFL двигатель.

Возможно, вы захотите предоставить информацию о том, как вы запускаете демонстрационную версию, если вы используете ее внутри IDE (IDEA, Eclipse или Netbeans) или с помощью командной строки или другими способами. Также может быть полезно указать, используете ли вы Maven или нет.

Если вы используете его в командной строке, укажите пример запуска приложения Scala и того, как вы устанавливаете путь к классам.

Предполагая, что сценарий, в котором вы компиляции с Maven и выполнение проекта непосредственно в целевой директории с помощью -cp классов, исполнение приведет к вашей ошибке, так как файлы путей к классам ресурсы не включены в каталоге классов.

Убедитесь, что в wurfl-scala-example-.jar включен ваш путь к классу.

Если вы используете демонстрационный проект внутри IntelliJ IDEA, убедитесь, что каталог ресурсов помечен как «ресурс», иначе инструмент запуска IDEA не будет содержать файл wurfl.zip в качестве ресурса.

Надеюсь, это поможет.

+0

Как вы заметили, использование прямого имени файла или пути также является допустимым способом инициализации WURFL. –

Смежные вопросы