[ https://issues.apache.org/jira/browse/OLINGO-1216?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Feby Baby updated OLINGO-1216: ------------------------------ Description: 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 informations, 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/ was: I am trying to consume Redfish API which uses OData service in Java using Spring boot application. [Redfish—a next generation management standard using a data model representation inside a hypermedia RESTful interface. The data model is defined in terms of a standard, machine-readable schema, with the payload of the messages expressed in JSON and the protocol using OData v4.] 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 informations, 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/ > 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 > informations, 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)