Skip to content

Commit a779191

Browse files
Merge pull request #121 from TanyaEf/master
Added logging functionality
2 parents 11782da + 5f06e45 commit a779191

File tree

19 files changed

+409
-91
lines changed

19 files changed

+409
-91
lines changed

README.md

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,10 @@ Table of Contents
114114
17. [Asynchronous API](#asynchronous-api).
115115
18. [Getting serialized content from response](#getting-serialized-content-from-response).
116116
19. [Switching between JSON and XML](#switching-between-json-and-xml).
117-
20. [Possible issues](#possible-issues).
118-
21. [Maven dependency to add jasperserver-rest-client to your app](#maven-dependency-to-add-jasperserver-rest-client-to-your-app).
119-
22. [License](#license).
117+
20. [Logging](#logging).
118+
21. [Possible issues](#possible-issues).
119+
22. [Maven dependency to add jasperserver-rest-client to your app](#maven-dependency-to-add-jasperserver-rest-client-to-your-app).
120+
23. [License](#license).
120121

121122
Introduction
122123
-------------
@@ -868,7 +869,7 @@ Response response = operationResult.getResponse();
868869
```
869870
####Setting Role Membership
870871
To assign role membership to a user, set the roles property on the user account with the PUT method of the rest_
871-
v2/users service. For details, see section [creating a user](https://github.com/boryskolesnykov/jasperserver-rest-client/edit/master/README.md#creating-a-user).
872+
v2/users service. For details, see section [creating a user](https://github.com/Jaspersoft/jrs-rest-java-client/blob/master/README.md#creating-a-user).
872873
####Deleting a Role
873874
To delete a role, send the DELETE method and specify the role ID (name) in the URL.
874875
When this method is successful, the role is permanently deleted.
@@ -1003,7 +1004,7 @@ There are two operations on file resources:
10031004
* Viewing the file resource details to determine the file format
10041005
* Downloading the binary file contents
10051006

1006-
To view the file resource details, specify the URL of the file in `resource()` method and use the code form [Viewing Resource Details](https://github.com/boryskolesnykov/jasperserver-rest-client/edit/master/README.md#viewing-resource-details) section.
1007+
To view the file resource details, specify the URL of the file in `resource()` method and use the code form [Viewing Resource Details](https://github.com/Jaspersoft/jrs-rest-java-client/blob/master/README.md#viewing-resource-details) section.
10071008
To download file binary content, specify the URL of the file in `resource()` method and use the code below
10081009
```java
10091010
OperationResult<InputStream> result = client
@@ -1644,6 +1645,16 @@ acceptMimeType=JSON
16441645
RestClientConfiguration configuration = RestClientConfiguration.loadConfiguration("jrs-client-config.properties");
16451646
```
16461647

1648+
###Logging
1649+
It is possible to log outgoing requests and incoming responses using `logHttp` property of `RestCleintConfiguration`:
1650+
```java
1651+
config.setLogHttp(true);
1652+
```
1653+
Also, you are able to log entities using `logHttpEntity` option:
1654+
```java
1655+
config.setLogHttpEntity(true).
1656+
```
1657+
16471658
###Possible issues
16481659
1. <strong>Deploying jrs-rest-client within web app to any Appplication Server, e.g. JBoss, Glassfish, WebSphere etc.</strong>
16491660
jrs-rest-client uses the implementation of JAX-RS API of version 2.0 and if your application server does not support this version you will get an error. To solve this problem you need to add to your application a deployment configuration specific for your AS where you need to exclude modules with old JAX-RS API version. Example of such descriptor for JBoss AS you can find below:

pom.xml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,29 @@
143143
<artifactId>commons-logging</artifactId>
144144
<version>1.0.4</version>
145145
</dependency>
146+
<!-- Logging -->
147+
<dependency>
148+
<groupId>org.slf4j</groupId>
149+
<artifactId>slf4j-api</artifactId>
150+
<version>1.7.12</version>
151+
</dependency>
152+
153+
<dependency>
154+
<groupId>org.slf4j</groupId>
155+
<artifactId>slf4j-log4j12</artifactId>
156+
<version>1.7.12</version>
157+
</dependency>
158+
<dependency>
159+
<groupId>log4j</groupId>
160+
<artifactId>log4j</artifactId>
161+
<version>1.2.17</version>
162+
</dependency>
163+
164+
<dependency>
165+
<groupId>org.slf4j</groupId>
166+
<artifactId>jul-to-slf4j</artifactId>
167+
<version>1.7.12</version>
168+
</dependency>
146169
</dependencies>
147170

148171

src/integration-test/java/com/jaspersoft/jasperserver/jaxrs/client/apiadapters/authority/users/UsersServiceIT.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.jaspersoft.jasperserver.jaxrs.client.core.JasperserverRestClient;
55
import com.jaspersoft.jasperserver.jaxrs.client.core.RestClientConfiguration;
66
import com.jaspersoft.jasperserver.jaxrs.client.core.Session;
7+
import com.jaspersoft.jasperserver.jaxrs.client.core.enums.JRSVersion;
8+
import com.jaspersoft.jasperserver.jaxrs.client.core.enums.MimeType;
79
import java.util.List;
810
import org.testng.Assert;
911
import org.testng.annotations.AfterMethod;
@@ -21,9 +23,12 @@ public class UsersServiceIT {
2123

2224
@BeforeMethod
2325
public void before() {
24-
25-
RestClientConfiguration cfg = new RestClientConfiguration("http://localhost:4444/jasperserver-pro");
26-
JasperserverRestClient client = new JasperserverRestClient(cfg);
26+
config = new RestClientConfiguration("http://localhost:4444/jasperserver-pro");
27+
config.setAcceptMimeType(MimeType.JSON);
28+
config.setContentMimeType(MimeType.JSON);
29+
config.setJrsVersion(JRSVersion.v6_0_1);
30+
config.setLogHttp(true);
31+
client = new JasperserverRestClient(config);
2732

2833
session = client.authenticate("superuser", "superuser");
2934
}

src/integration-test/java/com/jaspersoft/jasperserver/jaxrs/client/apiadapters/reporting/ReportingServiceIT.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ public class ReportingServiceIT {
2525
@BeforeMethod
2626
public void before() {
2727
configuration = new RestClientConfiguration("http://localhost:4444/jasperserver-pro");
28+
configuration.setLogHttp(true);
29+
configuration.setLogHttpEntity(true);
2830
client = new JasperserverRestClient(configuration);
2931
session = client.authenticate("superuser", "superuser");
3032
}

src/integration-test/java/com/jaspersoft/jasperserver/jaxrs/client/apiadapters/settings/SettingsServiceIT.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public void before() {
4141
config.setAcceptMimeType(MimeType.JSON);
4242
config.setContentMimeType(MimeType.JSON);
4343
config.setJrsVersion(JRSVersion.v6_0_0);
44+
config.setLogHttp(true);
45+
config.setLogHttpEntity(true);
4446
client = new JasperserverRestClient(config);
4547
session = client.getAnonymousSession();
4648
}

src/main/java/com/jaspersoft/jasperserver/jaxrs/client/apiadapters/resources/ResourcesTypeResolverUtil.java

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -42,50 +42,58 @@
4242
import com.jaspersoft.jasperserver.dto.resources.ClientSemanticLayerDataSource;
4343
import com.jaspersoft.jasperserver.dto.resources.ClientVirtualDataSource;
4444
import com.jaspersoft.jasperserver.dto.resources.ClientXmlaConnection;
45-
import com.jaspersoft.jasperserver.jaxrs.client.core.enums.ResourceMediaType;
45+
import com.jaspersoft.jasperserver.dto.resources.ResourceMediaType;
4646
import com.jaspersoft.jasperserver.jaxrs.client.dto.resources.ClientDashboard;
4747
import com.jaspersoft.jasperserver.jaxrs.client.dto.resources.ClientDomainTopic;
48-
4948
import java.util.HashMap;
5049
import java.util.Map;
5150

5251
public class ResourcesTypeResolverUtil {
5352

5453
private static final Map<Class<? extends ClientResource>, String> classToMimeMap;
5554
private static final Map<String, Class<? extends ClientResource>> mimeToClassMap;
55+
public static final String RESOURCE_MEDIA_TYPE_PREFIX = "application/repository.";
56+
public static final String RESOURCE_MIME_TYPE = "+{mime}";
5657

5758
static {
5859
classToMimeMap = new HashMap<Class<? extends ClientResource>, String>() {{
59-
put(ClientAdhocDataView.class, ResourceMediaType.ADHOC_DATA_VIEW_MIME);
60-
put(ClientAwsDataSource.class, ResourceMediaType.AWS_DATA_SOURCE_MIME);
61-
put(ClientBeanDataSource.class, ResourceMediaType.BEAN_DATA_SOURCE_MIME);
62-
put(ClientCustomDataSource.class, ResourceMediaType.CUSTOM_DATA_SOURCE_MIME);
63-
put(ClientDataType.class, ResourceMediaType.DATA_TYPE_MIME);
64-
put(ClientFile.class, ResourceMediaType.FILE_MIME);
65-
put(ClientFolder.class, ResourceMediaType.FOLDER_MIME);
66-
put(ClientInputControl.class, ResourceMediaType.INPUT_CONTROL_MIME);
67-
put(ClientJdbcDataSource.class, ResourceMediaType.JDBC_DATA_SOURCE_MIME);
68-
put(ClientJndiJdbcDataSource.class, ResourceMediaType.JNDI_JDBC_DATA_SOURCE_MIME);
69-
put(ClientListOfValues.class, ResourceMediaType.LIST_OF_VALUES_MIME);
70-
put(ClientMondrianConnection.class, ResourceMediaType.MONDRIAN_CONNECTION_MIME);
71-
put(ClientMondrianXmlaDefinition.class, ResourceMediaType.MONDRIAN_XMLA_DEFINITION_MIME);
72-
put(ClientOlapUnit.class, ResourceMediaType.OLAP_UNIT_MIME);
73-
put(ClientQuery.class, ResourceMediaType.QUERY_MIME);
74-
put(ClientReportUnit.class, ResourceMediaType.REPORT_UNIT_MIME);
75-
put(ClientSecureMondrianConnection.class, ResourceMediaType.SECURE_MONDRIAN_CONNECTION_MIME);
76-
put(ClientSemanticLayerDataSource.class, ResourceMediaType.SEMANTIC_LAYER_DATA_SOURCE_MIME);
77-
put(ClientVirtualDataSource.class, ResourceMediaType.VIRTUAL_DATA_SOURCE_MIME);
78-
put(ClientXmlaConnection.class, ResourceMediaType.XMLA_CONNECTION_MIME);
79-
put(ClientResourceLookup.class, ResourceMediaType.RESOURCE_LOOKUP_MIME);
80-
put(ClientDashboard.class, ResourceMediaType.DASHBOARD_MIME);
81-
put(ClientDomainTopic.class, ResourceMediaType.DOMAIN_TOPIC_MIME);
60+
put(ClientAdhocDataView.class, ResourceMediaType.ADHOC_DATA_VIEW_CLIENT_TYPE);
61+
put(ClientAwsDataSource.class, ResourceMediaType.AWS_DATA_SOURCE_CLIENT_TYPE);
62+
put(ClientBeanDataSource.class, ResourceMediaType.BEAN_DATA_SOURCE_CLIENT_TYPE);
63+
put(ClientCustomDataSource.class, ResourceMediaType.CUSTOM_DATA_SOURCE_CLIENT_TYPE);
64+
put(ClientDataType.class, ResourceMediaType.DATA_TYPE_CLIENT_TYPE);
65+
put(ClientFile.class, ResourceMediaType.FILE_CLIENT_TYPE);
66+
put(ClientFolder.class, ResourceMediaType.FOLDER_CLIENT_TYPE);
67+
put(ClientInputControl.class, ResourceMediaType.INPUT_CONTROL_CLIENT_TYPE);
68+
put(ClientJdbcDataSource.class, ResourceMediaType.JDBC_DATA_SOURCE_CLIENT_TYPE);
69+
put(ClientJndiJdbcDataSource.class, ResourceMediaType.JNDI_JDBC_DATA_SOURCE_CLIENT_TYPE);
70+
put(ClientListOfValues.class, ResourceMediaType.LIST_OF_VALUES_CLIENT_TYPE);
71+
put(ClientMondrianConnection.class, ResourceMediaType.MONDRIAN_CONNECTION_CLIENT_TYPE);
72+
put(ClientMondrianXmlaDefinition.class, ResourceMediaType.MONDRIAN_XMLA_DEFINITION_CLIENT_TYPE);
73+
put(ClientOlapUnit.class, ResourceMediaType.OLAP_UNIT_CLIENT_TYPE);
74+
put(ClientQuery.class, ResourceMediaType.QUERY_CLIENT_TYPE);
75+
put(ClientReportUnit.class, ResourceMediaType.REPORT_UNIT_CLIENT_TYPE);
76+
put(ClientSecureMondrianConnection.class, ResourceMediaType.SECURE_MONDRIAN_CONNECTION_CLIENT_TYPE);
77+
put(ClientSemanticLayerDataSource.class, ResourceMediaType.SEMANTIC_LAYER_DATA_SOURCE_CLIENT_TYPE);
78+
put(ClientVirtualDataSource.class, ResourceMediaType.VIRTUAL_DATA_SOURCE_CLIENT_TYPE);
79+
put(ClientXmlaConnection.class, ResourceMediaType.XMLA_CONNECTION_CLIENT_TYPE);
80+
put(ClientResourceLookup.class, ResourceMediaType.RESOURCE_LOOKUP_CLIENT_TYPE);
81+
put(ClientDashboard.class, ResourceMediaType.DASHBOARD_CLIENT_TYPE);
82+
put(ClientDomainTopic.class, ResourceMediaType.DOMAIN_TOPIC_CLIENT_TYPE);
8283
}};
8384

85+
for (Map.Entry<Class<? extends ClientResource>, String> entry : classToMimeMap.entrySet()) {
86+
entry.setValue(typeToMime(entry.getValue()));
87+
}
88+
8489
mimeToClassMap = new HashMap<String, Class<? extends ClientResource>>();
8590
for (Map.Entry<Class<? extends ClientResource>, String> entry : classToMimeMap.entrySet()) {
8691
mimeToClassMap.put(entry.getValue(), entry.getKey());
8792
}
8893
}
94+
private static String typeToMime(String type) {
95+
return RESOURCE_MEDIA_TYPE_PREFIX + type + RESOURCE_MIME_TYPE;
96+
}
8997

9098
public static String getMimeType(Class<? extends ClientResource> clazz) {
9199
return classToMimeMap.get(clazz);

src/main/java/com/jaspersoft/jasperserver/jaxrs/client/core/JasperserverRestClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
package com.jaspersoft.jasperserver.jaxrs.client.core;
2222

2323
import com.jaspersoft.jasperserver.jaxrs.client.core.enums.AuthenticationType;
24-
import com.jaspersoft.jasperserver.jaxrs.client.core.enums.ResponseStatus;
24+
import javax.ws.rs.core.Response.Status;
2525
import com.jaspersoft.jasperserver.jaxrs.client.core.exceptions.handling.DefaultErrorHandler;
2626
import com.jaspersoft.jasperserver.jaxrs.client.filters.BasicAuthenticationFilter;
2727
import com.jaspersoft.jasperserver.jaxrs.client.filters.SessionOutputFilter;
@@ -73,7 +73,7 @@ protected void login(SessionStorage storage) {
7373
String sessionId = null;
7474
String location = response.getLocation().toString();
7575

76-
if (response.getStatus() == ResponseStatus.FOUND && !location.matches("[^?]+\\?([^&]*&)*error=1(&[^&]*)*$")) {
76+
if (response.getStatus() == Status.FOUND.getStatusCode() && !location.matches("[^?]+\\?([^&]*&)*error=1(&[^&]*)*$")) {
7777
sessionId = response.getCookies().get("JSESSIONID").getValue();
7878
storage.setSessionId(sessionId);
7979
} else {

src/main/java/com/jaspersoft/jasperserver/jaxrs/client/core/MimeTypeUtil.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,23 @@
2121

2222
package com.jaspersoft.jasperserver.jaxrs.client.core;
2323

24+
import com.jaspersoft.jasperserver.dto.resources.ResourceMediaType;
2425
import com.jaspersoft.jasperserver.jaxrs.client.core.enums.MimeType;
2526

2627
public class MimeTypeUtil {
2728

28-
private static final String JSON_SUFFIX = "json";
29-
private static final String XML_SUFFIX = "xml";
3029

3130
public static String toCorrectContentMime(RestClientConfiguration configuration, String srcMime) {
32-
if (srcMime.endsWith("+{mime}")) {
33-
return srcMime.replace("{mime}", configuration.getContentMimeType() == MimeType.JSON ? JSON_SUFFIX : XML_SUFFIX);
34-
}
35-
return srcMime;
31+
return replaceMime(configuration.getContentMimeType(), srcMime);
3632
}
3733

3834
public static String toCorrectAcceptMime(RestClientConfiguration configuration, String srcMime) {
35+
return replaceMime(configuration.getAcceptMimeType(), srcMime);
36+
}
37+
38+
private static String replaceMime(MimeType configMimeType, String srcMime) {
3939
if (srcMime.endsWith("+{mime}")) {
40-
return srcMime.replace("{mime}", configuration.getAcceptMimeType() == MimeType.JSON ? JSON_SUFFIX : XML_SUFFIX);
40+
return srcMime.replace("+{mime}", configMimeType == MimeType.JSON ? ResourceMediaType.RESOURCE_JSON_TYPE : ResourceMediaType.RESOURCE_XML_TYPE);
4141
}
4242
return srcMime;
4343
}

src/main/java/com/jaspersoft/jasperserver/jaxrs/client/core/RestClientConfiguration.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,10 @@ public class RestClientConfiguration {
4949
private JRSVersion jrsVersion = JRSVersion.v5_5_0;
5050
private AuthenticationType authenticationType = AuthenticationType.SPRING;
5151
private Boolean restrictedHttpMethods = false;
52+
private Boolean logHttp = false;
53+
private Boolean logHttpEntity = false;
5254
private TrustManager[] trustManagers;
5355
private Integer connectionTimeout;
54-
5556
private Integer readTimeout;
5657

5758
public RestClientConfiguration(String jasperReportsServerUrl) {
@@ -87,10 +88,10 @@ public void setJasperReportsServerUrl(String jasperReportsServerUrl) {
8788
throw new IllegalArgumentException("Given parameter is not a URL");
8889
this.jasperReportsServerUrl = jasperReportsServerUrl;
8990
}
91+
9092
public AuthenticationType getAuthenticationType() {
9193
return authenticationType;
9294
}
93-
9495
public void setAuthenticationType(AuthenticationType authenticationType) {
9596
this.authenticationType = authenticationType;
9697
}
@@ -151,6 +152,22 @@ public void setRestrictedHttpMethods(Boolean restrictedHttpMethods) {
151152
this.restrictedHttpMethods = restrictedHttpMethods;
152153
}
153154

155+
public Boolean getLogHttp() {
156+
return logHttp;
157+
}
158+
159+
public void setLogHttp(Boolean logHttp) {
160+
this.logHttp = logHttp;
161+
}
162+
163+
public Boolean getLogHttpEntity() {
164+
return logHttpEntity;
165+
}
166+
167+
public void setLogHttpEntity(Boolean logHttpEntity) {
168+
this.logHttpEntity = logHttpEntity;
169+
}
170+
154171
public static RestClientConfiguration loadConfiguration(String path) {
155172
Properties properties = loadProperties(path);
156173

src/main/java/com/jaspersoft/jasperserver/jaxrs/client/core/SessionStorage.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
2727

2828
import org.glassfish.jersey.client.ClientProperties;
29+
import org.glassfish.jersey.filter.LoggingFilter;
2930
import org.glassfish.jersey.jackson.JacksonFeature;
31+
import org.slf4j.bridge.SLF4JBridgeHandler;
3032

3133

3234
import javax.net.ssl.HostnameVerifier;
@@ -37,6 +39,7 @@
3739
import javax.ws.rs.client.WebTarget;
3840

3941
import java.security.SecureRandom;
42+
import java.util.logging.Logger;
4043

4144

4245
public class SessionStorage {
@@ -97,7 +100,18 @@ private void init() {
97100
rootTarget = client.target(configuration.getJasperReportsServerUrl());
98101
rootTarget.register(JacksonFeature.class);
99102
rootTarget.register(provider);
103+
if (configuration.getLogHttp()) {
104+
rootTarget.register(initLoggingFilter());
105+
}
106+
}
107+
108+
private LoggingFilter initLoggingFilter() {
109+
Logger logger = Logger.getLogger(this.getClass().getName());
110+
SLF4JBridgeHandler.removeHandlersForRootLogger();
111+
SLF4JBridgeHandler.install();
100112

113+
return new LoggingFilter(logger,
114+
configuration.getLogHttpEntity());
101115
}
102116

103117

0 commit comments

Comments
 (0)