Necesito escribir un cliente de servicio web para llamar a un servicio web de terceros (basado en SOAP). El tercero publicó un wsdl y los archivos xsd asociados.Llamar a un servicio web seguro en Java
El tercero asegurar su sitio web y el uso de los servicios p.12 certificados
he usado para generar wsdl2java mis talones. Modifiqué los puntos finales y llamé al servicio. Recibí el siguiente error:
<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>
Hmmm, ok. Tiene sentido que debería firmar el documento.
La parte extraña (para mí) es que no hay una definición de seguridad en ningún lugar del archivo WSDL. ¿Esto es normal? Me puse en contacto con el tercero y me enviaron un pdf de cómo debe ser el mensaje SOAP. Las siguientes etiquetas aparecen en el encabezamiento: que contiene:
<wsse:BinarySecurityToken>
y
<dsig:SignedInfo>
por lo que desde lo que se reúnen, se requiere mi certificado y algunas firmas digitales.
¿Alguien puede recomendar cómo generar estos en Java? Comencé por el camino de Axis2/Rampart pero, sinceramente, parece que se basan en que los requisitos de seguridad estén definidos en el archivo WSDL (corríjanme si me equivoco).
En realidad, hice algunos progresos con Rampart después de leer su comentario. Creo que necesitaba que alguien realmente me dijera que la definición de seguridad no era necesaria en el servicio para poder avanzar. Por extraño que parezca. –