Pregunta

¿Es posible con Axis2 y Eclipse generar un cliente de servicio web y hacer que use tipos java que ya tiene en paquetes en lugar de crear sus propios tipos? La razón es, por supuesto, si ya he creado el tipo A y crea su propio tipo A No puedo simplemente asignar una variable de tipo A a una variable de tipo B.

El wsdl se genera desde un servicio web implementado en un servidor de aplicaciones. Si no es posible generarlo a partir de eso, sería posible generar un cliente a partir de los archivos java ya existentes.

¿Fue útil?

Solución

Si realmente desea reutilizar las clases existentes, puede llamar a la API de Axis2 directamente sin generar un cliente utilizando wsdl2java. A continuación se muestra un código relativamente simple para llamar a un servicio web. Solo necesita completar el punto final del servicio web, el método QName, la (s) clase (s) de retorno esperadas y los argumentos del servicio. Puede reutilizar sus clases existentes como valores de retorno o argumentos.

Si su servicio web es bastante complicado, es posible que deba profundizar en la API para que este enfoque funcione.

serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();

EndpointReference targetEPR = new EndpointReference("http://myservice");

options.setTo(targetEPR);

QName methodName = new QName("ns","methodName");

Class<?>[] returnTypes = new Class[] { String.class };

Object[] args = new Object[] { "parameter" };

Object[] response = serviceClient.invokeBlocking(methodName, args,
                returnTypes);

Otros consejos

Está generando el cliente de servicio web desde wsdl, ¿correcto?

Lo único que sabe la herramienta wsdl2java es la información en wsdl, por lo que no sabrá acerca de ningún tipo que ya haya creado.

Si puede obtener la información de tipo en el wsdl, puede que funcione, aunque nunca lo he intentado.

Si desea una forma fácil de copiar del Tipo A al Tipo B, puede intentar BeanUtils.copyProperties , siempre que coincidan los establecedores y captadores de Tipo A y Tipo B.

la mayoría de los proyectos de servicios web de Java pasan por esto. No sé si el mundo .NET / C # tiene una solución más elegante.

Tiene sentido, como Mike mencionó, usar BeanUtils.copyProperties.

BR,
~ A

Si usa eclipse como su ide, eso es lo que necesita: http: //www.eclipse. org / webtools / . Hace más allá de otras cosas exactamente lo que quieres.

Puede usar directamente la clase ServiceClient para llamar al servicio web, que proporciona llamadas usando solo XML y devuelve una respuesta XML. Para diferentes métodos de servicio web, debe convertir la respuesta XML a algún POJO de Java para usarlo. Solo el manejo de respuesta debe hacerse a su fin. que puede hacer desde XML a Mapa, etc. ...

Por lo tanto, no necesitará ninguna otra clase de código auxiliar para llamar a ningún servicio web, solo necesita manejar el XML de respuesta. Puede convertir XML a POJO usando las librerías Castor o JAXB.

Esta es la forma en que no necesita modificar su cliente cada vez para diff. servicios web. Puede desarrollar como proporcionar un controlador de respuesta al cliente externamente. Para que para cada servicio web diferente tenga diff. clase de controlador de respuestas que es la implementación de su interfaz.

//common interface for response handlers...
//implement this for diff. web service/methods
public interface WSRespHandler{
    public Object getMeResp(Object respData);
}


//pass particular handler to client when you call some WS
public class WebServiceClient {
    public Object getResp(WSRespHandler respHandler) {
        ..

        return repHandler.getMeResp(xmlData);
    }
}

referencia:

http://www.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation -on-the-Client-Side.htm

http: // www.devdaily.com/blog/post/java/java-web-service-client-read-array-list/

gracias.

www.techlads.com

En caso de que esta publicación siga siendo útil para alguien, leí la guía de clientes generadores de axis2: http://axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html .

Parece que el complemento Axis2 Eclipse está configurado para llamar a la generación de código ADB en modo integrado (consulte http://axis.apache.org/axis2/java/core/docs/adb/adb-howto.html ), creando así clases internas en el código auxiliar del servicio web. No sé si es posible cambiar el modo de generación al modo expandido (generar clases de datos fuera de la clase stub), pero puede hacerlo mediante la línea de comando usando Wsdl2Java:

    %AXIS2_HOME%\bin\WSDL2Java -uri <wsdl file path> -p <package name> -u

La opción -u le dice al generador de código ADB que cree clases de datos como clases separadas y no clases internas en el código auxiliar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top