Giter VIP home page Giter VIP logo

cleeng-java-sdk's Introduction

Cleeng

Cleeng Java SDK

Build Status Coverage Status

Full Java SDK you can find here: https://github.com/Cleeng/cleeng-java-sdk/

SDK Configuration

You can configure the SDK with CleengBuilder class by either providing the path to config.properties file or by using setters related to configuration properties. Below is the default config file with configuration properties:

socketTimeout=3000
connectTimeout=400
requestTimeout=3000
retryCount=10
useNonBlockingMode=true
platformUrl=https://cleeng.com/api/3.0/json-rpc
platformUrlSandbox=https://sandbox.cleeng.com/api/3.0/json-rpc

socketTimeout

Defines the socket timeout in milliseconds, which is the timeout for waiting for data or, put differently, a maximum period inactivity between two consecutive data packets). This configuration setting only applies to synchronous method calls.

connectTimeout

Determines the timeout in milliseconds until a connection is established. This configuration setting applies to both synchronous and asynchronous method calls.

requestTimeout

Determines the maximum time in millisecond the callback waits until the response is completed. This configuration setting only applies to asynchronous method calls.

retryCount

Determines the number of time the library will retry when an exception is throw by the remote http server. This configuration setting applies to both synchronous and asynchronous method calls.

useNonBlockingMode

Determines whether to block the code execution until request completes. This setting only applies to asynchronous methods, as synchronous ones are blocking only.

platformUrl

Determines the URL of the production platform.

platformUrlSandbox

Determines the URL of the sandbox platform.


Logging

Cleeng Java SDK depends on Log4J in order to provide logging capability. It is configured to log events to both the system console and cleeng.log file, which can be found in a folder containing the SDK build. Log4J configuration for the SDK can be found in 'src/main/resources'. Feel free to remove <AppenderRef ref="File"/> elements in order to stop logging to a file.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
        <Property name="filename">target/cleeng.log</Property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <File name="File" fileName="${filename}">
            <PatternLayout>
                <pattern>%d %p %C{1.} [%t] %m%n</pattern>
            </PatternLayout>
        </File>
    </Appenders>
    <Loggers>
        <Root level="error">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
        </Root>
        <Root level="warn">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
        </Root>
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
        </Root>
    </Loggers>
</Configuration>

Example usage with synchronous/blocking method call

// Initialize API with the config.properties path. As an example, the code below overrides the retry count and connect timeout settings.
    Cleeng api = return new CleengBuilder("IEiuf3fJzAorVvxgBYiHiHXGk8oFPckTMSOn8hS1--lOti30")
        .setPropertiesPath("src/main/resources/config.properties")
        .setConnectTimeout(200)
  		.setRetryCount(20)
        .build();

// Construct the request payload
    final SubscriptionOfferData offerData = new SubscriptionOfferData(12.34,
		"week",
		"title",
		"http://www.someurl.com",
		"description",
		null,
		0,
		9,
		Arrays.asList("Sport"),
		true,
		"whitelist",
		Arrays.asList("PL", "DE")
    );

// Exectute a synchronous, blocking http call
	final OfferResponse response = this.api.createSubscriptionOffer(offerData);

Example usage with asynchronous/non blocking method call

// Initialize API
    Cleeng api = return new CleengBuilder("IEiuf3fJzAorVvxgBYiHiHXGk8oFPckTMSOn8hS1--lOti30")
        .setPropertiesPath("src/main/resources/config.properties")
        .build();

// Construct the request payload
    final SubscriptionOfferData offerData = new SubscriptionOfferData(12.34,
		"week",
		"title",
		"http://www.someurl.com",
		"description",
		null,
		0,
		9,
		Arrays.asList("Sport"),
		true,
		"whitelist",
		Arrays.asList("PL", "DE")
    );

// Declare the callback, use it to construct the AsyncRequest
    final AsyncRequestCallback<OfferResponse> callback = new AsyncRequestCallback<OfferResponse>(OfferResponse.class);
    final List<AsyncRequest> requests = new ArrayList<AsyncRequest>();
    requests.add(new AsyncRequest(offerData, callback));

// Exectute an asynchronous, non blocking http call
    this.api.createSubscriptionOfferAsync(requests);

Example asynchronous/non blocking batch request usage

// Initialize API
    Cleeng api = return new CleengBuilder("IEiuf3fJzAorVvxgBYiHiHXGk8oFPckTMSOn8hS1--lOti30")
        .setPropertiesPath("src/main/resources/config.properties")
        .build();

