package com.osmosislatina.xml.soap; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; public class PDVSA { public static void main(String [] args) throws Exception { String endpoint = "http://www.osmosis.com/axis/Petroleo"; if (args == null || args.length != 2) { System.err.println("Uso: PDVSA <tipo_de_petroleo> <numero_de_barriles>"); return; } String tipo = new String(args[0]); Integer barriles = new Integer(args[1]); if (!(tipo.equals("Azteca") || tipo.equals("Bolivar") || tipo.equals("Brent") || tipo.equals("Mexico") || tipo.equals("Texas-L"))) { System.err.println("Tipos de Petroleo Disponibles: <Azteca,Bolivar,Brent,Mexico,Texas-L>"); return; } Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new java.net.URL(endpoint) ); call.setOperationName(new QName("Petroleo", "cotizacion")); call.addParameter( "op1", XMLType.XSD_STRING, ParameterMode.IN ); call.addParameter( "op2", XMLType.XSD_INT, ParameterMode.IN ); call.setReturnType( XMLType.XSD_DOUBLE ); Double ret = (Double) call.invoke( new Object [] { tipo, barriles }); System.out.println("Su cotizacion : " + ret); } } |
El primer paso es declarar las clases Axis que serán utilizadas por la Clase para llamar el web service.
Se define el URL donde se encuentra activo/disponible el web service, en este caso http://www.osmosis.com/axis/Petroleo
.
Se hace una revisión de los parámetros proporcionados por el usuario para asegurarse que estos se encuentren acorde a los parámetros solicitados por el web service.
Es generada una instancia de la Clase Service
para invocar el web service, posteriormente se genera un Objeto del tipo Call
para indicar los parámetros de llamada del web service descritos a continuación :
El método setTargetEndpointAddress
es utilizado para indicar el URL donde reside el web service.
setOperationName
es empleado para indicar una operación especifica sobre el web service, mediante la Clase QName
se indica el "Namespace XML" que será utilizado para enviar el mensaje SOAP así como el nombre del servicio; en este caso se esta indicando el "Namespace" Petroleo
y el servicio cotización
. (NOTA: Los detalles de este mensaje SOAP serán descritos en la siguiente sección)
Mediante addParameter
se especifican los formatos XML de los parámetros de entrada, el primero de estos siendo un String (XSD_STRING)
y el segundo un Integer (XSD_INT)
.
También se especifica el formato XML del valor de retorno através de setReturnType
, siendo este tipo Double (XSD_DOUBLE)
.
Es utilizado el método invoke
de la Clase Call
que inicia la llamada hacia el web service.
Finalmente se imprime a pantalla el valor obtenido al invocar el web service.
template
, XPath, Condicionales y Ciclos en XSL.