2010-08-11 29 views
9

Estoy buscando un cliente SOAP para Java.Java: Cliente SOAP simple

Apache Axis me parece muy hinchado. No entiendo por qué las cosas tienen que ser tan complicadas en Java. Por ejemplo, en PHP, todo lo que tengo que hacer es:

<?php 
$global_service_wsdl='https://api.betfair.com/global/v3/BFGlobalService.wsdl'; 
$betfair=new SoapClient($global_service_wsdl); 

$params=array("request"=> 
    array("header"=> 
     array("clientStamp"=>0,"sessionToken"=>$session_token)),"locale"=>"" 
); 
$response=$betfair->getAllEventTypes($params); 
?> 

Y mi objeto $ response contiene toda la información que necesito.

¿Alguien puede sugerir cómo implementaría algo como esto en Java sin demasiada molestia?

Muchas gracias de antemano,

~ 1 ~ Editar

@jarnbjo:

Eso es muy útil para mí. El bit en el que estoy estancado es ¿qué importaciones necesito para que se ejecute ese código?

que corrió este comando: sh salida wsdl2java.sh -o -a -uri https://api.betfair.com/global/v3/BFGlobalService.wsdl

y construyó la salida. ¿Crees que esto es más rápido que PHP? Además, tengo una opción "asíncrona". ¿Esto significa que puedo hacer llamadas asíncronas? Eso sería muy útil. Me gustaría ejecutar todo esto dentro de un servidor websocket basado en Java.

+0

maxlols >> No entiendo por qué las cosas tienen que ser tan complicado en Java. –

Respuesta

12

A menos que usted requiere funcionalidad adicional no proporcionada por el cliente SOAP en la API estándar de Java, puede utilizar la herramienta wsimport en el directorio bin del JDK (el punto a su URL de WSDL) y dejar que genere clases de Java para la fachada del servicio.

Con las clases generadas, necesita algo más de código Java que en el ejemplo de PHP para realizar la solicitud, pero sigue siendo razonable:

BFGlobalService betfair = new BFGlobalService_Service().getBFGlobalService(); 

APIRequestHeader header = new APIRequestHeader(); 
header.setClientStamp(0); 
header.setSessionToken("someSessionToken"); 

GetEventTypesReq req = new GetEventTypesReq(); 
req.setHeader(header); 
req.setLocale(""); 

GetEventTypesResp response = betfair.getAllEventTypes(req); 

En este ejemplo se produce un error, pero probablemente debido a que la señal de sesión es inválido.

+0

Muchas gracias. Por favor, mira editar. – Eamorr

+2

+1 por mencionar la herramienta de importación. Esta es la primera vez que escucho esto – Webnet

0

Tome un vistazo a CXF

+1

Oye, lo descargué, pero sinceramente no sé por dónde empezar. Solo quiero dar un objeto SOAP cliente mi URL wsdl, activar algunas solicitudes y ver algunas respuestas. Seguramente unas pocas líneas de Java es todo lo que necesita? – Eamorr

2

Java es de tipo estático, lo que significa que el compilador necesita saber antes de cualquier método se puede invocar directamente en el código fuente. Esto a su vez significa que necesita stubs de clase Java que describen el servicio web, por lo que tiene algo para llamar. Por lo general, hay una utilidad con una pila de servicios web haciendo exactamente esto.

Usted puede encontrar esta pregunta interesante What methods exist to auto-generate java client stubs from WSDL files?

2

Voy a hacer eco de CXF, pero con un ejemplo de cómo usarlo. Sin embargo, esto supone que ha ejecutado la herramienta CXF/JAXWS para generar el código Java basado en el wsdl.

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
factory.setServiceClass(TheGeneratedInterface.class); 
factory.setAddress("hostUrlGoesHere"); 
client = (TheGeneratedInterface) factory.create(); 
return client.methodNameGoesHere(request); 

El código para escribir no es muy difícil. La parte más difícil en realidad es averiguar cómo generar el código Java necesario desde el wsdl. No es difícil, solo tienes que obtener el hechizo de línea de comando correcto.

2

Marque "Enviar o publicar un mensaje SOAP utilizando SAAJ (documento/literal)" ... Le permite enviar y recibir XML a través de SOAP y manipular el contenido de la envolvente SOAP directamente sin ningún tipo de análisis e interpretación/enlaces en objetos java como cuando usas wsimport ...

http://users.skynet.be/pascalbotte/rcx-ws-doc/saajpost.htm

Saludos

Cuestiones relacionadas