eBay API y sus pegas
Comunidad, buenas tardes.
El día de hoy en el trabajo necesité de utilizar el SDK de Java para eBay. Pero para poder usarlas es algo tedioso, y quiero compartir esa experiencia para que la puedas usar.
Antes que nada, debo decir que esto debes hacerlo en caso de que prefieras utilizar objetos en vez de transformar las respuestas que proveen los servicios web de eBay (que a mi parecer es más simple, pero a un nivel más bajo).
Bien, primero debemos descargarnos el SDK desde aquí.
Luego, debemos tener instalado Maven 2 o superior para poder generar las clases necesarias partiendo de los servicios web de eBay, aquí está la liga para ver cómo instalar maven.
Una vez hecho esto, es necesario descomprimir el zip con el SDK de eBay (a esta carpeta le llamaré {SDK}). Ya descomprimido creamos un directorio con la siguiente estructura:
>nombre_proyecto
-->src
---->main
------>java
------>resources
Teniendo nuestra carpeta, pasamos a copiar el fichero en {SDK}/build/maven_build/pom.xml al mismo nivel de src quedando:
>nombre_proyecto
-->src
---->main
------>java
------>resources
-->pom.xml
Luego, necesitamos copiar el fichero {SDK}/build/custom-binding.xml al mismo nivel de src, el directorio sería parecido a:
>nombre_proyecto
-->src
---->main
------>java
------>resources
-->pom.xml
-->custom-binding.xml
Una vez hecho esto, es necesario editar custom-binding.xml, en la línea 2 tenemos lo siguiente:
<jaxws:bindings wsdlLocation="../source/wsdl/eBaySvc.wsdl"
Hay que modificar esa línea por lo siguiente:
<jaxws:bindings wsdlLocation="./src/main/resources/eBaySvc.wsdl"
Después de eso, hay que copiar el fichero en {SDK}/source/wsdl/ebaySvc.wsdl en nuestra carpeta de resources, teniendo una estructura parecida a:
>nombre_proyecto
-->src
---->main
------>java
------>resources
-------->ebaySvc.wsdl
-->pom.xml
-->custom-binding.xml
Cómo última copia basta ir a {SDK}/source/core/src seleccionar la carpeta com y pegarla en nuestra carpeta nombrada java, teniendo una estructura final:
>nombre_proyecto
-->src
---->main
------>java
-------->com
------>resources
-------->ebaySvc.wsdl
-->pom.xml
-->custom-binding.xml
Antes de poder compilar con maven, es necesario hacer una edición al fichero pom.xml, ya que, utiliza un repositorio que ya dejó de estar soportado. Sin embargo, todo lo existente en ese repositorio fue migrado al repositorio central de Maven. Historia corta, hay que eliminar las siguientes líneas del archivo pom.xml:
<repository>
<id>maven2-repository.dev.java.net</id>
<name>Java.net Repository for Maven 2</name>
<url>http://download.java.net/maven/2/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven2-repository.dev.java.net</id>
<url>http://download.java.net/maven/2/</url>
</pluginRepository>
</pluginRepositories>
Una vez hecho esto, necesitamos abrir una terminal o línea de comandos, ir al directorio en donde tenemos nuestro proyecto y teclear lo siguiente:
mvn -e clean package
Luego de compilar, veremos que tenemos unos errores. Por alguna razón (qué eBay lleva desde el año pasado sin responder), después de la versión 825 las clases generadas tienen algunos errores de tipos incompatibles y hay ciertos métodos setter que por alguna razón no son generados. Basta con ir a las clases en donde nos marca error, y agregar los métodos correspondientes, así cómo las transformaciones (por lo general el problema es que un método regresa una lista y ésta es asignada a un arreglo).
Una vez hechos los cambios en las respectivas clases, es necesario editar el fichero pom.xml una vez más, quitando las líneas:
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<configuration>
<tasks>
<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport">
<classpath refid="maven.plugin.classpath"/>
</taskdef>
<echo message="Starting wsimport"/>
<wsimport
target="2.1"
debug="false"
verbose="true"
xnocompile="true"
sourcedestdir="src/main/java"
wsdl="src/main/resources/eBaySvc.wsdl"
quiet="true"
package="com.ebay.soap.eBLBaseComponents">
<binding dir="${basedir}" includes="custom-binding.xml"/>
</wsimport>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-tools</artifactId>
<version>2.1.4</version>
</dependency>
</dependencies>
</plugin>
Y listo, ya puedes hacer uso de las clases del SDK de eBay, obviamente debes tener tus credenciales para poder hacer pruebas en un SandBox y demás, es un proceso muy simple e intuitivo.
Bien, pues eso es todo.
Un saludo.
- wishmaster77's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
Java?
Parece que realmente el API de ebay es un web service, asi que lo puedes usar desde cualquier plataforma que pueda invocar web services.
Y honestamente creo que te fuiste por la manera mas enredada posible de invocar un web service en Java.
Re: Java?
De hecho la librería es un wrapper de los servicios de eBay. Y si, es un poco enredado pero también te da la ventaja de toda la basta cantidad de POJOS y acciones de una manera más Object-Oriented out-of-the-box.
Justo la ventaja que da la librería es que básicamente tienes un archivo de propiedades con tus credenciales de eBay y ya está, el jar se encarga de la invocación de los webservices la transformación entre XML/JSON -> POJO; y el código es muy sencillo de entender.
Enredado, puede ser, pero a nivel de código también tiene otras ventajas, en especial al momento de leerlo.
Un ejemplo sería:
OrderArray orders = request.getOrders();
De otra manera, sería necesario consumir ya sea por una conexión directa (HttpsURLConnection), pasar asignar en los headers las key de las API, la respuesta esperada... en fin, la manera tradicional de consumir algo desde una url.
Otra forma sería importar el wsdl, y generar un cliente (que ya está generado en el jar).
Sea cómo sea mostré una alternativa que parece tiene poca documentación y espero le sirva a alguien :)