Utilización de un servicio web SOAP

Una aplicación cliente puede invocar un conjunto de reglas de servicio de decisiones como servicio web SOAP.

Antes de empezar

La aplicación cliente debe pasar las credenciales de autenticación para el portal en la nube (consulte Autenticación para invocación REST y SOAP ).

Nota:Operational Decision Manager on Cloud admite SOAP 1.1. No es compatible con versiones posteriores de SOAP.

Acerca de esta tarea

Para que una aplicación cliente invoque un conjunto de reglas de servicio de decisiones como servicio web SOAP, debe crear clases proxy a partir de un archivo de formato de lenguaje de descripción web (WSDL) generado para la vía de acceso de conjunto de reglas. El formato de un archivo WSDL es independiente del lenguaje que lo genera.

Procedimiento

  1. Obtenga un archivo WDSL para un conjunto de reglas de servicio de decisiones.
  2. Genere las clases proxy a partir del archivo WSDL.
  3. Utilice las clases proxy para invocar el conjunto de reglas desde la aplicación cliente.

Ejemplo

Para obtener un archivo WSDL del servidor de ejecución de reglas :
  1. Implemente el conjunto de reglas en el servidor de ejecución de reglas.
  2. En la consola del servidor de ejecución de reglas, vaya a la pestaña Explorador.
  3. En el panel Navegador, pulse una RuleApp y pulse a continuación el conjunto de reglas correspondiente al servicio de decisiones.
  4. En la Vista de conjunto de reglas, pulse Recuperar archivo de descripción HTDS.
  5. Seleccione SOAP como tipo de protocolo de servicio.
  6. Marque Versión más reciente del conjunto de reglas y Versión más reciente del RuleApp para generar el archivo WSDL para las versiones más recientes.
  7. Pulse Descargar.
Para este procedimiento, debe tener Eclipse IDE para desarrolladores de Jakarta EE instalado en su ordenador. Incluye la plataforma Web Tools Platform para generar las clases proxy necesarias para invocar el servicio web desde una aplicación Java™. Para generar las clases proxy con Apache Axis:
  1. Inicie Eclipse IDE para desarrolladores de Jakarta EE y cree un nuevo proyecto Java ( Archivo > Nuevo > Proyecto Java ) para alojar las clases proxy.
  2. Copie el archivo WSDL en este proyecto Java.
  3. Haga clic en Archivo > Nuevo > Otro > Servicios web > Cliente de servicios web.
  4. En el asistente Cliente de servicio web, pulse Siguiente.
  5. Para la definición de servicio, navegue hasta el archivo WSDL.
  6. Mueva el control deslizante para seleccionar Desarrollar cliente.
  7. En Configuración, asegúrese de que Apache Axis esté seleccionado como tiempo de ejecución de servicio web y a continuación seleccione el proyecto Java como el proyecto de cliente donde desea alojar las clases proxy generadas.
  8. Pulse Finalizar.
El siguiente ejemplo de código Java importa las clases proxy para MiniloanServiceRuleset y llama al conjunto de reglas desde una aplicación Java:
import com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.MiniloanServiceMiniloanServiceRulesetBindingStub;
import com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.MiniloanServiceRulesetDecisionServiceProxy;
import com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.MiniloanServiceRulesetRequest;
import com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.MiniloanServiceRulesetResponse;
import com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.param.Borrower;
import com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.param.Loan;


public class DecisionServiceExecution {

	public static void main(String[] args) {
		
		// Replace <vhostname> with the name of the host of the Cloud portal
		// NB: endpointURI is defined in the location attribute of the WDSL file
		String endpointURI = "https://<vhostname>.bpm.ibmcloud.com/odm/dev/DecisionService/ws/MiniloanService/MiniloanServiceRuleset/v75";

		MiniloanServiceRulesetDecisionServiceProxy proxy = new MiniloanServiceRulesetDecisionServiceProxy(endpointURI);
		
		MiniloanServiceMiniloanServiceRulesetBindingStub stub = (MiniloanServiceMiniloanServiceRulesetBindingStub)proxy.getMiniloanServiceRulesetDecisionService_PortType();
	
		// Replace "loginID" with the functional ID of the service account you are using to authenticate with your tenant in the Cloud
		stub.setUsername("loginID");
		
		// Replace "password" with the password of the service account you are using to authenticate with your tenant in the Cloud
		stub.setPassword("password");
		
		// Set the borrower
		com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.Borrower borrower = 
				new com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.Borrower(
						"John", // name
						600, // credit score
						80000); // yearlyIncome
		
		Borrower borrowerParam = new Borrower(borrower);
		
		// Set the loan
		com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.Loan loan = 
				new com.ibm.www.rules.decisionservice.MiniloanService.MiniloanServiceRuleset.Loan(
						500000, // amount
						240, // duration
						0.05, // yearlyInterestRate
						0, // yearlyRepayment (to be computed by the decision service)
						true, // approved (set to true by default, to be computed by the decision engine),
						null); // messages (to be computed by the decision service)
		
		Loan loanParam = new Loan(loan);
		
		// Set the decision ID
		String decisionID = "1";
				
		MiniloanServiceRulesetRequest request = new MiniloanServiceRulesetRequest(decisionID, borrowerParam, loanParam);
		
		try {
			MiniloanServiceRulesetResponse response = proxy.miniloanServiceRuleset(request);
			System.out.println("Rules executed.");
			System.out.println("Approved: " + response.getLoan().getLoan().isApproved());
			System.out.println("Yearly interest rate: " + response.getLoan().getLoan().getYearlyInterestRate());
			System.out.println("Yearly repayment: " + response.getLoan().getLoan().getYearlyRepayment());
			String[] messages = response.getLoan().getLoan().getMessages();
			if (messages != null) {
				System.out.println("Messages: ");
				for (String message : messages) {
					System.out.println(message);
				}
			}
		}
		catch (Exception e) {
			throw new RuntimeException("An error occurred when invoking Decision Service at: "
										+ endpointURI, e);						
		}
	}

}