Java

 

 

In diesem Abschnitt wird beschrieben, wie das Swagger-SDK-Client-Jar mit Maven oder Gradle generiert wird.

 

 

Maven

 

Um den Client-SDK-Jar mit Maven zu erstellen, folgen Sie diesen Schritten:

 

  1. Laden Sie die Java-SDK-Zip-Datei herunter.

  2. Packen Sie die Zip-Datei aus.

  3. Wechseln Sie in das Verzeichnis, in welches die Dateien ausgepackt wurden.

  4. Führen Sie den folgenden Befehl aus, um den Client-SDK-JAR zu erstellen:

    maven clean package

  5. Sie können das Java-Client-SDK-jar im Verzeichnis target/ finden.

 

 

Gradle

 

Um das Client-SDK mit Gradle zu erstellen, folgen Sie diesen Schritten:

 

  1. Laden Sie die Java-SDK-Zip-Datei herunter.

  2. Packen Sie die Zip-Datei aus.

  3. Wechseln Sie in das Verzeichnis, in welches die Dateien ausgepackt wurden.

  4. Führen Sie die gradlew.bat Datei aus.

  5. Führen Sie den folgenden Befehl aus, um den Client-SDK-JAR zu erstellen:

    gradle build

  6. Sie finden die jar-Datei im Unterverzeichnis build/libs/.

 

 

Weitere Informationen zum Erstellen des Client-SDK-JAR finden Sie in der Datei README.md des SDK.

 

 

Zusätzliche Dependencies

 

Wenn Sie das generierte jar in den Build-Pfad Ihres Projekts einfügen, denken Sie daran, dass Sie auch auf die Swagger Client-Abhängigkeiten verweisen müssen Wenn Sie maven oder gradle in Ihrem Java-Projekt verwenden, kopieren Sie einfach die Abhängigkeiten aus der Datei pom.xml oder gradle.properties von maven in die Build-Datei Ihres Projekts. Wenn Sie Gradle oder Maven nicht verwenden, müssen die folgenden jars dem Build-Pfad hinzugefügt werden:

 

threetenbp-1.3.5.jar

swagger-annotations-2.0.0.jar

okio-1.6.0.jar

okhttp-2.7.5.jar

logging-interceptor-2.7.5.jar

javax.annotation-api-1.3.2.jar

hamcrest-core-1.3.jar

gson-fire-1.8.3.jar

gson-2.8.1.jar

 

 

SSL Zertifikat Probleme

 

Sobald das JAR erfolgreich erstellt und dem Erstellungspfad Ihres Projekts hinzugefügt wurde, können Sie mit dem Erstellen einiger Anforderungen beginnen, um die API abzufragen. Wenn Ihr Gateway mit dem Standardzertifikat oder einem anderen selbstsignierten Zertifikat ausgeführt wird, erhalten Sie höchstwahrscheinlich die folgende Ausnahme für jede Zertifikatsanfrage:

 

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:439)

at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:306)

at java.base/sun.security.validator.Validator.validate(Validator.java:264)

at java.base/sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:313)

at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:222)

at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:129)

at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:629)

at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:464)

at java.base/sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:360)

at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392)

at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)

at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:422)

at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:183)

at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:171)

at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1403)

at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1309)

at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:440)

at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:411)

at com.squareup.okhttp.internal.io.RealConnection.connectTls(RealConnection.java:192)

at com.squareup.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:149)

at com.squareup.okhttp.internal.io.RealConnection.connect(RealConnection.java:112)

at com.squareup.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184)

at com.squareup.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)

at com.squareup.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)

at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)

at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)

at com.squareup.okhttp.Call.getResponse(Call.java:286)

at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:243)

at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:205)

at com.squareup.okhttp.Call.execute(Call.java:80)

at io.swagger.client.ApiClient.execute(ApiClient.java:840)

at io.swagger.client.api.MessagesApi.messagesPostWithHttpInfo(MessagesApi.java:543)

at io.swagger.client.api.MessagesApi.messagesPost(MessagesApi.java:529)

