Оба проекта WURFL и OpenDDR предоставляют API для доступа к DDR, чтобы упростить и продвинуть разработку веб-контента, адаптирующегося к контексту доставки.
WURFL недавно изменил свою лицензию на AGPL (Affero GPL) v3 . Это означает, что это не может свободно использовать в коммерческих целях больше. Следовательно, недавно начали появляться некоторые бесплатные альтернативы с открытым исходным кодом. OpenDDR является одним из них.
В этой статье я поделюсь своими выводами о том, как API OpenDDR Java сравнивается с WURFL.
Добавить зависимости в проект
В этом разделе описывается, как добавить WURFL и OpenDDR в проект Maven. WURFL
WURFL действительно прост, поскольку он доступен в центральном репозитории Maven. Все, что вам нужно сделать, это включить зависимость от вашего проекта:
1
2
3
4
5
|
< dependency > < groupId >net.sourceforge.wurfl</ groupId > < artifactId >wurfl</ artifactId > < version >1.2.2</ version > <!-- the last free version --> </ dependency > |
OpenDDR
С другой стороны, OpenDDR довольно сложно настроить. Выполните следующие действия, чтобы включить OpenDDR в ваш проект:
- Загрузите zip-архив OpenDDR-Simple-API .
- Разархивируйте его и создайте новый проект Java на Eclipse на основе полученной папки.
- Экспортируйте JAR-файл OpenDDR-Simple-API с помощью Eclipse
File >> Export...
, включайте только содержимое папкиsrc
исключая файлoddr.properties
. - Установите полученный JAR и
DDR-Simple-API.jar
из папкиlib
в локальный репозиторий Maven.12mvn
install
:
install
-
file
-DgroupId=org.w3c.ddr.simple -DartifactId=DDR-Simple-API -Dversion=2008-03-30 -Dpackaging=jar -Dfile=DDR-Simple-API.jar -DgeneratePom=
true
-DcreateChecksum=
true
mvn
install
:
install
-
file
-DgroupId=org.openddr.simpleapi.oddr -DartifactId=OpenDDR -Dversion=1.0.0.6 -Dpackaging=jar -Dfile=OpenDDR-1.0.0.6.jar -DgeneratePom=
true
-DcreateChecksum=
true
- Добавьте зависимости в ваш файл
pom.xml
вашего проекта:0102030405060708091011121314151617181920<
dependency
>
<
groupId
>org.w3c.ddr.simple</
groupId
>
<
artifactId
>DDR-Simple-API</
artifactId
>
<
version
>2008-03-30</
version
>
</
dependency
>
<
dependency
>
<
groupId
>org.openddr.simpleapi.oddr</
groupId
>
<
artifactId
>OpenDDR</
artifactId
>
<
version
>1.0.0.6</
version
>
</
dependency
>
<
dependency
>
<
groupId
>org.apache.commons</
groupId
>
<
artifactId
>commons-jexl</
artifactId
>
<
version
>2.1.1</
version
>
</
dependency
>
<
dependency
>
<
groupId
>commons-lang</
groupId
>
<
artifactId
>commons-lang</
artifactId
>
<
version
>2.6</
version
>
</
dependency
>
Загрузить репозиторий / файл возможностей
В этом разделе описывается, как загрузить файлы репозитория WURFL и OpenDDR и импортировать их в ваш проект. WURFL
Скопируйте wurfl-2.1.1.xml.gz
(последняя бесплатная версия) в папку src/main/resources
вашего проекта и импортируйте его, используя:
1
|
WURFLHolder wurflHolder = new CustomWURFLHolder(getClass().getResource( "/wurfl-2.1.1.xml.gz" ).toString()); |
OpenDDR
Скопируйте oddr.properties
из папки src
OpenDDR-Simple-API и всех файлов в папке resources
OpenDDR-Simple-API в папку вашего проекта src/main/resources
. Импортируйте их, используя:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
Service identificationService = null ; try { Properties initializationProperties = new Properties(); initializationProperties.load(getClass().getResourceAsStream( "/oddr.properties" )); identificationService = ServiceFactory .newService( "org.openddr.simpleapi.oddr.ODDRService" , initializationProperties.getProperty(ODDRService.ODDR_VOCABULARY_IRI), initializationProperties); } catch (IOException e) { LOGGER.error(e.getMessage(), e); } catch (InitializationException e) { LOGGER.error(e.getMessage(), e); } catch (NameException e) { LOGGER.error(e.getMessage(), e); } |
Использование API
В этом разделе описывается, как использовать API-интерфейсы Java WURFL и OpenDDR для доступа к возможностям устройства. WURFL
WURFL API очень прост в использовании и имеет большое преимущество, заключающееся в наличии резервной иерархии, определяющей возможности устройств, которые еще не включены в файл репозитория.
1
2
3
|
Device device = wurflHolder.getWURFLManager().getDeviceForRequest(getContext().getRequest()); int resolutionWidth = Integer.valueOf(device.getCapability( "resolution_width" )); int resolutionHeight = Integer.valueOf(device.getCapability( "resolution_height" )); |
Нет необходимости проверять device.getCapability("resolution_width")
по null
значению, когда данные недоступны.
OpenDDR
OpenDDR совсем наоборот. Очень громоздко и не имеет запасной иерархии, заставляя разработчика проверять каждое значение свойства.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
PropertyRef displayWidthRef; PropertyRef displayHeightRef; try { displayWidthRef = identificationService.newPropertyRef( "displayWidth" ); displayHeightRef = identificationService.newPropertyRef( "displayHeight" ); } catch (NameException ex) { throw new RuntimeException(ex); } PropertyRef[] propertyRefs = new PropertyRef[] { displayWidthRef, displayHeightRef }; Evidence e = new ODDRHTTPEvidence(); e.put( "User-Agent" , getContext().getRequest().getHeader( "User-Agent" )); int maxImageWidth = 320 ; // A default value int maxImageHeight = 480 ; // A default value try { PropertyValues propertyValues = identificationService.getPropertyValues(e, propertyRefs); PropertyValue displayWidth = propertyValues.getValue(displayWidthRef); PropertyValue displayHeight = propertyValues.getValue(displayHeightRef); if (displayWidth.exists()) { maxImageWidth = displayWidth.getInteger(); } if (displayHeight.exists()) { maxImageHeight = displayHeight.getInteger(); } } catch (Exception ex) { throw new RuntimeException(ex); } |
Полученные результаты
В следующей таблице приведены результаты тестов, выполненных для приложения для адаптации образа на стороне сервера с использованием как WURFL, так и OpenDDR.
Эти тесты проводились на реальных устройствах, а страницы обслуживались как XHTML BASIC (так же, как XHTML MP).
Платформа | устройство | Имущество | WURFL max_image_width (1) / max_image_height |
WURFL resolution_width / resolution_height |
OpenDDR displayWidth / displayHeight |
---|---|---|---|---|---|
N / A | Firefox рабочий стол | ширина | 650 | 640 | Не поддерживается |
высота | 600 | 480 | Не поддерживается | ||
IOS | Айфон 4С | ширина | 320 | 320 | 320 |
высота | 480 | 480 | 480 | ||
Android | HTC One V | ширина | 320 | 540 | Не поддерживается |
высота | 400 | 960 | Не поддерживается | ||
HTC Hero | ширина | 300 | 320 | 320 | |
высота | 460 | 480 | 480 | ||
Windows Phone 7.5 | Nokia Lumia 710 | ширина | 600 | 640 | 480 |
высота | 600 | 480 | 800 | ||
BlackBerry | BlackBerry Bold 9900 | ширина | 228 | 480 | 640 |
высота | 280 | 640 | 480 | ||
Symbian S60 | Nokia E52 (Webkit) | ширина | 234 | 240 | 240 |
высота | 280 | 320 | 320 | ||
Nokia E52 (Opera Mobile) | ширина | 240 | 240 | Не поддерживается | |
высота | 280 | 320 | Не поддерживается | ||
Windows Mobile 6.1 | HTC Touch HD T8282 | ширина | 440 | 480 | 480 |
высота | 700 | 800 | 800 |
(1) Возможность max_image_width
очень удобна:
Ширина видимой (используемой) ширины изображений, выраженная в пикселях. Эта возможность относится к изображению, когда оно используется в «мобильном режиме», т. Е. Когда страница обслуживается как XHTML MP или использует метатеги, такие как «viewport», «handheldfriendly», «mobileoptimised», чтобы отключить «веб-рендеринг» и заставить мобильный пользовательский опыт.
Примечание: цвет # 9f9 выделяет результаты, которые показали лучшие результаты. Плюсы и минусы
Pros | Cons | |
---|---|---|
WURFL |
|
|
OpenDDR |
|
|
Похожие сообщения
- Eclipse RCP для мобильных телефонов
- Тестирование Java EE 6, часть II — Введение в Arquillian и ShrinkWrap
- Тестирование Java EE 6, часть I — встраиваемый API EJB 3.1
- Полосы каркаса XSS Interceptor
- Maven 2 плагин Cobertura — Обновлено
- Предыдущая запись: Тестирование Java EE 6, Часть II — Введение в Arquillian и ShrinkWrap
Ссылка: Сравнение репозиториев описания устройств от нашего партнера JCG Самуэля Сантоса в блоге Samaxes .