August 24, 2019 Vignesh Sathiyanantham

When I was writing the base code in Spring boot for my RESTifying the ZFS APIs project, I was looking for some way of throwing the exception to the user with HTTP error code. I found a way to handle it by using ResponseStatusExceptionResolver. ResponseStatusExceptionResolver is introduced with Spring 3, and Its main responsibility is to use the @ResponseStatus annotation available on custom exceptions and to map these exceptions to HTTP status codes. @ResponseStatus annotation I created a ValidationException class extending the RuntimeException class with a constructor. This is how my code looks like package in.asvignesh.zfsservice.controller; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus;…

August 24, 2019 Vignesh Sathiyanantham

I am working on a new hobby project RESTifying the ZFS APIs, Earlier I was using play framework for my REST projects, now started using SpringBoot While RESTifying the ZFS API one of the API formats is like @GetMapping(path = {“/”, “/{poolname}”, “/{poolname}/{volumename}”}, produces = “application/json”) / will give all the pool name and volumes, /poolname will give all the pool name and volumes of that particular pool, /poolname/”poolname/volumename” should give the pool and the volume. The volume name is in the format {poolname}/{volumename}, so I want to provide the slash with URL encoded but given restful method below gives…

August 13, 2019 Vignesh Sathiyanantham

In this post will see how to secure the REST API using Basic Authentication with Spring security features. In this example, we will be using Spring boot to avoid basic configuration I will describe only the security part of Spring REST and how to test with Postman Basic Authentication in REST API Basic authentification is a standard HTTP header with the user and password encoded in base64 : Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==.The userName and password are encoded in the format username: password. This is one of the simplest technique to protect the REST resources because it does not require cookies. session…

August 8, 2019 Vignesh Sathiyanantham

I have created my own annotation with default values set overriding the existing defaults In request parameters @RequestParam you can set the required parameters, I am implementing the Get Users and Get User by Name APIs Legacy way of implementing @RequestMapping(value = “/user/{name}”) public String getUsers(@PathVariable String name) { return service.getUsers(name); } @RequestMapping(value = “/user”) public String getUsers() { return service.getUsers(); } Instead of duplicating the APIs and overloading the method we can use the Java 8 Optional Parameter @RequestMapping(value = {“/”, “/{username}”}, verb = RequestMethod.GET) public ResponseEntity<List<User>> getUsers( @PathVariable(value = “username”, required = false) Optional<String> username) { if (username.isPresent())…

July 12, 2019 Vignesh Sathiyanantham

Recently we faced an issue in our product Nimesa Cloud Data protection, our QA Director raised a bug that Nimesa is listing two networks during Virtual Machine clone but while editing the VM in vSphere web client he was getting only one network. When I checked in the vSphere web client I can see one network as Uplink port group but in the manage object browser two networks are listed and there is no difference between them to identify that as an uplink port group and ignore while listing in the clone after scratching my head and wondered “ But…

July 8, 2019 Vignesh Sathiyanantham

Java 8 has Collectors.joining() and its overloads. It also has String.join.Using a Stream and a Collector Function<String,String> addQuotes = s -> “\”” + s + “\””; String result = listOfStrings.stream() .map(addQuotes) .collect(Collectors.joining(“, “)); String result = listOfStrings.stream() .map(s -> “\”” + s + “\””) .collect(Collectors.joining(“, “)); String result = listOfString.isEmpty() ? “” : “\”” + String.join(“\”, \””, listOfStrings) + “\””; Happy Coding!

May 10, 2018 Vignesh Sathiyanantham

With vSphere 6.7 web services SOAP API  includes the creation date of a Virtual Machine and will be persisted with the life-cycle of the VM itself. You can get it from Virtual Machine -> Config -> createDate. Earlier to 6.7, we can track the VM Creation Time using EventManager. We should create an EventFilterSpec to filter the events by Virtual Machine creation or deployed, Registered or Cloned Events. new String[]{“VmCreatedEvent”, “VmBeingDeployedEvent”, “VmRegisteredEvent”, “VmClonedEvent”} Get Virtual Machine Creation Time earlier to vSphere 6.7 Java https://gist.github.com/asvignesh/fd97f4cbc41ac55e5b289c3424c0f09a vSphere Power CLI https://gist.github.com/asvignesh/327169f8456bbd613eebfad3d9768fa8

April 10, 2018 Vignesh Sathiyanantham

To fetch the querystring parameters in Controller we usually use request().queryString() Map<String, String[]> queryString = request().queryString(); If we have multiple query-string keys and want to use a POJO to use query-string instead of parsing everything in Controller we can use QueryStringBindable If you have take a look in your project you will see just simple parameters as argument ( Path argument ) in your GET method controller, In order to use Java POJO as input for query string i implements QueryStringBindable<T> in my POJO Here is my sample POJO and my controller method https://gist.github.com/asvignesh/911ff1b6dd4b96a5368e9d113a6591d0 Added a entry in routes, GET…

August 8, 2015 Vignesh Sathiyanantham

I’ve been developing an automation scripts to provision and expand VMFS Datastore. Expand not Extent… I increased the storage volume size and need to increase the size of VMFS datastore without affording the downtime Here is the VIjava / YAVI Java code for expanding the datastore   https://gist.github.com/cd02090562b8cf2ee0e3   [amazon_link asins=’B002SSBD8A’ template=’ProductLink’ store=’asvignesh-21′ marketplace=’IN’ link_id=’2f839008-c0c9-11e7-a460-f1aec9ea1733′]

May 28, 2015 Vignesh Sathiyanantham 2Comment

When i was working on a WIX, i encountered some issue in installing the application  (REST based webservice), my service is not started and later identified that the port number which i set in the application is already used by another application To identify whether the port is in use, i used the Socket Class in Java, which is an endpoint for communication between two machines but i used for local machine to validate specified port public Socket(String host, int port) throws UnknownHostException, IOException https://gist.github.com/c830a8f4c94fa17d68a8 if the host is null it will set the host as loopback address