Giter VIP home page Giter VIP logo

aws-sdk-kotlin's Introduction

AWS SDK for Kotlin

Apache 2 licensed Maven

This repo contains the AWS SDK for Kotlin and its public roadmap.

Getting Started

See the Getting Started Guide to learn how to use the AWS SDK for Kotlin in your program.

Feedback

The SDK uses GitHub Issues to track feature requests and issues with the SDK. In addition, we use GitHub Projects to provide a high level overview of our roadmap and the features we are actively working on.

You can provide feedback or report a bug by submitting an issue. This is the preferred mechanism to give feedback so that other users can engage in the conversation, +1 issues, etc.

Contributing

If you are interested in contributing to the AWS SDK for Kotlin, please take a look at CONTRIBUTING

Versioning

See our VERSIONING policy for how the SDK is versioned.

Development

Generate SDK(s)

Generated sources are not checked into the repository, you first have to generate the clients before you can build them. A step-by-step guide is available that demonstrates building the AWS DynamoDB service, or if you have a good working knowledge of Gradle, see below:

./gradlew --no-daemon :codegen:sdk:bootstrap

NOTE: This task will respect the AWS services specified by project properties. See options below. NOTE: To re-run codegen for the same set of services multiple times add the --rerun-tasks flag.

After generating the services you care about they are available to build:

e.g.

./gradlew :services:lambda:build

Where the task follows the pattern: :services:SERVICE:build

To see list of all projects run ./gradlew projects

Generating a single service

See the Build Properties below to specify this in a config file.

./gradlew --no-daemon -Paws.services=+lambda  :codegen:sdk:bootstrap
Testing Locally

Testing generated services generally requires publishing artifacts (e.g. client-runtime) of smithy-kotlin, aws-crt-kotlin, and aws-sdk-kotin to maven local.

Generating API Documentation

API documentation is generated using Dokka which is the official documentation tool maintained by JetBrains for documenting Kotlin code.

Unlike Java, Kotlin uses its own KDoc format.

To generate API reference documentation for the AWS Kotlin SDK:

./gradlew --no-daemon --no-parallel dokkaHtmlMultiModule

This will output HTML formatted documentation to build/dokka/htmlMultiModule

NOTE: You currently need an HTTP server to view the documentation in browser locally. You can either use the builtin server in Intellij or use your favorite local server (e.g. python3 -m http.server). See Kotlin/dokka#1795

Build Properties

You can define a local.properties config file at the root of the project to modify build behavior.

Property Description
compositeProjects Specify paths to repos the SDK depends upon such as smithy-kotlin
aws.services Specify inclusions (+ prefix) and exclusions (- prefix) of service names to generate
aws.protocols Specify inclusions (+ prefix) and exclusions (- prefix) of AWS protocols to generate

Composite Projects

Dependencies of the SDK can be added as composite build such that multiple repos may appear as one holistic source project in the IDE.

# comma separated list of paths to `includeBuild()`
# This is useful for local development of smithy-kotlin in particular 
compositeProjects=../smithy-kotlin

Generating Specific Services Based on Name or Protocol

A comma separated list of services to include or exclude for generation from codegen/sdk/aws-models may be specified with the aws.services property. A list of protocols of services to generate may be specified with the aws.protocols property.

Included services require a '+' character prefix and excluded services require a '-' character. If any items are specified for inclusion, only specified included members will be generated. If no items are specified for inclusion, all members not excluded will be generated. When unspecified all services found in the directory specified by the modelsDir property are generated. Service names match the filenames in the models directory service.VERSION.json.

Some example entries for local.properties:

# Generate only AWS Lambda:
aws.services=+lambda
# Generate all services but AWS location and AWS DynamoDB:
aws.services=-location,-dynamodb
# Generate all services except those using the restJson1 protocol:
aws.protocols=-restJson1

Debugging

See Debugging

Security

Please refer to our security policy.

Supported targets

The SDK supports the following targets:

aws-sdk-kotlin's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aws-sdk-kotlin's Issues

DDB crc32 checksum

Customization required for DDB which has crc32 checksum validation as an option.

TODO - link to spec/sep?

Manually curate smithy-build.json for AWS services

We should provide a way to either check in smithy-build.json for each AWS service generated or provide a way to merge configs such that we can check in something.

