wurfl
WURFL和OpenDDR项目都提供了访问DDR的API,以简化并促进适应其交付上下文的Web内容的开发。
WURFL最近将其许可证更改为AGPL(Affero GPL)v3 。 这就意味着它不再是免费的商业用途。 因此,最近开始出现了一些免费的开源替代方案。 OpenDDR就是其中之一。
在本文中,我将分享有关OpenDDR Java API与WURFL相比的发现。
向项目添加依赖项
本节介绍如何将WURFL和OpenDDR添加到Maven项目。 伍尔夫
WURFL非常简单,因为它在Maven中央存储库中可用。 您要做的就是将对项目的依赖包括在内:
<dependency><groupId>net.sourceforge.wurfl</groupId><artifactId>wurfl</artifactId><version>1.2.2</version><!-- the last free version -->
</dependency>
开放DDR
另一方面,OpenDDR很难配置。 请按照以下步骤在您的项目中包括OpenDDR:
- 下载OpenDDR-Simple-API zip 。
- 解压缩它,并根据结果文件夹在Eclipse上创建一个新的Java项目。
- 使用Eclipse
File >> Export...
导出OpenDDR-Simple-API JAR,仅包含src
文件夹中的内容,不包括oddr.properties
文件。 - 将
lib
文件夹中的结果JAR和DDR-Simple-API.jar
安装到本地Maven存储库中mvn 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
文件中:<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-2.1.1.xml.gz
文件(最新的免费版本)复制到您的项目src/main/resources
文件夹中,然后使用以下命令导入:
WURFLHolder wurflHolder = new CustomWURFLHolder(getClass().getResource("/wurfl-2.1.1.xml.gz").toString());
开放DDR
将oddr.properties
-Simple-API src
文件夹中的oddr.properties和OpenDDR-Simple-API resources
文件夹中的所有文件复制到项目src/main/resources
文件夹中。 使用以下命令导入它们:
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
本节介绍如何使用WURFL和OpenDDR Java API访问设备功能。 伍尔夫
WURFL API非常易于使用,并且具有一个后备层次结构,可以为尚未在其存储库文件中的设备提供推断功能,这是其一大优势。
Device device = wurflHolder.getWURFLManager().getDeviceForRequest(getContext().getRequest());
int resolutionWidth = Integer.valueOf(device.getCapability("resolution_width"));
int resolutionHeight = Integer.valueOf(device.getCapability("resolution_height"));
当没有可用数据时,无需针对null
值验证device.getCapability("resolution_width")
。
开放DDR
OpenDDR恰恰相反。 非常麻烦并且没有回退层次结构,这迫使开发人员验证每个属性值。
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 |
---|---|---|---|---|---|
不适用 | Firefox桌面 | 宽度 | 650 | 640 | 不支持 |
高度 | 600 | 480 | 不支持 | ||
的iOS | iPhone 4S | 宽度 | 320 | 320 | 320 |
高度 | 480 | 480 | 480 | ||
安卓系统 | HTC One V | 宽度 | 320 | 540 | 不支持 |
高度 | 400 | 960 | 不支持 | ||
HTC英雄 | 宽度 | 300 | 320 | 320 | |
高度 | 460 | 480 | 480 | ||
Windows Phone 7.5 | 诺基亚Lumia 710 | 宽度 | 600 | 640 | 480 |
高度 | 600 | 480 | 800 | ||
黑莓 | 黑莓Bold 9900 | 宽度 | 228 | 480 | 640 |
高度 | 280 | 640 | 480 | ||
塞班S60 | 诺基亚E52(Webkit) | 宽度 | 234 | 240 | 240 |
高度 | 280 | 320 | 320 | ||
诺基亚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时,或者使用诸如“视口”,“手持式”,“移动优化”之类的元标记来禁用“网页渲染”和强制移动用户体验。
注意:颜色#9f9突出显示了效果更好的结果。 利弊
优点 | 缺点 | |
---|---|---|
伍尔夫 |
|
|
开放DDR |
|
|
相关文章
- Eclipse RCP到手机
- Java EE 6测试第二部分– Arquillian和ShrinkWrap简介
- Java EE 6测试第I部分– EJB 3.1可嵌入API
- 条带框架XSS拦截器
- Maven 2 Cobertura插件–更新
- 上一篇文章:Java EE 6测试第二部分– Arquillian和ShrinkWrap简介
参考: 比较我们的JCG合作伙伴 Samuel Santos的设备描述存储库 ,位于Samaxes博客上。
翻译自: https://www.javacodegeeks.com/2012/06/comparing-openddr-to-wurfl.html
wurfl