All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.amazonaws.services.iotdata.AWSIotDataClient Maven / Gradle / Ivy

Go to download

The AWS Java SDK for AWS Iot Service module holds the client classes that are used for communicating with AWS IoT Service

There is a newer version: 1.11.9
Show newest version
/*
 * Copyright 2010-2016 Amazon.com, Inc. or its affiliates. All Rights
 * Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
package com.amazonaws.services.iotdata;

import org.w3c.dom.*;

import java.net.*;
import java.util.*;
import java.util.Map.Entry;

import org.apache.commons.logging.*;

import com.amazonaws.*;
import com.amazonaws.auth.*;
import com.amazonaws.handlers.*;
import com.amazonaws.http.*;
import com.amazonaws.internal.*;
import com.amazonaws.metrics.*;
import com.amazonaws.regions.*;
import com.amazonaws.transform.*;
import com.amazonaws.util.*;
import com.amazonaws.protocol.json.*;
import com.amazonaws.util.AWSRequestMetrics.Field;
import com.amazonaws.annotation.ThreadSafe;

import com.amazonaws.services.iotdata.model.*;
import com.amazonaws.services.iotdata.model.transform.*;

/**
 * Client for accessing AWS IoT Data Plane. All service calls made using this
 * client are blocking, and will not return until the service call completes.
 * 

* AWS IoT *

* AWS IoT-Data enables secure, bi-directional communication between * Internet-connected things (such as sensors, actuators, embedded devices, or * smart appliances) and the AWS cloud. It implements a broker for applications * and things to publish messages over HTTP (Publish) and retrieve, update, and * delete thing shadows. A thing shadow is a persistent representation of your * things and their state in the AWS cloud. *

*/ @ThreadSafe public class AWSIotDataClient extends AmazonWebServiceClient implements AWSIotData { /** Provider for AWS credentials. */ private AWSCredentialsProvider awsCredentialsProvider; private static final Log log = LogFactory.getLog(AWSIotData.class); /** Default signing name for the service. */ private static final String DEFAULT_SIGNING_NAME = "iotdata"; /** The region metadata service name for computing region endpoints. */ private static final String DEFAULT_ENDPOINT_PREFIX = "data.iot"; /** * Client configuration factory providing ClientConfigurations tailored to * this client */ protected static final ClientConfigurationFactory configFactory = new ClientConfigurationFactory(); private final SdkJsonProtocolFactory protocolFactory = new SdkJsonProtocolFactory( new JsonClientMetadata() .withProtocolVersion("1.1") .withSupportsCbor(false) .addErrorMetadata( new JsonErrorShapeMetadata() .withErrorCode("UnauthorizedException") .withModeledClass( com.amazonaws.services.iotdata.model.UnauthorizedException.class)) .addErrorMetadata( new JsonErrorShapeMetadata() .withErrorCode("MethodNotAllowedException") .withModeledClass( com.amazonaws.services.iotdata.model.MethodNotAllowedException.class)) .addErrorMetadata( new JsonErrorShapeMetadata() .withErrorCode("ConflictException") .withModeledClass( com.amazonaws.services.iotdata.model.ConflictException.class)) .addErrorMetadata( new JsonErrorShapeMetadata() .withErrorCode( "RequestEntityTooLargeException") .withModeledClass( com.amazonaws.services.iotdata.model.RequestEntityTooLargeException.class)) .addErrorMetadata( new JsonErrorShapeMetadata() .withErrorCode( "UnsupportedDocumentEncodingException") .withModeledClass( com.amazonaws.services.iotdata.model.UnsupportedDocumentEncodingException.class)) .addErrorMetadata( new JsonErrorShapeMetadata() .withErrorCode("ThrottlingException") .withModeledClass( com.amazonaws.services.iotdata.model.ThrottlingException.class)) .addErrorMetadata( new JsonErrorShapeMetadata() .withErrorCode( "ServiceUnavailableException") .withModeledClass( com.amazonaws.services.iotdata.model.ServiceUnavailableException.class)) .addErrorMetadata( new JsonErrorShapeMetadata() .withErrorCode("ResourceNotFoundException") .withModeledClass( com.amazonaws.services.iotdata.model.ResourceNotFoundException.class)) .addErrorMetadata( new JsonErrorShapeMetadata() .withErrorCode("InternalFailureException") .withModeledClass( com.amazonaws.services.iotdata.model.InternalFailureException.class)) .addErrorMetadata( new JsonErrorShapeMetadata() .withErrorCode("InvalidRequestException") .withModeledClass( com.amazonaws.services.iotdata.model.InvalidRequestException.class))); /** * Constructs a new client to invoke service methods on AWS IoT Data Plane. * A credentials provider chain will be used that searches for credentials * in this order: *
    *
  • Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_KEY
  • *
  • Java System Properties - aws.accessKeyId and aws.secretKey
  • *
  • Instance profile credentials delivered through the Amazon EC2 * metadata service
  • *
* *

* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @see DefaultAWSCredentialsProviderChain */ public AWSIotDataClient() { this(new DefaultAWSCredentialsProviderChain(), configFactory .getConfig()); } /** * Constructs a new client to invoke service methods on AWS IoT Data Plane. * A credentials provider chain will be used that searches for credentials * in this order: *

    *
  • Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_KEY
  • *
  • Java System Properties - aws.accessKeyId and aws.secretKey
  • *
  • Instance profile credentials delivered through the Amazon EC2 * metadata service
  • *
* *

* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param clientConfiguration * The client configuration options controlling how this client * connects to AWS IoT Data Plane (ex: proxy settings, retry counts, * etc.). * * @see DefaultAWSCredentialsProviderChain */ public AWSIotDataClient(ClientConfiguration clientConfiguration) { this(new DefaultAWSCredentialsProviderChain(), clientConfiguration); } /** * Constructs a new client to invoke service methods on AWS IoT Data Plane * using the specified AWS account credentials. * *

* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentials * The AWS credentials (access key ID and secret key) to use when * authenticating with AWS services. */ public AWSIotDataClient(AWSCredentials awsCredentials) { this(awsCredentials, configFactory.getConfig()); } /** * Constructs a new client to invoke service methods on AWS IoT Data Plane * using the specified AWS account credentials and client configuration * options. * *

* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentials * The AWS credentials (access key ID and secret key) to use when * authenticating with AWS services. * @param clientConfiguration * The client configuration options controlling how this client * connects to AWS IoT Data Plane (ex: proxy settings, retry counts, * etc.). */ public AWSIotDataClient(AWSCredentials awsCredentials, ClientConfiguration clientConfiguration) { super(clientConfiguration); this.awsCredentialsProvider = new StaticCredentialsProvider( awsCredentials); init(); } /** * Constructs a new client to invoke service methods on AWS IoT Data Plane * using the specified AWS account credentials provider. * *

* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentialsProvider * The AWS credentials provider which will provide credentials to * authenticate requests with AWS services. */ public AWSIotDataClient(AWSCredentialsProvider awsCredentialsProvider) { this(awsCredentialsProvider, configFactory.getConfig()); } /** * Constructs a new client to invoke service methods on AWS IoT Data Plane * using the specified AWS account credentials provider and client * configuration options. * *

* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentialsProvider * The AWS credentials provider which will provide credentials to * authenticate requests with AWS services. * @param clientConfiguration * The client configuration options controlling how this client * connects to AWS IoT Data Plane (ex: proxy settings, retry counts, * etc.). */ public AWSIotDataClient(AWSCredentialsProvider awsCredentialsProvider, ClientConfiguration clientConfiguration) { this(awsCredentialsProvider, clientConfiguration, null); } /** * Constructs a new client to invoke service methods on AWS IoT Data Plane * using the specified AWS account credentials provider, client * configuration options, and request metric collector. * *

* All service calls made using this new client object are blocking, and * will not return until the service call completes. * * @param awsCredentialsProvider * The AWS credentials provider which will provide credentials to * authenticate requests with AWS services. * @param clientConfiguration * The client configuration options controlling how this client * connects to AWS IoT Data Plane (ex: proxy settings, retry counts, * etc.). * @param requestMetricCollector * optional request metric collector */ public AWSIotDataClient(AWSCredentialsProvider awsCredentialsProvider, ClientConfiguration clientConfiguration, RequestMetricCollector requestMetricCollector) { super(clientConfiguration, requestMetricCollector); this.awsCredentialsProvider = awsCredentialsProvider; init(); } private void init() { setServiceNameIntern(DEFAULT_SIGNING_NAME); setEndpointPrefix(DEFAULT_ENDPOINT_PREFIX); // calling this.setEndPoint(...) will also modify the signer accordingly setEndpoint("https://data.iot.us-east-1.amazonaws.com"); HandlerChainFactory chainFactory = new HandlerChainFactory(); requestHandler2s .addAll(chainFactory .newRequestHandlerChain("/com/amazonaws/services/iotdata/request.handlers")); requestHandler2s .addAll(chainFactory .newRequestHandler2Chain("/com/amazonaws/services/iotdata/request.handler2s")); } /** *

* Deletes the thing shadow for the specified thing. *

*

* For more information, see DeleteThingShadow in the AWS IoT Developer Guide. *

* * @param deleteThingShadowRequest * The input for the DeleteThingShadow operation. * @return Result of the DeleteThingShadow operation returned by the * service. * @throws ResourceNotFoundException * The specified resource does not exist. * @throws InvalidRequestException * The request is not valid. * @throws ThrottlingException * The rate exceeds the limit. * @throws UnauthorizedException * You are not authorized to perform this operation. * @throws ServiceUnavailableException * The service is temporarily unavailable. * @throws InternalFailureException * An unexpected error has occurred. * @throws MethodNotAllowedException * The specified combination of HTTP verb and URI is not supported. * @throws UnsupportedDocumentEncodingException * The document encoding is not supported. * @sample AWSIotData.DeleteThingShadow */ @Override public DeleteThingShadowResult deleteThingShadow( DeleteThingShadowRequest deleteThingShadowRequest) { ExecutionContext executionContext = createExecutionContext(deleteThingShadowRequest); AWSRequestMetrics awsRequestMetrics = executionContext .getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new DeleteThingShadowRequestMarshaller( protocolFactory).marshall(super .beforeMarshalling(deleteThingShadowRequest)); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } HttpResponseHandler> responseHandler = protocolFactory .createResponseHandler(new JsonOperationMetadata() .withPayloadJson(false) .withHasStreamingSuccessResponse(false), new DeleteThingShadowResultJsonUnmarshaller()); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { endClientExecution(awsRequestMetrics, request, response); } } /** *

* Gets the thing shadow for the specified thing. *

*

* For more information, see GetThingShadow in the AWS IoT Developer Guide. *

* * @param getThingShadowRequest * The input for the GetThingShadow operation. * @return Result of the GetThingShadow operation returned by the service. * @throws InvalidRequestException * The request is not valid. * @throws ResourceNotFoundException * The specified resource does not exist. * @throws ThrottlingException * The rate exceeds the limit. * @throws UnauthorizedException * You are not authorized to perform this operation. * @throws ServiceUnavailableException * The service is temporarily unavailable. * @throws InternalFailureException * An unexpected error has occurred. * @throws MethodNotAllowedException * The specified combination of HTTP verb and URI is not supported. * @throws UnsupportedDocumentEncodingException * The document encoding is not supported. * @sample AWSIotData.GetThingShadow */ @Override public GetThingShadowResult getThingShadow( GetThingShadowRequest getThingShadowRequest) { ExecutionContext executionContext = createExecutionContext(getThingShadowRequest); AWSRequestMetrics awsRequestMetrics = executionContext .getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new GetThingShadowRequestMarshaller(protocolFactory) .marshall(super .beforeMarshalling(getThingShadowRequest)); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } HttpResponseHandler> responseHandler = protocolFactory .createResponseHandler(new JsonOperationMetadata() .withPayloadJson(false) .withHasStreamingSuccessResponse(false), new GetThingShadowResultJsonUnmarshaller()); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { endClientExecution(awsRequestMetrics, request, response); } } /** *

* Publishes state information. *

*

* For more information, see HTTP Protocol in the AWS IoT Developer Guide. *

* * @param publishRequest * The input for the Publish operation. * @return Result of the Publish operation returned by the service. * @throws InternalFailureException * An unexpected error has occurred. * @throws InvalidRequestException * The request is not valid. * @throws UnauthorizedException * You are not authorized to perform this operation. * @throws MethodNotAllowedException * The specified combination of HTTP verb and URI is not supported. * @sample AWSIotData.Publish */ @Override public PublishResult publish(PublishRequest publishRequest) { ExecutionContext executionContext = createExecutionContext(publishRequest); AWSRequestMetrics awsRequestMetrics = executionContext .getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new PublishRequestMarshaller(protocolFactory) .marshall(super.beforeMarshalling(publishRequest)); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } HttpResponseHandler> responseHandler = protocolFactory .createResponseHandler(new JsonOperationMetadata() .withPayloadJson(true) .withHasStreamingSuccessResponse(false), new PublishResultJsonUnmarshaller()); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { endClientExecution(awsRequestMetrics, request, response); } } /** *

* Updates the thing shadow for the specified thing. *

*

* For more information, see UpdateThingShadow in the AWS IoT Developer Guide. *

* * @param updateThingShadowRequest * The input for the UpdateThingShadow operation. * @return Result of the UpdateThingShadow operation returned by the * service. * @throws ConflictException * The specified version does not match the version of the document. * @throws RequestEntityTooLargeException * The payload exceeds the maximum size allowed. * @throws InvalidRequestException * The request is not valid. * @throws ThrottlingException * The rate exceeds the limit. * @throws UnauthorizedException * You are not authorized to perform this operation. * @throws ServiceUnavailableException * The service is temporarily unavailable. * @throws InternalFailureException * An unexpected error has occurred. * @throws MethodNotAllowedException * The specified combination of HTTP verb and URI is not supported. * @throws UnsupportedDocumentEncodingException * The document encoding is not supported. * @sample AWSIotData.UpdateThingShadow */ @Override public UpdateThingShadowResult updateThingShadow( UpdateThingShadowRequest updateThingShadowRequest) { ExecutionContext executionContext = createExecutionContext(updateThingShadowRequest); AWSRequestMetrics awsRequestMetrics = executionContext .getAwsRequestMetrics(); awsRequestMetrics.startEvent(Field.ClientExecuteTime); Request request = null; Response response = null; try { awsRequestMetrics.startEvent(Field.RequestMarshallTime); try { request = new UpdateThingShadowRequestMarshaller( protocolFactory).marshall(super .beforeMarshalling(updateThingShadowRequest)); // Binds the request metrics to the current request. request.setAWSRequestMetrics(awsRequestMetrics); } finally { awsRequestMetrics.endEvent(Field.RequestMarshallTime); } HttpResponseHandler> responseHandler = protocolFactory .createResponseHandler(new JsonOperationMetadata() .withPayloadJson(false) .withHasStreamingSuccessResponse(false), new UpdateThingShadowResultJsonUnmarshaller()); response = invoke(request, responseHandler, executionContext); return response.getAwsResponse(); } finally { endClientExecution(awsRequestMetrics, request, response); } } /** * Returns additional metadata for a previously executed successful, * request, typically used for debugging issues where a service isn't acting * as expected. This data isn't considered part of the result data returned * by an operation, so it's available through this separate, diagnostic * interface. *

* Response metadata is only cached for a limited period of time, so if you * need to access this extra diagnostic information for an executed request, * you should use this method to retrieve it as soon as possible after * executing the request. * * @param request * The originally executed request * * @return The response metadata for the specified request, or null if none * is available. */ public ResponseMetadata getCachedResponseMetadata( AmazonWebServiceRequest request) { return client.getResponseMetadataForRequest(request); } /** * Normal invoke with authentication. Credentials are required and may be * overriden at the request level. **/ private Response invoke( Request request, HttpResponseHandler> responseHandler, ExecutionContext executionContext) { executionContext.setCredentialsProvider(CredentialUtils .getCredentialsProvider(request.getOriginalRequest(), awsCredentialsProvider)); return doInvoke(request, responseHandler, executionContext); } /** * Invoke with no authentication. Credentials are not required and any * credentials set on the client or request will be ignored for this * operation. **/ private Response anonymousInvoke( Request request, HttpResponseHandler> responseHandler, ExecutionContext executionContext) { return doInvoke(request, responseHandler, executionContext); } /** * Invoke the request using the http client. Assumes credentials (or lack * thereof) have been configured in the ExecutionContext beforehand. **/ private Response doInvoke( Request request, HttpResponseHandler> responseHandler, ExecutionContext executionContext) { request.setEndpoint(endpoint); request.setTimeOffset(timeOffset); HttpResponseHandler errorResponseHandler = protocolFactory .createErrorResponseHandler(new JsonErrorResponseMetadata()); return client.execute(request, responseHandler, errorResponseHandler, executionContext); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy