Azure / Azure/azure-functions-java-worker
Inconsistent behavior between OutputBinding<String> and OutputBinding<List<String>>
- Langage dominant
- Java
- Étoiles
- 103
- Forks
- 74
- Merge moyen
- 4 j 8 h
- PR mergées (30 j)
- 2
Description
The following code results in 2 rows in the cosmos DB
```Java
@FunctionName("CosmosDBTriggerJava1")
public void run(
@CosmosDBTrigger(
name = "items",
databaseName = "db1",
collectionName = "col3",
leaseCollectionName="leases",
connectionStringSetting = "juzhucos_DOCUMENTDB",
createLeaseCollectionIfNotExists = true
)
Object[] items,
@CosmosDBOutput(name = "database",
databaseName = "db1",
collectionName = "col2",
connectionStringSetting = "juzhucos_DOCUMENTDB")
OutputBinding outputItem, //this line caused error. It works with OutputBinding> and OutputBinding
final ExecutionContext context
) {
outputItem.setValue("[{\"name\":\"value 0\"},{\"name\":\"value 1\"}]");
}
```
While the following code results in error
```Java
@FunctionName("CosmosDBTriggerJava")
public void run(
@CosmosDBTrigger(
name = "items",
databaseName = "db1",
collectionName = "col1",
leaseCollectionName="leases",
connectionStringSetting = "juzhucos_DOCUMENTDB",
createLeaseCollectionIfNotExists = true
)
Object[] input,
@CosmosDBOutput(name = "database",
databaseName = "db1",
collectionName = "col2",
connectionStringSetting = "juzhucos_DOCUMENTDB")
OutputBinding> outputItem,
final ExecutionContext context
) {
List items = new ArrayList();
for (int i = 0; i < 2; i ++) {
items.add("{\"name\":\"value 0\"}");
}
outputItem.setValue(items);
}
```
```
[1/19/2020 8:47:13 AM] Executed 'Functions.CosmosDBTriggerJava' (Failed, Id=8e0edee5-49f5-4afc-82ff-fde57a43b67b)
[1/19/2020 8:47:13 AM] System.Private.CoreLib: Exception while executing function: Functions.CosmosDBTriggerJava. Microsoft.Azure.DocumentDB.Core: Value cannot be null.
[1/19/2020 8:47:13 AM] Parameter name: document.
```
This is because the first one is serialized to an array of 2 JSON objects, when doing RPC from the Java worker to the function host.
```Java
[{"name":"value 0"},{"name":"value 1"}]
```
While the later one is serialized to an array of 2 strings
```Java
["{\"name\":\"value 0\"}","{\"name\":\"value 1\"}"]
```
Can we make the later one support adding JSON string objects to the list, since the first one supports that.
Guide de contribution
Ouvrir le guide de contribution
Évaluation
Cette issue n'a pas encore été évaluée.