Feby Baby created OLINGO-1216:
---------------------------------
Summary: How to consume Odata service having self-signed
certificate using Olingo in java?
Key: OLINGO-1216
URL: https://issues.apache.org/jira/browse/OLINGO-1216
Project: Olingo
Issue Type: Question
Components: odata4-client
Affects Versions: (Java) V4 4.4.0
Environment: java, Spring boot
Reporter: Feby Baby
Priority: Blocker
I am trying to consume Redfish API which uses OData service in Java using
Spring boot application.
I understand that Olingo and Odata4j are the java libraries for consuming OData
service. I tried using Olingo but getting error as the https server is having a
self-signed certificate. Initially, I tried to access the redfish API using
RestTemplate which worked out well. But for getting @odata.id tag information,
we need to use the OData specific library.
Sample json output of Redfish API:
{
@odata.context: "/redfish/v1/$metadata#ServiceRoot.ServiceRoot",
@odata.id: "/redfish/v1",
@odata.type: "#ServiceRoot.v1_0_2.ServiceRoot",
AccountService: {
@odata.id: "/redfish/v1/Managers/iDRAC.Embedded.1/AccountService"
},
Chassis: {
@odata.id: "/redfish/v1/Chassis"
},
Description: "Root Service",
EventService: {
@odata.id: "/redfish/v1/EventService"
},
Id: "RootService",
JsonSchemas: {
@odata.id: "/redfish/v1/JSONSchemas"
},
Links: {
Sessions: {
@odata.id: "/redfish/v1/Sessions"
}
},
Managers: {
@odata.id: "/redfish/v1/Managers"
},
Name: "Root Service",
RedfishVersion: "1.0.2",
Registries: {
@odata.id: "/redfish/v1/Registries"
},
SessionService: {
@odata.id: "/redfish/v1/SessionService"
},
Systems: {
@odata.id: "/redfish/v1/Systems"
},
Tasks: {
@odata.id: "/redfish/v1/TaskService"
}
}
Code:
ODataClient client = ODataClientFactory.getClient();
String serviceUrl = "https://IP_address/redfish/v1/Systems/";
client.getConfiguration().setHttpClientFactory(new
BasicAuthHttpClientFactory("[uname]", "[pswd]"));
URI absoluteUri = client.newURIBuilder(serviceUrl).build();
ODataEntitySetIteratorRequest<ClientEntitySet, ClientEntity> request =
client.getRetrieveRequestFactory().getEntitySetIteratorRequest(absoluteUri);
// odata4 sample/server limitation not handling metadata=full
request.setAccept("application/json;odata.metadata=minimal");
ODataRetrieveResponse<ClientEntitySetIterator<ClientEntitySet,
ClientEntity>> response = request.execute();
ClientEntitySetIterator<ClientEntitySet, ClientEntity> iterator =
response.getBody();
I am getting the following certificate related error while trying to consume
the OData service API:
[Request processing failed; nested exception is
org.apache.olingo.client.api.http.HttpClientException:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target] with root cause
sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target
at
sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
~[na:1.8.0_92]
at
sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
~[na:1.8.0_92]
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
~[na:1.8.0_92]
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382)
~[na:1.8.0_92]
at
sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
~[na:1.8.0_92]
at sun.security.validator.Validator.validate(Validator.java:260)
~[na:1.8.0_92]
at
sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
~[na:1.8.0_92]
at
sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)
~[na:1.8.0_92]
at
sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
~[na:1.8.0_92]
at
sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491)
~[na:1.8.0_92]
at
sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
~[na:1.8.0_92]
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
~[na:1.8.0_92]
at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
~[na:1.8.0_92]
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
~[na:1.8.0_92]
at
sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
~[na:1.8.0_92]
at
sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
~[na:1.8.0_92]
at
sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
~[na:1.8.0_92]
at
org.apache.http.conn.ssl.SSLSocketFactory.createLayeredSocket(SSLSocketFactory.java:573)
~[httpclient-4.5.3.jar:4.5.3]
at
org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:557)
~[httpclient-4.5.3.jar:4.5.3]
at
org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:414)
~[httpclient-4.5.3.jar:4.5.3]
at
org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
~[httpclient-4.5.3.jar:4.5.3]
at
org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:326)
~[httpclient-4.5.3.jar:4.5.3]
at
org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
~[httpclient-4.5.3.jar:4.5.3]
at
org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
~[httpclient-4.5.3.jar:4.5.3]
at
org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
~[httpclient-4.5.3.jar:4.5.3]
at
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
~[httpclient-4.5.3.jar:4.5.3]
at
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
~[httpclient-4.5.3.jar:4.5.3]
at
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
~[httpclient-4.5.3.jar:4.5.3]
at
org.apache.olingo.client.core.communication.request.AbstractODataRequest.doExecute(AbstractODataRequest.java:301)
~[odata-client-core-4.4.0.jar:na]
at
org.apache.olingo.client.core.communication.request.retrieve.ODataEntitySetIteratorRequestImpl.execute(ODataEntitySetIteratorRequestImpl.java:59)
~[odata-client-core-4.4.0.jar:na]
at
org.apache.olingo.client.core.communication.request.retrieve.ODataEntitySetIteratorRequestImpl.execute(ODataEntitySetIteratorRequestImpl.java:36)
~[odata-client-core-4.4.0.jar:na]
Kindly help me to resolve the issue.
Please find below the links which I referred.
[https://templth.wordpress.com/2015/04/27/implementing-an-odata-service-with-olingo/][1]
[1]:
https://templth.wordpress.com/2015/04/27/implementing-an-odata-service-with-olingo/
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)