У меня возникли проблемы с отправкой простого запроса SOAP и получением ответа внутри моего проекта java.Не удается подключиться к службе SOAP через Java и IntelliJ
Я до сих пор довольно новичок в этом, используя java, поэтому я смотрю на this учебник, так как я также использую весеннюю загрузку в остальной части моего проекта.
В настоящее время я получаю эту ошибку (мне пришлось удалить специфику из-за того, что она связана с компанией и заменила ее на общие строки, чтобы вставить их здесь. Мне пришлось удалить мой фактический wsdl и фактическое имя хоста):
[INFO] --- maven-jaxb2-plugin:0.12.3:generate (default) @ dcc-vm-validation ---
[INFO] Up-to-date check for source resources [[myWsdl, file:pom.xml]] and taret resources [[]].
[WARNING] The URI [myWsdl] seems to represent an absolute HTTP or HTTPS URL. Getting the last modification timestamp is only possible if the URL is accessible and if the server returns the [Last-Modified] header correctly. This method is not reliable and is likely to fail. In this case the last modification timestamp will be assumed to be unknown.
[ERROR] Could not retrieve the last modification timestamp for the URI [myWsdl] from the HTTP URL connection. The [Last-Modified] header was probably not set correctly.
[WARNING] Last modification of the URI [myWsdl] is not known.
[INFO] Sources are not up-to-date, XJC will be executed.
[ERROR] Error while parsing schema(s).Location [].
com.sun.istack.SAXParseException2; IOException thrown when processing "myWsdl". Exception: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching hostname found.
Вот мой раздел «сборка» мой П:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.12.3</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaLanguage>WSDL</schemaLanguage>
<generatePackage>package.wsdl</generatePackage>
<schemas>
<schema>
<url>myWsdl</url>
</schema>
</schemas>
</configuration>
</plugin>
</plugins>
</build>
После выполнения некоторых исследований о том, что означает, что эта конкретная ошибка, я был в состоянии загрузить самостоятельно подписанный сертификат от местоположения WSDL (через Chrome) на рабочий стол. Затем я использовал keytool для добавления этого конкретного сертификата в мой файл cacerts (я убедился, что псевдоним cert соответствует имени хоста в вышеприведенной ошибке). Насколько мне сказали, это устранит мои проблемы с подключением, но это не так. Я все еще вижу ту же ошибку, что и выше, говоря, что она не может найти мое имя хоста.
Что мне здесь не хватает?
В качестве альтернативы, я также прочитал об обходе сертификатов вообще. Это также подход, против которого я бы не стал возражать, поскольку этот проект, над которым я работаю, является ТОЛЬКО внутренним и будет находиться в интранете компании. Он не будет доступен никому, кроме сотрудников, поэтому риски безопасности могут быть проигнорированы. Я знаю, что это считается плохой практикой, но я уже читал риски и обсуждал это с моим боссом, и он в порядке, если мы идем по этому маршруту.
я смог найти этот небольшой фрагмент кода, который, кажется, чтобы сделать работу:
static {
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(new javax.net.ssl.HostnameVerifier() {
public boolean verify(String hostname, javax.net.ssl.SSLSession session) {
if (hostname.equals(myHostname)) {
return true;
}
return false;
}
});
}
, но во всех примерах, которые я нашел, что это ни разу не указано, куда его положить. Он просто сказал, что это то, что вам нужно игнорировать SSL и самозаверяющие ошибки сертификата. Где бы я поместил это в соответствие с моим кодом и есть ли конкретный способ сделать это, так как я пытаюсь сделать это через spring/jaxb?
Извините за длинную извилистую стену! Просто пытаюсь узнать что-то новое здесь :)
Можете ли вы запросить ответ от другого клиента, например POSTMAN или SOAPUI или Boomerang? –
Да. Я действительно могу отправить запрос и получить действительный ответ как с SoapUI, так и с Postman. Я попытался правильно отразить заголовки в java-коде, так как есть основная авторизация, которая также случается, но я не уверен, что я даже ударил эту часть, пока я получаю эту ошибку. – user1818298
Вы правы, что не получаете доступ к основному auth (или другому протоколу HTTP). Псевдоним в доверенности не имеет значения; имеет значение имя хоста в URL (который вы отредактировали) и имя хоста в сертификате. Вы уже сделали локальную копию сертификата; посмотрите на него с помощью keytool -printcert и используйте либо Owner CN (CommonName), либо одно из имен (или, возможно, адресов) из SubjectAlternativeName, если они есть. НЕ меняйте имя домена на адрес или наоборот; во многих сетевых контекстах они эквивалентны, но не для HTTPS. –