Consumir servicio web SOAP (ShoppingAPI de eBay) desde un WSDL con Java en NetBeans

5.1.09. Por ooscarr (ooscarr)

Netbeans

Consumir un servicio web en Java resultó más difícil de lo que pensaba. Por eso algunos servicios ofrecen SDKs para facilitar las cosas, pero aquí lo haremos a mano, consumiendo el Servicio Web SOAP que ofrece eBay desde el puro archivo WSDL (y la ayuda de NetBeans).

¿Por qué el SW de eBay? Bueno, uno, porque es uno de los pocos servicios web más famosos que ofrecen una API en SOAP (a todos les gustó REST).

De los grandes

Y dos, porque ni con Microsoft ni con Amazon pude lograr un resultado. Mi culpa. Así que sigamos con ebay.

De los más famosos que ofrecen sus servicios web por SOAP gratis, tenemos:

Primero se necesita

4 steps

Registro

Para obtener una clave para utilizar los servicios web de ebay, hay que registrarse en la página para desarolladores de ebay http://developer.ebay.com/.

Clave de desarrollador en eBay

Después de registrarnos, pedimos unas claves Production keys que son como estas:

* Estas claves son inventadas. Consiga sus propias claves.
DEVID03abb543-5t3d-87k-na95f-o234bo854
AppID:UNAP3d995-2kj53-67u8-abcc-po988l9u035
CertID:4hd73h-9385-383d-as3j-ffie34u5eee35

El archivo WSDL

En esta ocasión vamos a utilizar la Shopping API. El archivo WSDL para el SOAP de eBay, se encuentra en la parte de Documentación y es éste:

http://developer.ebay.com/webservices/latest/ShoppingService.wsdl

Nuevo proyecto en Netbeans

Ahora, creamos un proyecto nuevo de tipo Aplicación Java

Nueva aplicación Java

Le puse de nombre SOAPebay.

Nombrando al proyecto SOAPebay en Netbeans 6.5
Terminar.

Después agregamos un Archivo nuevo de tipo Web Service Client

Nuevo archivo Web Services > Web Service Client.

Pegamos la dirección del WSDL http://developer.ebay.com/webservices/latest/ShoppingService.wsdl.

Specify the WSDL file of the Web Service
Terminar.

Y después que se genera el servicio web, arrastramos y soltamos el método FindItems desde Web Services References/ShoppingService/Shopping/Shopping al main del archivo Main.java del proyecto.

Arrastrar el método y soltar en el código Java en Netbeans.

Código

Lo ideal hubiera sido que se generara todo automáticamente para llegar y reemplazar strings, pero por lo menos tenemos el esqueleto del código hecho.

ebay ofrece sus servicios web en diferentes formatos de pedido y respuesta como se muestra en la siguiente figura.

Diferentes formatos de pedido y respuesta de la Shopping API de ebay: URL, XML, JSON, SOAP

En esta ocasión no utilizaremos SOAP para hacer los pedidos, en vez de eso, haremos las requests por medio de URL (a lo REST), pero por lo menos lo que recibiremos será SOAP.

Main.java

Estructura de la URL pedida http://open.api.ebay.com/shopping?

Reemplace todo el contenido de Main.java por esto:

package soapebay;

import javax.xml.ws.BindingProvider;

public class Main {

 //Cambiar APPID
 private static final String APPID = "UNAP3d995-2kj53-67u8-abcc-po988l9u035";
 private static final String CALLNAME = "FindItems";
 private static final String VERSION = "557";
 private static final String BASEURL="http://open.api.ebay.com/shopping?";

 private static BindingProvider bp;

 public static void main(String[] args) {
  
  String endpointURL = BASEURL+"callname=" + CALLNAME+"&version="+VERSION+"&appid=" + APPID;

  try {

   ebay.apis.eblbasecomponents.Shopping service = new ebay.apis.eblbasecomponents.Shopping();
   ebay.apis.eblbasecomponents.ShoppingInterface port = service.getShopping();bp = (BindingProvider) port;
   bp = (BindingProvider) port;
   bp.getRequestContext().
    put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
     endpointURL);
   // Inicializa los argumentos
   ebay.apis.eblbasecomponents.FindItemsRequestType findItemsRequest = new ebay.apis.eblbasecomponents.FindItemsRequestType();
   findItemsRequest.setQueryKeywords("iphone");
   // procesa los resultados
   ebay.apis.eblbasecomponents.FindItemsResponseType result = port.findItems(findItemsRequest);
   System.out.println ( " Consulta : " + endpointURL);
   System.out.println("Estado = "+result.getAck());
   System.out.println("Número total de Items= "+result.getTotalItems());
   System.out.println("URL = "+result.getItemSearchURL());

  } catch (Exception ex) {
   // TODO handle custom exceptions here
  }
 }
}

Y al presionar el botón Ejecutar (Run Main Project), en la consola o Panel de Salida debería aparecer lo siguiente:

compile:
run:
 Consulta : http://open.api.ebay.com/shopping?callname=FindItems&version=557&appid=UNAP3d995-2kj53-67u8-abcc-po988l9u035
Estado = SUCCESS
Número total de Items= 64525
URL = http://search.ebay.com/ws/search/SaleSearch?fsoo=1&fsop=1&satitle=iphone
GENERACIÓN CORRECTA (tiempo total: 59 segundos)

No olvidar cambiar la clave de la API en el código fuente. Y si se va a compilar por segunda vez, se debe limpiar (Clean) antes.

Por web

También intenté hacerlo por web, donde tiene más sentido el consumo de este servicio, pero no pude terminarlo debido a mi ignorancia en JavaBeans. Help.

Referencias

Etiquetas: , , , ,

1 comentarios (RSS ATOM) :

  1. A las 22/2/10 14:14  

    Blogger paragastar.com ha dicho...

    Como puedo filtrar por pais?

Página principal

Publicidad