REST call from within Confluence Macro Plugin throws error with RestClientFactory or is refused with normal Jersey client

I try to make a REST call from within an Confluence Macro Java Plugin to my own Confluence page (for Confluence version 7.5.2), to get JSON content from a page. I use Jersey for it.
I tried to save and load content properties from pages via functions calls from the API like using the ContentPropertyService, but I got stuck with it somehow and now I want to try it with REST calls, which will do the same thing in the end.

The problem:
When I’m using the com.sun.jersey.api.client.Client the plugin works, but I get an error saying the connection is refused. It seems I can’t make a REST call from within my own plugin to my own Confluence page where it is installed on. From a website or a REST tool it’s possible to get information from the domain with a get call on https://DOMAIN/rest/api/content/PAGENR/property. And when I load some JSON from external sources it’s working fine.

So I found RestClientFactory from Atlassian ( which seems to create a Jersey client with correct default Atlassian configuration. But when I’m using it, the plugin throws an error on the page which says “Error rendering macro ‘macro-name’ com/atlassian/confluence/rest/client/RestClientFactory”, in the logs there is this error message: “Caused by: java.lang.ClassNotFoundException: not found by [303]”. So after some searching I thought it’s the scope, which is on “provided”.

Then I tried to set the scope to “compile”, but then I can install the plugin, but it takes long and is greyed out after installation so that I can’t use it and 0 modules are enabled. I don’t know how to get more information on that error. In the logs it just says it takes too long and it will try again.

So, the question:
Must I use the RestClientFactory to create a Jersey client, which will handle the authentification? Or how is authentification handled when using the normal Jersey client with Confluence?
Or in general, how do you do a REST call to Conflunce from a Confluence macro plugin?

This is my macro plugin code:


import org.springframework.beans.factory.annotation.Autowired;
import java.util.Map;
import com.atlassian.confluence.content.render.xhtml.ConversionContext;
import com.atlassian.confluence.macro.Macro;
import com.atlassian.confluence.macro.MacroExecutionException;
import com.atlassian.confluence.setup.settings.SettingsManager;
import com.atlassian.plugin.spring.scanner.annotation.component.Scanned;
import com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport;
import com.atlassian.webresource.api.assembler.PageBuilderService;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

public class MacroSetPropertiesDoku implements Macro {
    private final PageBuilderService pageBuilderService;
    private final SettingsManager settingsManager;

	public MacroSetPropertiesDoku(
			@ComponentImport PageBuilderService pageBuilderService,
			@ComponentImport SettingsManager settingsManager
		) {
        this.pageBuilderService = pageBuilderService;
		this.settingsManager = settingsManager;

    public String execute(Map<String, String> map, String s, ConversionContext conversionContext) throws MacroExecutionException {   	
    	final long pageID = conversionContext.getEntity().getId();
    	final String url = settingsManager.getGlobalSettings().getBaseUrl() + "/rest/api/content/" + pageID + "/property";

		String output = "";	
		try {
			Client client = RestClientFactory.newClient();
			WebResource webResource = client.resource(url);
			ClientResponse response = webResource.accept("application/json").get(ClientResponse.class); 
			if (response.getStatus() != 200) {
				output = "Failed with error code: " + response.getEntity(String.class);
			output = "did it!: " + response.getEntity(String.class);
		catch (Exception e) {
			output = "CATCHED: " + e.toString();
        return output;

    public BodyType getBodyType() { return BodyType.NONE; }
    public OutputType getOutputType() { return OutputType.BLOCK; }

In “pom.xml” I added the following dependencies:

    <scope>provided</scope> <!-- I also tried "compile" -->

Thank you for any insights!