Invocación dinámica de un componente

Cuando un módulo invoca un componente que tiene una interfaz de tipo de puerto WSDL (Web Service Descriptor Language), el módulo debe invocar el componente dinámicamente utilizando el método invoke().

Antes de empezar

Esta tarea presupone que un componente peticionario está invocando un componente dinámicamente.

Acerca de esta tarea

Cuando se utiliza una interfaz de tipo de puerto WSDL, el componente peticionario debe utilizar el método invoke() para invocar el componente. Un módulo peticionario también puede invocar de esta manera un componente que tenga una interfaz Java™.

Procedimiento

  1. Determine el módulo donde reside el componente necesario.
  2. Determine la matriz necesaria para el componente.
    La matriz de entrada puede ser uno de tres tipos:
    • Tipos Java primitivos en mayúsculas o matrices de este tipo
    • Clases Java ordinarias o matrices de las clases
    • Service Data Objects (SDO)
  3. Defina una matriz para contener la respuesta del componente.

    La matriz de respuesta puede ser de los mismos tipos que la matriz de entrada.

  4. Utilice el método invoke() para invocar el componente necesario y pasar el objeto de matriz al componente.
  5. Procese el resultado.

Ejemplos de invocación dinámica de un componente

En el ejemplo siguiente, un módulo utiliza el método invoke() para invocar un componente que utiliza tipos de datos Java primitivos en mayúsculas.
Service service = (Service)serviceManager.locateService("multiParamInf");
		
		Reference reference = service.getReference();

		OperationType methodMultiType = 
				reference.getOperationType("methodWithMultiParameter");

		Type t = methodMultiType.getInputType();

		BOFactory boFactory = (BOFactory)serviceManager.locateService
				("com/ibm/websphere/bo/BOFactory");

		DataObject paramObject = boFactory.createbyType(t);

		paramObject.set(0,"input1")
		paramObject.set(1,"input2")
		paramObject.set(2,"input3")

		service.invoke("methodMultiParamater",paramObject);

El ejemplo siguiente utiliza el método invoke con una interfaz de tipo de puerto WSDL como destino.

Service serviceOne = (Service)serviceManager.locateService("multiParamInfWSDL");
	
	DataObject dob = factory.create("http://MultiCallWSServerOne/bos", "SameBO");
			dob.setString("attribute1", stringArg);

	DataObject wrapBo = factory.createByElement
		("http://MultiCallWSServerOne/wsdl/ServerOneInf", "methodOne");
			wrapBo.set("input1", dob); //wrapBo encapsula todos los parámetros de methodOne
			wrapBo.set("input2", "XXXX");
			wrapBo.set("input3", "yyyy");

	DataObject resBo= (DataObject)serviceOne.invoke("methodOne", wrapBo);