Open PMG-VascoSaavedra opened 6 months ago
1 - If running through Eclipse, it works as expected:
2 - I had to downgrade to spring-boot 3.1.6 due to this issue: https://github.com/spring-cloud/spring-cloud-function/issues/1085
After 1) and 2), i still get the same error when the Cloud Function is deployed in GCP:
I was able to sort this out, with the help of a friend.
Basically, i would have to change the signature to receive an Object, and then cast to a BufferedReader. Afterwards, i would have to read from it line by line, parse the lines and create a Key/Value Map.
I tested this and it worked.
@SpringBootApplication
public class CloudFunctionMain {
private static final Logger log = LoggerFactory.getLogger(CloudFunctionMain.class);
public static void main(String[] args) {
SpringApplication.run(CloudFunctionMain.class, args);
}
@Bean
public Function<Object, ResponseEntity<Object>> function() {
return this::handleNotify;
}
private ResponseEntity<Object> handleNotify(final Object values) {
BufferedReader request = ((BufferedReader) values);
//Read BufferedReader, parse the lines and add values to a Map.
return new ResponseEntity<>(null, new HttpHeaders(), HttpStatus.OK);
}
}
In the end, i opted to use Quarkus.
I have a simple Spring cloud function, which was developed according to the guidelines provided by Spring Cloud documentation.
Step 1: Add the spring-cloud-function-adapter-gcp dependency:
Step 2: Add the spring-boot-maven-plugin which will build the JAR of the function to deploy
Step 3: Add the Maven plugin provided as part of the Google Functions Framework for Java. This allows to test locally via mvn function:run.
Step 4: The Spring Cloud Function Code
Step 5: Create Unit test for startup
Step 6: Execute unit test:
Step 7: Run the function locally
Step 8: Use CURL to send a x-www-form-urlencoded Request:
curl -i -X POST http://localhost:8080/ -H "Content-Type: application/x-www-form-urlencoded" -d "param1=value1¶m2=value2"
Which generates the following error:
Question: It seems that the error is due to the Tests using Tomcat, and when the function runs, it uses Jetty via spring-cloud-function-adapter-gcp.
Why does this happen, and what can i do to overcome this error?
The project can be downloaded here: cloud-function.zip