2015-09-04 2 views
0

Я пытаюсь подключиться к smartsheet api с помощью java sdk, который они предоставили. Я всего лишь новичок в java и программировании и совершенно новый для smartsheet.Ошибка при подключении к Smartsheet с использованием Java API

Вот мой код (из http://smartsheet-platform.github.io/api-docs/?java#generating-access-token)

import com.smartsheet.api.*; 
import com.smartsheet.api.models.*; 
import com.smartsheet.api.models.enums.SourceInclusion; 
import com.smartsheet.api.models.enums.ColumnType; 
import com.smartsheet.api.oauth.*; 

public class Test { 
    public static void main(String[] args) throws SmartsheetException { 
     SampleCode(); 
    } 

    public static void SampleCode() throws SmartsheetException { 
     // Set the Access Token 
     Token token = new Token(); 
     token.setAccessToken("MY TOKEN"); 

     // Use the Smartsheet Builder to create a Smartsheet 
     Smartsheet smartsheet = new SmartsheetBuilder().setAccessToken(
       token.getAccessToken()).build(); 

     // Get current user. 
     smartsheet.userResources().getCurrentUser(); 
    } 

} 

Это ошибка я получаю.

Exception in thread "main" com.smartsheet.api.internal.http.HttpClientException: Error occurred. 
    at com.smartsheet.api.internal.http.DefaultHttpClient.request(DefaultHttpClient.java:169) 
    at com.smartsheet.api.internal.AbstractResources.getResource(AbstractResources.java:192) 
    at com.smartsheet.api.internal.UserResourcesImpl.getCurrentUser(UserResourcesImpl.java:179) 
    at com.target.test.Test.SampleCode(Test.java:25) 
    at com.target.test.Test.main(Test.java:12) 
Caused by: 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 
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949) 
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302) 
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1506) 
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216) 
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) 
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:914) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) 
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394) 
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353) 
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:134) 
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353) 
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380) 
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) 
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184) 
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88) 
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) 
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107) 
    at com.smartsheet.api.internal.http.DefaultHttpClient.request(DefaultHttpClient.java:149) 
    ... 4 more 
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387) 
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) 
    at sun.security.validator.Validator.validate(Validator.java:260) 
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) 
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229) 
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1488) 
    ... 24 more 
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:146) 
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:131) 
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) 
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) 
    ... 30 more 

ответ

1

Ошибка довольно много говорит вам о том, что происходит не так

unable to find valid certification path to requested target 

цепочку сертификатов, возвращаемый сервером не является действительным. Это может произойти из-за множества причин, скорее всего, из-за самоподписанного/истекшего/недействительного сертификата.

Вы можете проверить сертификаты возвращаются с сервера, используя следующий Linux Command:

openssl s_client -showcerts -connect yourserverUrl:port 

Проблема, скорее всего, находится на стороне сервера, но для целей тестирования можно обойти ошибки проверки сертификатов, добавив сертификаты на ваш keystore as trused certs. Вот команда, чтобы добавить сертификат в KeyStore:

keytool -import -trustcacerts -file intermediate.crt -alias intermediateCA -keystore $JAVA_HOME/jre/lib/security/cacerts 

В рамках этого импорта Вам будет предложено доверять серт, такое сообщение:

Trust this certificate? 

Просто введите да и вы должны будь хорошим.

+0

Что нужно сделать, чтобы сделать его действительным? Это проблема со стороны сервера? – mahacoder

+0

@ ak31 Проверьте обновления моего ответа –

+0

Да, я проверяю его. – mahacoder