51Degrees Device Detection Java  4.1

Device detection services for 51Degrees Pipeline


This example shows how to configure a pipeline from a configuration file.

This example is available in full on GitHub.

The configuration file used here is:

1 <?xml version="1.0" encoding="utf-8" ?>
2 <PipelineOptions>
3  <Elements>
4  <Element>
5  <BuildParameters>
6  <AutoUpdate>false</AutoUpdate>
7  <CreateTempDataCopy>false</CreateTempDataCopy>
8  <DataFile>..\device-detection-cxx\device-detection-data\51Degrees-LiteV4.1.hash</DataFile>
9  <PerformanceProfile>LowMemory</PerformanceProfile>
10  </BuildParameters>
11  <BuilderName>DeviceDetectionHashEngine</BuilderName>
12  </Element>
13  <Element>
14  <BuilderName>JavaScriptBundlerElement</BuilderName>
15  </Element>
16  </Elements>
17 </PipelineOptions>
/* *********************************************************************
* This Original Work is copyright of 51 Degrees Mobile Experts Limited.
* Copyright 2019 51 Degrees Mobile Experts Limited, 5 Charlotte Close,
* Caversham, Reading, Berkshire, United Kingdom RG4 7BY.
* This Original Work is licensed under the European Union Public Licence (EUPL)
* v.1.2 and is subject to its terms as set out below.
* If a copy of the EUPL was not distributed with this file, You can obtain
* one at https://opensource.org/licenses/EUPL-1.2.
* The 'Compatible Licences' set out in the Appendix to the EUPL (as may be
* amended by the European Commission) shall be deemed incompatible for
* the purposes of the Work and the provisions of the compatibility
* clause in Article 5 of the EUPL shall not apply.
* If using the Work as, or as part of, a network application, by
* including the attribution notice(s) required under Article 5 of the EUPL
* in the end user terms of the application under an appropriate heading,
* such notice(s) shall fulfill the requirements of that article.
* ********************************************************************* */
package fiftyone.devicedetection.examples.hash;
import fiftyone.devicedetection.examples.ExampleBase;
import fiftyone.devicedetection.examples.ProgramBase;
import fiftyone.devicedetection.shared.DeviceData;
import fiftyone.pipeline.core.configuration.PipelineOptions;
import fiftyone.pipeline.core.data.FlowData;
import fiftyone.pipeline.core.flowelements.Pipeline;
import fiftyone.pipeline.engines.data.AspectPropertyValue;
import fiftyone.pipeline.engines.fiftyone.flowelements.FiftyOnePipelineBuilder;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.File;
public class ConfigureFromFile extends ProgramBase {
public static void main(String[] args) throws Exception {
new Example(true).run();
System.out.println("Complete. Press enter to exit.");
public static class Example extends ExampleBase {
private final String mobileUserAgent =
"Mozilla/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X) " +
"AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile" +
"/11D167 Safari/9537.53";
public Example(boolean printOutput) {
public void run() throws Exception {
// Create the configuration object from an XML file
File file = new File(getClass().getClassLoader().getResource("hash.xml").getFile());
JAXBContext jaxbContext = JAXBContext.newInstance(PipelineOptions.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
// Bind the configuration to a pipeline options instance
PipelineOptions options = (PipelineOptions) unmarshaller.unmarshal(file);
// Build a new Pipeline from the configuration.
Pipeline pipeline = new FiftyOnePipelineBuilder()
// Create a new FlowData instance ready to be populated with evidence for the
// Pipeline.
FlowData data = pipeline.createFlowData();
// Process a single HTTP User-Agent string to retrieve the values associated
// with the User-Agent for the selected properties.
// Extract the value of a property from the results.
AspectPropertyValue<Boolean> isMobile =
if (isMobile.hasValue()) {
println("IsMobile: " + isMobile.getValue());
} else {