Resolución de problemas: Servicios web

Problema: Los servicios web devuelven un código de error y una serie de error en el cuerpo SOAP (ejemplo 1)

Obtendrá un error parecido al siguiente ejemplo:


<soapenv:Envelope
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
   <soapenv:Body>
      <soapenv:Fault>
     
<faultcode>soapenv:Server.generalException</faultcode>
     
<faultstring>com.ibm.wsspi.channel.framework.exception.ChannelException:
com.ibm.wsspi.channel.framework.exception.ChannelException:
 Invalid trust file name of null</faultstring>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>

Solución:

El cliente de servicios web no ha especificado ningún almacén de confianza, por lo que deberá configurar el cliente de servicios web de modo que haga referencia al archivo de base de datos de claves. Añada las siguientes líneas al código de cliente de servicios web:

System.setProperty("javax.net.ssl.trustStore"," filename"); System.setProperty("javax.net.ssl.trustStorePassword"," password"); System.setProperty("javax.net.ssl.keyStore"," filename"); System.setProperty("javax.net.ssl.keyStorePassword"," password");

Donde:

  • filename es el nombre de archivo del archivo de base de datos de claves, por ejemplo, C:/key.jks.
  • password Es la contraseña del archivo de base de datos de claves.

También puede añadir estas propiedades como argumentos de línea de mandatos, por ejemplo, -Djavax.net.ssl.trustStore=

nombrearchivo

Problema: Los servicios web devuelven un código de error y una serie de error en el cuerpo SOAP (ejemplo 2)

Obtendrá un error parecido al siguiente ejemplo:


<soapenv:Envelope
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"t;
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
   <soapenv:Body>
      <soapenv:Fault>
     
<faultcode>soapenv:Server.generalException</faultcode>
     
<faultstring>com.ibm.wsspi.channel.framework.exception.ChannelException:
com.ibm.wsspi.channel.framework.exception.ChannelException:
No key store specified and no hardware crypto
defined</faultstring>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>

Solución:

El cliente de servicios web no ha especificado ningún almacén de confianza, por lo que deberá configurar el cliente de servicios web de modo que haga referencia al archivo de base de datos de claves. Añada las siguientes líneas al código de cliente de servicios web:

System.setProperty("javax.net.ssl.trustStore", " filename"); System.setProperty("javax.net.ssl.trustStorePassword", " password"); System.setProperty("javax.net.ssl.keyStore", " filename"); System.setProperty("javax.net.ssl.keyStorePassword", " password");

Donde:

  • filename es el nombre de archivo del archivo de base de datos de claves, por ejemplo, C:/key.jks.
  • password Es la contraseña del archivo de base de datos de claves. También puede añadir estas propiedades como argumentos de línea de mandatos, por ejemplo, -Djavax.net.ssl.trustStore= filename

Problema: Los servicios web devuelven un código de error y una serie de error en el cuerpo SOAP (ejemplo 3).

Obtendrá un error parecido al siguiente ejemplo:


 <?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
   <soapenv:Body>
      <soapenv:Fault>
     
<faultcode>soapenv:Server.generalException</faultcode>
      <faultstring>WSWS3713E: Connection to the remote host
localhost failed.Received the following error: Handshake terminated
SSL engine:
CLOSED</faultstring>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>

Solución:

El almacén de confianza al que hace referencia el cliente de servicios web no tiene el certificado de servidor como certificado de firmante. Realice los pasos siguientes:

  1. Extraiga el certificado autofirmado y añádalo a un nuevo archivo de base de datos de claves.
  2. Utilice el programa de utilidad de gestión de claves para abrir el archivo keyfile.kdb, seleccione el certificado autofirmado y Haga clic en Extraer certificado para extraer el certificado en un archivo.
  3. Con el programa de utilidad de gestión de claves, seleccione Archivo de base de datos de claves > Nuevo para crear un nuevo archivo de base de datos de claves. Nota: el tipo de base de datos de claves debe ser "JKS". Escriba el nombre y la contraseña para el archivo de base de datos.
  4. Seleccione Certificado de firmante y Haga clic en Añadir para añadir el certificado autofirmado al archivo de almacén de claves/confianza. Escriba la etiqueta de certificado.
  5. Cierre el programa de utilidad de gestión de claves para guardar los cambios.