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 de nube (consulte Autenticación para invocación REST y SOAP).

Nota: Operational Decision Manager on Cloud da soporte a SOAP 1.1. No da soporte a 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 de Rule Execution Server:
  1. Despliegue el conjunto de reglas en Rule Execution Server.
  2. En la consola de Rule Execution Server , vaya al separador 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 instalado en su ordenador Eclipse IDE for Jakarta EE Developers. Incluye la Plataforma de Herramientas Web para generar las clases proxy para invocar el servicio web desde una aplicación Java™. Para generar las clases proxy con Apache Axis:
  1. Inicie Eclipse IDE for Jakarta EE Developers 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. Pulse Archivo > Nuevo > Otros > 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 de 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);						
		}
	}

}