Оба проекта 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.12mvninstall: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=truemvninstall: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 valueint maxImageHeight = 480; // A default valuetry { 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 .