Мне нужно написать клиент веб-сервиса для вызова стороннего веб-сервиса (на основе SOAP).Третья сторона опубликовала wsdl и связанные файлы xsd.
Третьи лица защищают свой веб-сайт и службы с помощью сертификатов .p12
Я использовал wsdl2java для создания своих заглушек.Я изменил конечные точки и позвонил в сервис.Я получил следующую ошибку:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header></SOAP-ENV:Header>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">wsse:InvalidSecurity</faultcode>
<faultstring>SECU1075: An error was discovered processing the <wsse:Security> header</faultstring>
<detail>SECU3510: Signature requirements validation failed: Element (/soapenv:Envelope/soapenv:Body) was not signed</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Хммм, ок.Имеет смысл, что я должен подписывать документ.
Странная часть (для меня) в том, что в файле WSDL нет определения безопасности.Это нормально?Я связался с третьей стороной, и они прислали мне PDF-файл о том, как должно выглядеть сообщение SOAP.В заголовке отображаются следующие теги: содержащие:
<wsse:BinarySecurityToken>
и
<dsig:SignedInfo>
, поэтому, исходя из того, что я собираю, для этого требуется мой сертификат и некоторые цифровые подписи.Может кто-нибудь порекомендовать, как сгенерировать их в Java?Я начал с пути Axis2 / Rampart, но, честно говоря, похоже, что они основаны на определении требований безопасности в файле WSDL (поправьте меня, если я ошибаюсь).