Friday 3 March 2023

Spring boot with CORS

CORS (Cross-Origin Resource Sharing) errors occur when a web application running in a browser requests a resource from a different domain or port than the one it originated from. Spring Boot provides built-in support for handling CORS errors. Here are the steps you can follow to solve a CORS error in Spring Boot:


  1. Add the following dependencies to your project's build file:
implementation 'org.springframework.boot:spring-boot-starter-web'
  1. In your Spring Boot application, create a class that extends the WebMvcConfigurer interface and add the following code to it:
@Configuration public class WebConfig implements WebMvcConfigurer {
    @Override public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedOrigins("*")
          .allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD")
          .allowedHeaders("*").allowCredentials(true);
    }
}

 This code enables CORS for all endpoints by allowing any origin, HTTP method, and header. It also allows credentials to be passed along with the request.


  1. Alternatively, you can enable CORS globally by adding the following configuration to your application.properties file:

spring.mvc.allow-cors=true
spring.mvc.cors.allowed-origins=*
spring.mvc.cors.allowed-methods=GET,POST,PUT,DELETE,HEAD
spring.mvc.cors.allowed-headers=*
spring.mvc.cors.allow-credentials=true


This configuration achieves the same result as the previous step.

By following these steps, you should be able to solve the CORS error in your Spring Boot application.


Happy coding.

Apache HUDI and its Use cases

Apache Hudi is an open-source data management framework that enables high-performance and scalable data ingestion, storage, and processing.

Apache HUDI provides a robust and scalable data ingestion framework that can handle a variety of use cases , that make it a valuable data management tool. Here are some examples of use cases where Apache Hudi can be used:

Python read file from aws s3

 To read a file from AWS S3 using Python, you will need to use the AWS SDK for Python (Boto3). Here's an example code snippet to read a file from S3:


Preview:

import boto3



# Create an S3 client

s3 = boto3.client('s3')



# Define the bucket and object key

bucket_name = 'my-bucket'

object_key = 'path/to/my/file.txt'



# Read the file from S3

response = s3.get_object(Bucket=bucket_name, Key=object_key)

file_content = response['Body'].read().decode('utf-8')



# Print the file content

print(file_content)



In the code above, you first create an S3 client using the boto3.client method. Then you define the bucket name and object key for the file you want to read. Finally, you use the s3.get_object method to retrieve the file content from S3 and decode it to a string using UTF-8 encoding.


Note that you will need to have the appropriate AWS credentials configured to access the S3 bucket. You can either set these as environment variables or use the AWS CLI to configure them.






Monday 22 August 2022

java: You aren't using a compiler supported by lombok, so lombok will not work and has been disabled.

 

In order to make projects compile with the existing builds of Lombok processor, as a workaround you can use the flag


-Djps.track.ap.dependencies=false


which should be added to File | Settings | Build, Execution, Deployment | Compiler | Build process VM options field.

This will disable collection of dependencies specified by an annotation processor when Filer methods are called




Friday 19 March 2021

Deploy Lambda with dependency on AWS

AWS Lambda is a server less compute service that lets you run code without provisioning or managing servers, creating workload-aware cluster scaling logic, maintaining event integrations, or managing runtimes. With Lambda, you can run code for virtually any type of application or backend service - all with zero administration. Just upload your code as a ZIP file or container image, and Lambda automatically and precisely allocates compute execution power and runs your code based on the incoming request or event, for any scale of traffic. You can set up your code to automatically trigger from 140 AWS services or call it directly from any web or mobile app.



Suppose you have written your lambda in python and trying to import you favorite packages which you have used in code then it might create problem for you. eg. like Pandas, numpy 


Although Python AWS lambda give access to all BOTO3 lib resources.


Below are the steps to Import your Lambda code into AWS.



Step 1: Start a Cloud9 Linux instance in AWS


  •    Search for Cloud9 in the AWS Services
            



  •     Click ‘Create Environment’
  •     Name your environment whatever you like (e.g. transformer ) and click next step
  •     Keep the environment default settings and click next.


  •     Click ‘Create Environment’ and you’re ready to go



Step 2: Creating dependency layer of Pandas library


Enter below steps on the terminal to create package and download dependencies.





mkdir dependency

cd dependency

virtualenv v-env

source ./v-env/bin/activate

pip install pandas

deactivate


Check for python version installed on machine


mkdir python

cd python

cp -r ../v-env/lib64/python3.7/site-packages/* .

cd ..

zip -r panda_layer.zip python

aws lambda publish-layer-version --layer-name pandas --zip-file fileb://panda_layer.zip --compatible-runtimes python3.7


Output after completion of all steps should look like this




Step 3: Adding the Pandas layer to your Lamda function


  • Go to the AWS Lambda service and click ‘Create Function’
  • Name your function, set the runtime to ‘Python 3.7’, and click ‘Create Function’
  • Click on Layers 


  • Click on ‘Layers’ in the function designer, then click ‘add a layer’










  • Choose custom layers from the layers options and on the dropdown, you should see your Pandas layer. 
  • Select that layer and choose your version as 1
  • Click ‘Add’.


 You are now good to go with your lambda having dependency of Pandas.

Wednesday 11 March 2020

Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException


Problem :

Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException

Add these dependencies into your pom file

Solution :

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>



Monday 27 January 2020

file upload error Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]

Problem :

file upload error Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]



Solution:


If you are using Spring MVC with Spring security then main problem was in spring security.

I resolved this problem by adding ${_csrf.parameterName}=${_csrf.token} 

to end of my form action


HTML:

1
2
3
4
<form method="POST" action="/uploadExcelFile?${_csrf.parameterName}=${_csrf.token}" enctype="multipart/form-data">
 <input type="file" name="file" /><br/><br/>
 <input type="submit" value="Submit" />
</form>

Spring boot with CORS

CORS (Cross-Origin Resource Sharing) errors occur when a web application running in a browser requests a resource from a different domain or...