Right now in codegen we just generate smithy-build.json as a part of the overall bootstrap.

  1. We need a way to specify customizations and potentially other config defaults on a per/service basis. (See #177144277 as an example of the latter)
  2. It's easier to audit what we are doing to a particular service if we check in smithy-build.json (or some config that merges into the build). We can see what services have customizations, when they changes, etc
  3. Relying only on codegen opens us up to the risk that we accidentally update a services config in a way that is a breaking change. This can happen easily since the generated smithy config contains things like the package name to use, customizations to apply, etc. A simple "fix" for one service could silently break another one.

One way to do this would be to define a new config file that would live in the service directory that gets merged into the overall smithy-build.json.

internal id: 177144399

Integrate IAM presigned URL support into specific RDS operations

For RDS Operations:

  • CopyDBSnapshot
  • CreateDBInstanceReadReplica,
  • CopyDBClusterSnapshot,
  • CreateDBCluster
  • StartDBInstanceAutomatedBackupsReplication (not in original Go doc but has been added to

SEP: /seps/accepted/shared/rds-cross-region-copy.md

Add SourceRegion and DestinationRegion string members to level inputs shapes. Customizations read members for presigned URL behavior.

@jasdel will know what this means

internal id: 176559055

Look at generated SDK warnings

Take a look at generated SDK compiler warnings for possible areas we can cleanup the generated code to not end up with a warning. Create tickets as appropriate.

internal id: 176146308

Some Cognito operations throwing HttpResponse(status=400: Bad Request, headers=Headers [content-length=[215], content-type=[application/x-amz-json-1.1]

Some Cognito operation work fine, while others throw the above exception.

Operations where this is observed:

  • deleteUserPool
  • listIdentityProviders
  • signUp
  • listUserPoolClients
  • describeUserPool

For example the deleteUserPool operation throws the above exception:

 class DeleteUserPool {

suspend fun delPool(cognitoclient: CognitoIdentityProviderClient, userPoolId:String) {

    try {

        val deleteUserPoolRequest =  DeleteUserPoolRequest{
             this.userPoolId = userPoolId
        }

      cognitoclient.deleteUserPool(deleteUserPoolRequest)
      print("$userPoolId was successfully deleted")

    } catch (e: AwsServiceException) {
        System.err.println(e.protocolResponse as HttpResponse)
        System.exit(1)
    }
 }
}

User Agent Header SEP

/packages/AwsDrSeps/blobs/master/--/seps/accepted/shared/sdk-user-agent-header.md

internal id: 176981023

Secret Manager create secret throwing an exception

When trying to create a new secret, an exception is thrown. Other SecretManager Kotlin examples work fine too.

NOTE - same issue for updateSecret as well
Code:

   import aws.sdk.kotlin.runtime.AwsServiceException
   import aws.sdk.kotlin.secretsmanager.SecretsManagerClient
   import aws.sdk.kotlin.secretsmanager.model.CreateSecretRequest
   import software.aws.clientrt.http.readAll
   import software.aws.clientrt.http.response.HttpResponse

  suspend fun main(args: Array<String>) {

  val usage = """
    Usage: <secretName> <secretValue>

   Where:
     secretName - the name of the secret (for example, tutorials/MyFirstSecret).
     secretValue - the secret value.
   """

   val secretName = "FirstSecret20111" //args[0]
  val secretValue = "3876555532989" //args[1]
  val secretsClient = SecretsManagerClient { region = "us-east-1" }
 val createSecret = CreateSecret()
 val secArn = createSecret.createNewSecret(secretsClient, secretName, secretValue)
 println("The secret ARN value is $secArn")
 secretsClient.close()
 }

 class CreateSecret {

 suspend fun createNewSecret(secretsClient: SecretsManagerClient, secretName: String?, secretValue: String?): String? {

    try {

        val secretRequest  = CreateSecretRequest {
            name = secretName
            description = "This secret was created by the AWS Secret Manager Kotlin API"
            secretString = secretValue
        }

        val secretResponse = secretsClient.createSecret(secretRequest)
        return secretResponse.aRN

      } catch (e: AwsServiceException) {
         val resp = e.protocolResponse as HttpResponse
         println(resp)
         println(resp.body.readAll()?.decodeToString())
         println(e)
         System.exit(1)
       }
      return ""
      }
    }

NOTE -- same code works via Java V2

Exception

HttpResponse(status=400: Bad Request, headers=Headers [content-length=[208], content-type=[application/x-amz-json-1.1], date=[Fri, 26 Feb 2021 19:52:33 GMT], x-amzn-requestid=[9726d237-4094-405d-b41e-f373eeb87514]], body=software.aws.clientrt.http.content.ByteArrayContent@16c9c4bd, request=HttpRequest(method=POST, url=https://secretsmanager.us-east-1.amazonaws.com/, headers=Headers [Host=[secretsmanager.us-east-1.amazonaws.com], X-Amz-Target=[secretsmanager.CreateSecret], Content-Type=[application/x-amz-json-1.1], X-Amz-Date=[20210226T195232Z], Authorization=[AWS4-HMAC-SHA256 Credential=AKIA33JWY3BXW7POHDLA/20210226/us-east-1/secretsmanager/aws4_request, SignedHeaders=content-type;host;x-amz-date;x-amz-target, Signature=59643ad2cafde3adeb92d98bc968038d69c7223f55978d07070c064197b4329c]], body=software.aws.clientrt.http.content.ByteArrayContent@63b77f34))
{"__type":"ValidationException","message":"1 validation error detected: Value '16143691511038666643' at 'clientRequestToken' failed to satisfy constraint: Member must have length greater than or equal to 32"}
aws.sdk.kotlin.runtime.UnknownServiceErrorException
Disconnected from the target VM, address: '127.0.0.1:61969', transport: 'socket'

SQS Checksum Validation

Can be disabled with DisableComputeChecksums. This may be modeled now?

internal id: 176558055

signing content-type header when no payload exists results in invalid signature error

When running some Lambda operations, an error occurs However, other operations such as lambdaClient.listFunctions(request) work fine.

This example:
**try {

       val functionRequest = DeleteFunctionRequest {
            functionName = "COOLFunction"
        }

        awsLambda.deleteFunction(functionRequest)
        System.out.println("The function was deleted")

    } catch (e: AwsServiceException) {
        System.err.println(e.protocolResponse as HttpResponse)
        System.exit(1)
    }**

Generates this exception:

HttpResponse(status=403: Forbidden, headers=Headers [content-length=[192], content-type=[application/json], date=[Wed, 17 Feb 2021 20:22:42 GMT], x-amzn-errortype=[InvalidSignatureException], x-amzn-requestid=[3d502106-f6ad-4c5e-ad15-af7083516c9d]], body=software.aws.clientrt.http.content.ByteArrayContent@5bae0478, request=HttpRequest(method=POST, url=https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/arn:aws:lambda:us-east-1:814548047983:function:myLambda/invocations, headers=Headers [Host=[lambda.us-east-1.amazonaws.com], Content-Type=[application/octet-stream], X-Amz-Date=[20210217T202241Z], Authorization=[AWS4-HMAC-SHA256 Credential=AKIA33JWY3BXW7POHDLA/20210217/us-east-1/lambda/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=57107d715e62dd814d87c6431ab94dfbaa14ecb4a6c45228c1e7d50fab65d019]], body=software.aws.clientrt.http.content.ByteArrayContent@5de1ab65))

Cannot set AttributeValue required for various operations for DynamoDB

The DynamoDB API is not letting me set AttributeValue values. This is required for various operations like query, updateItem, and so on.

Here is working code for Kotlin that uses Java SDK. Notice we can set AttributeValue.

// Set up mapping of the partition name with the value
val attrValues = HashMap<String, AttributeValue>()
attrValues[":$partitionKeyName"] =
AttributeValue.builder().s(partitionKeyVal).build()

For Kotlin SDK -- its not letting us set AttributeValue. I get error saying:

Error:(66, 44) Kotlin: Cannot access '': it is private in 'AttributeValue'

Manually specify shape renames for AWS services

#177022993 introduced renaming of model types that conflict with Kotlin builtin types (e.g. Unit).

It would be better to fail the build and require a manual customization to rename these types for following reasons:

  1. Having the rename implemented in code opens us up to accidentally changing the rules of that rename and breaking customers. This is hard to detect since it all just happens automatically.
  2. We can provide better names for these renames. Like point (1) by having the rename rule as code we can only follow a particular pattern but we can't actually guarantee that the renamed type comes out sensible. By manually choosing the name we can provide a better customer experience.

Smithy 1.6.1 has support for this directly: https://github.com/awslabs/smithy/pull/721/files#diff-7d898edc06a29654f5803d197345007c92fd0306f1f94a0eeaacfcab1469de38

internal id: 177144277

SSO Credential Provider

  • /seps/accepted/shared/sso-provider/
  • /seps/accepted/shared/sso-login-flow/

internal id: 174880365

[Windows] Error parsing JSON: Expected valid escape sequence, smithy-build.json

After building smithy-kotlin and aws-crt-kotlin, when I try to build aws-sdk-kotlin the build fails.

This is on Windows - maybe it's just that the file paths contain backslashes, but it's unclear to me where the issue is.

Here is the sequence of steps I am following:

  1. git clone https://github.com/awslabs/smithy-kotlin.git

  2. git clone https://github.com/awslabs/aws-crt-kotlin.git

  3. git clone https://github.com/awslabs/aws-sdk-kotlin.git
    \

  4. pushd smithy-kotlin

  5. ./gradlew build publishToMavenLocal

  6. popd
    \

  7. pushd aws-crt-kotlin

  8. git checkout bootstrap-jvm

  9. ./gradlew build -x jvmTest

  10. ./gradlew publishToMavenLocal

  11. popd

  12. pushd aws-sdk-kotlin

  13. ./gradlew build publishToMavenLocal

$ ./gradlew build publishToMavenLocal --stacktrace > test3.log
Skipping Smithy model file because it does not exist: C:\workplace\kotlinsdk\aws-sdk-kotlin\codegen\protocol-test-codegen\model
Skipping Smithy model file because it does not exist: C:\workplace\kotlinsdk\aws-sdk-kotlin\codegen\protocol-test-codegen\src\main\smithy
Skipping Smithy model file because it does not exist: C:\workplace\kotlinsdk\aws-sdk-kotlin\codegen\protocol-test-codegen\src\main\resources\META-INF\smithy
Skipping Smithy model file because it does not exist: C:\workplace\kotlinsdk\aws-sdk-kotlin\codegen\sdk-codegen\model
Skipping Smithy model file because it does not exist: C:\workplace\kotlinsdk\aws-sdk-kotlin\codegen\sdk-codegen\src\main\smithy
Skipping Smithy model file because it does not exist: C:\workplace\kotlinsdk\aws-sdk-kotlin\codegen\sdk-codegen\src\main\resources\META-INF\smithy
Error parsing JSON: Expected valid escape sequence (C:\workplace\kotlinsdk\aws-sdk-kotlin\codegen\sdk-codegen\smithy-build.json [6, 29])

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':sdk-codegen:buildSdk'.
> Error parsing JSON: Expected valid escape sequence (C:\workplace\kotlinsdk\aws-sdk-kotlin\codegen\sdk-codegen\smithy-build.json [6, 29])

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':sdk-codegen:buildSdk'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$3(ExecuteActionsTaskExecuter.java:186)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:268)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:184)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:173)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:411)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:398)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:391)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:377)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: org.gradle.api.GradleException: Error parsing JSON: Expected valid escape sequence (C:\workplace\kotlinsdk\aws-sdk-kotlin\codegen\sdk-codegen\smithy-build.json [6, 29])
        at software.amazon.smithy.gradle.SmithyUtils.executeCliThread(SmithyUtils.java:302)
        at software.amazon.smithy.gradle.SmithyUtils.executeCli(SmithyUtils.java:205)
        at software.amazon.smithy.gradle.tasks.SmithyCliTask.executeCliProcess(SmithyCliTask.java:224)
        at software.amazon.smithy.gradle.tasks.SmithyBuild.execute(SmithyBuild.java:113)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:494)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:479)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:462)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$400(ExecuteActionsTaskExecuter.java:105)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:273)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:251)
        at org.gradle.internal.execution.steps.ExecuteStep.lambda$executeOperation$1(ExecuteStep.java:66)
        at org.gradle.internal.execution.steps.ExecuteStep.executeOperation(ExecuteStep.java:66)
        at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:34)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:47)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:44)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:44)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:34)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:72)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:42)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:53)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:39)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:44)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:77)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:58)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:54)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:32)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:57)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:38)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:63)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:30)
        at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:176)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:76)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:47)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:43)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:32)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:39)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:25)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:102)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:95)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:39)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:83)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:96)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:52)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:83)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:54)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:74)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:88)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:88)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
        at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:46)
        at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:34)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:43)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution$3.withWorkspace(ExecuteActionsTaskExecuter.java:286)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:43)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:33)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:40)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:30)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:54)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:40)
        at org.gradle.internal.execution.impl.DefaultExecutionEngine.rebuild(DefaultExecutionEngine.java:46)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$0(ExecuteActionsTaskExecuter.java:182)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:182)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:173)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:411)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:398)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:391)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:377)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at software.amazon.smithy.gradle.SmithyUtils.lambda$executeCliThread$2(SmithyUtils.java:277)