// Construct request payload
	SubscriptionOfferData offerData = new SubscriptionOfferData(12.34,
			"week",
			"title",
			"http://www.someurl.com",
			"description",
			null,
			0,
			9,
			Arrays.asList("Sport"),
			true,
			"whitelist",
			Arrays.asList("PL", "DE")
	);

// Create requests
	OfferRequest createOffer = new OfferRequest("createSubscriptionOffer", OfferParams.create(publisherToken, offerData));
	ListRequest listOffers = new ListRequest("listSubscriptionOffers", ListParams.create(publisherToken, new Criteria(true), 0, 10));

// Construct batch
	BatchAsyncRequest batch = new BatchAsyncRequest();

// Insert requests to batch
	batch.addRequest(createOffer);
	batch.addRequest(listOffers);

// Exectute an asynchronous, non blocking batch call.
	api.invokeBatchAsync(batch);

// Once batch request completes, BatchResponse is available through getResponse() method call.
	TimeUnit.SECONDS.sleep(4);
	BatchResponse response = batch.getResponse();

Example synchronous/blocking batch request usage

// Initialize API
    Cleeng api = return new CleengBuilder("IEiuf3fJzAorVvxgBYiHiHXGk8oFPckTMSOn8hS1--lOti30")
        .setPropertiesPath("src/main/resources/config.properties")
        .build();

// Construct request payload
	SubscriptionOfferData offerData = new SubscriptionOfferData(12.34,
			"week",
			"title",
			"http://www.someurl.com",
			"description",
			null,
			0,
			9,
			Arrays.asList("Sport"),
			true,
			"whitelist",
			Arrays.asList("PL", "DE")
	);

// Create requests
	OfferRequest createOffer = new OfferRequest("createSubscriptionOffer", OfferParams.create(publisherToken, offerData));
	ListRequest listOffers = new ListRequest("listSubscriptionOffers", ListParams.create(publisherToken, new Criteria(true), 0, 10));

// Construct batch
	BatchRequest batch = new BatchRequest();

// Insert requests to batch
	batch.addRequest(createOffer);
	batch.addRequest(listOffers);

// Exectute an synchronous/blocking batch call.
	BatchResponse = api.invokeBatch(batch);

Notes

The Cleeng Java SDK is accompanied by the strong battery of unit tests. See src/test/java/com/cleeng/api/CleengImplTest.java for detailed information on how to construct request payloads and invoke specific methods. See API Reference for details on the Cleeng API.

All functions in the API documentation have been implemented as public methods on a class implementing Cleeng interface.

There are two basic kinds of these methods, synchronous ones and their asynchronous sibilings that can be recognized by the 'async' suffix in the method name.

There is also a way to send a collection of different requests in one batch through either 'invokeBatchAsync' or 'invokeBatch' methods. Please see "Example asynchronous/non blocking batch request usage" and "Example synchronous/blocking batch request usage" sections above.

Instead of duplicating all class & type information once more in this file, please refer to the file src/main/java/com/cleeng/api/Cleeng.java for the method signatures, and to src/main/java/com/cleeng/api/domain/*.java for the classes used for parameters and return values. The names map directly to the documentation available at API Reference.

Note that most error conditions raise exceptions which have to be handled properly by you, the programmer.

Building the SDK

The Cleeng Java SDK can be built from the source code with Maven. In order to make a clean build, execute mvn clean install command. This command will download all required dependencies, compile the SDK, package it to cleeng-java-sdk-{version}-jar-with-dependencies.jar file and place it in your local Maven repository ($HOME/.m2/ by default).

There are a few example Java programs in the jar file, that you can run as follows:

java -cp path/to/cleeng-java-sdk-{version}-jar-with-dependencies.jar com/cleeng/api/examples/CleengJavaAPIExample

java -cp path/to/cleeng-java-sdk-{version}-jar-with-dependencies.jar com/cleeng/api/examples/CleengJavaAPIExampleAsync

java -cp path/to/cleeng-java-sdk-{version}-jar-with-dependencies.jar com/cleeng/api/examples/CleengJavaAPIBatchExample

java -cp path/to/cleeng-java-sdk-{version}-jar-with-dependencies.jar com/cleeng/api/examples/CleengJavaAPIBatchExampleAsync

cleeng-java-sdk's People

Contributors

jesion avatar krzysztof-padol avatar mtymek avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.