Custom Service to Read Json Data
from any provided URL
AppConstants.java (class)
package com.community.config.core;
public class AppConstants {   
      public static final String URL = "https://jsonplaceholder.typicode.com/todos/1";
} 
ReadJsonService.java (interface)
package com.community.config.core;
public interface ReadJsonService {
      public String getData();
}
ReadJsonDataImpl.java (class) 
package com.community.config.core;
import org.osgi.service.component.annotations.Component;
import static com.community.config.core.AppConstants.URL;
import com.community.config.core.ReadJsonService;
import com.community.config.core.Network;
@Component(immediate = true, service = ReadJsonService.class)
public class ReadJsonDataImpl implements ReadJsonService {
      @Override
      public String getData() {     
            String response = Network.readJson(URL);        
            return response; 
      }
}
Network.java (class)
package com.community.config.core;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
public final class Network {
      private static final String USER_AGENT = "Mozilla/5.0";
      public static String readJson(String url) {
            try {
                  URL requestURL = new URL(url);
                  HttpsURLConnection connection = (HttpsURLConnection) requestURL.openConnection();
                  connection.setRequestMethod("GET");
                  connection.setRequestProperty("User-Agent", USER_AGENT);
                  int responseCode = connection.getResponseCode();
                  if (responseCode == HttpsURLConnection.HTTP_OK) {
                        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                        String inputLine;
                        StringBuffer response = new StringBuffer();
                        while ((inputLine = in.readLine()) != null) {
                              response.append(inputLine);
                        }
                        in.close();
                        return response.toString();
                  }
            } catch (MalformedURLException e) {
                  e.printStackTrace();
            } catch (IOException e) {
                  e.printStackTrace();
            }
            return "";
      }
}
Change the code in HelloWorld
component’s .html file
Helloworld.html
<pre
data-sly-use.jsondata="com.community.config.core.models.HelloWorldModel">
Json Data is:
${jsondata.message}
</pre>
Make Changes in HelloWorldModel.java
to pass the value in OSGI Bundle
HelloWorldModel (class)
package
com.community.config.core.models;
 
import
javax.annotation.PostConstruct;
import
javax.inject.Inject;
import
org.apache.sling.api.resource.Resource;
import org.apache.sling.models.annotations.Model;
import
com.community.config.core.ReadJsonService;
 
@Model(adaptables=Resource.class)
public class
HelloWorldModel {
      
    @Inject
    ReadJsonService rj; 
    
    private String message;
 
    @PostConstruct
    protected void init() {          
        message = rj.getData()+ "\n"; 
    }
 
    public String getMessage() {
        return message;
    }
}
By this we can hit any URL and get the Json data on Page

No comments:
Post a Comment