Caused by: java.lang.reflect.InvocationTargetException
        at software.amazon.smithy.gradle.SmithyUtils.lambda$executeCliThread$2(SmithyUtils.java:274)
Caused by: software.amazon.smithy.build.SmithyBuildException: software.amazon.smithy.model.loader.ModelSyntaxException: Error parsing JSON: Expected valid escape sequence (C:\workplace\kotlinsdk\aws-sdk-kotlin\codegen\sdk-codegen\smithy-build.json [6, 29])
        at software.amazon.smithy.build.model.ConfigLoader.load(ConfigLoader.java:49)
        at software.amazon.smithy.build.model.SmithyBuildConfig$Builder.load(SmithyBuildConfig.java:201)
        at software.amazon.smithy.cli.commands.BuildCommand.lambda$execute$0(BuildCommand.java:91)
        at software.amazon.smithy.cli.commands.BuildCommand.execute(BuildCommand.java:91)
        at software.amazon.smithy.cli.Cli.run(Cli.java:144)
        at software.amazon.smithy.cli.SmithyCli.run(SmithyCli.java:93)
        at software.amazon.smithy.cli.SmithyCli.run(SmithyCli.java:78)
        ... 1 more
Caused by: software.amazon.smithy.model.loader.ModelSyntaxException: Error parsing JSON: Expected valid escape sequence (C:\workplace\kotlinsdk\aws-sdk-kotlin\codegen\sdk-codegen\smithy-build.json [6, 29])
        at software.amazon.smithy.model.node.internal.JsonParser.error(JsonParser.java:536)
        at software.amazon.smithy.model.node.internal.JsonParser.expected(JsonParser.java:532)
        at software.amazon.smithy.model.node.internal.JsonParser.readEscape(JsonParser.java:372)
        at software.amazon.smithy.model.node.internal.JsonParser.readStringInternal(JsonParser.java:324)
        at software.amazon.smithy.model.node.internal.JsonParser.readString(JsonParser.java:315)
        at software.amazon.smithy.model.node.internal.JsonParser.readValue(JsonParser.java:179)
        at software.amazon.smithy.model.node.internal.JsonParser.readArray(JsonParser.java:221)
        at software.amazon.smithy.model.node.internal.JsonParser.readValue(JsonParser.java:182)
        at software.amazon.smithy.model.node.internal.JsonParser.readObject(JsonParser.java:257)
        at software.amazon.smithy.model.node.internal.JsonParser.readValue(JsonParser.java:185)
        at software.amazon.smithy.model.node.internal.JsonParser.readObject(JsonParser.java:257)
        at software.amazon.smithy.model.node.internal.JsonParser.readValue(JsonParser.java:185)
        at software.amazon.smithy.model.node.internal.JsonParser.readObject(JsonParser.java:257)
        at software.amazon.smithy.model.node.internal.JsonParser.readValue(JsonParser.java:185)
        at software.amazon.smithy.model.node.internal.JsonParser.parse(JsonParser.java:160)
        at software.amazon.smithy.model.node.internal.JsonParser.parse(JsonParser.java:106)
        at software.amazon.smithy.model.node.internal.NodeHandler.parse(NodeHandler.java:42)
        at software.amazon.smithy.model.node.Node.parseJsonWithComments(Node.java:118)
        at software.amazon.smithy.build.model.ConfigLoader.loadWithJson(ConfigLoader.java:54)
        at software.amazon.smithy.build.model.ConfigLoader.load(ConfigLoader.java:47)
        ... 7 more

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.