Consumir servicio web SOAP (ShoppingAPI de eBay) desde un WSDL con Java en NetBeans
5.1.09. Por ooscarr (ooscarr)
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
- Google dejó de soportar SOAP, manteniéndolo para sólo 3 de sus servicios comerciales.
- Yahoo! argumenta que REST es más fácil, y SOAP no tiene la suficiente demanda.
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

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. | ||
| DEVID | 03abb543-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

Le puse de nombre SOAPebay
.

Terminar
.
Después agregamos un Archivo nuevo
de tipo Web Service Client
.
Pegamos la dirección del WSDL http://developer.ebay.com/webservices/latest/ShoppingService.wsdl.

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.
.
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.

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

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
(
), 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.


1 comentarios (RSS
) :
A las 22/2/10 14:14
Como puedo filtrar por pais?
Referencias a este artículo:
Página principal