at brevis.one.Demo.main(Demo.java:82)

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)

at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)

at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297)

at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:434)

... 33 more

 

 

Diese Ausnahme wird ausgelöst, weil das Zertifikat des Gateways ungültig ist, z.B. not signed by a CA. Um dieses Problem zu beheben, können Sie entweder ein gültiges Zertifikat (empfohlen) installieren oder die folgenden Schritte wiederholen, um Java zu informieren dass Sie dem Zertifikat des Gateways vertrauen (nur zum Testen empfohlen):

 

  1. Laden Sie das Zertifikat des Gateways als "DER-codierte Binärdatei X.509 (.CER)" mit einem beliebigen Browser herunter.

  2. Navigieren Sie zu Ihrem Java-Ausgangsverzeichnis.

  3. Navigieren Sie in das Unterverzeichnis lib/security.

  4. Führen Sie den folgenden Befehl aus, um das heruntergeladene Zertifikat zur Liste der akzeptierten Zertifikate hinzuzufügen:

 

..\..\bin\keytool.exe -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias smsgw -file <path_to_downloaded_certificate>

 

 

i Ersetzen Sie <Pfad zum heruntergeladenen Zertifikat> mit dem tatsächlichen Pfad der heruntergeladenen Zertifikatsdatei. Es ist wichtig, diesen Befehl in diesem spezifischen Verzeichnis auszuführen, da das Zertifikat der cacerts-Datei aus diesem Verzeichnis hinzugefügt wird.

 

 

Sobald Sie die oben genannten Schritte befolgt haben, werden Sie die SSL-bezogenen Ausnahmen überwinden, aber die Anforderungen könnten immer noch fehlschlagen, wenn Sie versuchen auf das Gateway zuzugreifen, indem es seine IP-Adresse oder einen anderen Hostnamen als den im Zertifikat beschriebenen verwendet:

 

io.swagger.client.ApiException: javax.net.ssl.SSLPeerUnverifiedException: Hostname 10.66.115.129 not verified:

certificate: sha1/9UKaRIiZ5plr7Be+qy0X8NwMqMw=

DN: CN=braintower-sms-gateway, O=Braintower Technologies GmbH, L=Sankt Ingbert, ST=Saarland, C=Germany

subjectAltNames: [braintower-sms-gateway, braintower-sms-gateway.brain-tower.net, 192.168.24.202, localhost, 127.0.0.1]

at io.swagger.client.ApiClient.execute(ApiClient.java:844)

at io.swagger.client.api.MessagesApi.messagesPostWithHttpInfo(MessagesApi.java:543)

at io.swagger.client.api.MessagesApi.messagesPost(MessagesApi.java:529)

at brevis.one.Demo.main(Demo.java:89)

 

 

Diese Ausnahme wird ausgelöst, weil der CN (Common Name) des Gateway-Zertifikats standardmäßig auf "Braintower-SMS-Gateway" verweist und Sie versuchen auf das Gateway mit seiner IP oder einem anderen Namen zuzugreifen. Um diese Ausnahme zu umgehen, können Sie in Ihrem Java-Code einen sogenannten "Null-Hostnamen-Verifizierer" erstellen, der alle Hostnamen für alle Zertifikate akzeptiert. Alternativ können Sie nur die IP / den Hostnamen des Gateways überprüfen.

 

Das folgende Beispiel zeigt, wie man einen benutzerdefinierten Hostnamen-Prüfer hinzufügt, um einen beliebigen Hostnamen zu akzeptieren, wenn die Nachrichten-API abgefragt wird:

 

MessagesApi apiMessages = new MessagesApi();

ApiClient client = apiMessages.getApiClient();

client.getHttpClient().setHostnameVerifier(new HostnameVerifier() {

@Override

public boolean verify(String hostname, SSLSession session) {

return true;

}

});

 

 

i Sie müssen Ihren benutzerdefinierten Hostnamen-Prüfer zu jeder API-Klasse hinzufügen, auf die Sie zugreifen möchten. Es reicht nicht aus, es einmal zur ApiClient-Klasse hinzuzufügen.