Red de conocimiento informático - Material del sitio web - Cómo crear, publicar y acceder a servicios basados ​​en CXF en Tomcat

Cómo crear, publicar y acceder a servicios basados ​​en CXF en Tomcat

Describe en detalle los pasos y diversos métodos para crear, publicar y acceder a servicios CXF en contenedores Tomcat.

I. Lado del servidor

1. Agregar paquete CXF

1) Paquete básico:

commons-logging-1.1.1. jar

geronimo-activation_1.1_spec-1.0.2.jar

geronimo-annotation_1.0_spec-1.1.1.jar

geronimo-javamail_1.4_spec- 1.6.jar

geronimo-jaxws_2.1_spec-1.0.jar

geronimo-servlet_2.5_spec-1.2.jar

geronimo-stax-api_1.0_spec- 1.0.1.jar

geronimo-ws-metadata_2.0_spec-1.1.2.jar

jaxb-api-2.1.jar

jaxb-impl- 2.1.12.jar

embarcadero-6.1.21.jar

embarcadero-util-6.1.21.jar

neethi-2.0.4.jar

saaj-api-1.3.jar

saaj-impl-1.3.2.jar

wsdl4j-1.6.2.jar

wstx-asl-3.2.8.jar

xml-resolver-1.2.jar

XmlSchema- 1.4.5.jar

2) jsf y jstl ( No es necesario, se agregará automáticamente al crear un proyecto web con MyEclipse, no es necesario agregarlo)

jsf-api.jar

jsf-impl.jar

jstl-1.2 .jar

3)) cxf

cxf-2.2.4.jar

4) Spring jars, agregue soporte Spring para la configuración XML .

aopalliance-1.0.jar

spring-core-2.5.5.jar

spring-beans-2.5.5.jar

spring-context-2.5.5.jar

spring- web-2.5.5.WebService;

@ WebService

interfaz pública HelloWorld

{

// Método simple para devolver una cadena

String say(String hello);

}

2) Clase de implementación, como HelloWorldImpl.java:

paquete cxf.test;

importar javax.jws.WebService

// Clase de implementación de WebService.

// Utilice @WebService para apuntar a la definición de clase de interfaz.

@WebService(endpointInterface = "cxf.test.HelloWorld")

clase pública HelloWorldImpl implementa HelloWorld

{

public String say (Cadena hola)

{

return "hola " hola

}

}

}

3.Configuración del servicio

1) web.xml

lt;?xml version="1.0" encoding="UTF-8"?gt;

lt; p>

lt; versión de la aplicación web="2.5"

xmlns="/xml/ns/javaee"

xmlns: xsi= "/xml/ns/javaee"

/xml/ns/javaee/web-app_2_5.xsd"gt;

lt;context-paramgt;

lt;param-namegt;contextConfigLocationlt; /param-namegt;

lt;param-valuegt;WEB-INF/beans.xmllt;/param-valuegt;

lt;/context -paramgt;

lt;listenergt;

lt;listener-classgt;

org.ContextLoaderListener

lt;/listener-classgt ;

lt;/listenergt;

lt;servletgt;

lt;servletgt;

lt;servlet-namegt;CXFServletlt;/servlet-namegt ;

lt;servlet-classgt;

org.apache.cxf.transport.servlet.CXFServlet

lt;/servlet-classgt;

lt;/servletgt;

lt;servlet-mappinggt;

lt;servlet-namegt;CXFServlet.lt;/servlet-namegt;

lt;url-patterngt;/services /*lt;/url-patterngt;

lt;/servlet-mappinggt;

lt;/web-appgt;

2) beans.xml

lt;?xml version="1.0" encoding="UTF-8"? gt;

lt;beans xmlns="mons-logging- 1.1.1.jar

cxf-2.2.4.jar

neethi-2.0.4.jar

spring-core-2.5.5.jar

spring- beans-2.5.5.jar<

/p>

spring-context-2.5.5.jar

wsdl4j-1.6.2.jar

XmlSchema-1.4.5.jar

2. Obtenga la clase de interfaz de servicio del servicio (similar a la de C/C)

Método 1: copiar directamente desde el proyecto original

Este es, por supuesto, el método más simple. pero también el más El método "difícil" (obviamente imposible de obtener si el servicio no lo realiza usted mismo

Método 2: Generar desde un documento wsdl

Primero, necesita. para instalar el paquete cxf Los pasos de generación son los siguientes:

1) Instale cxf y configure las variables de entorno, por ejemplo: D:/Apache/apache-cxf-2.2.4; , agregue ";CXF_HOME/bin" (opcional) después de PATH. El uso de wsdl2java es el siguiente:

El uso de Wsdl2java es el siguiente:

El uso de Wsdl2java es el siguiente:

El uso de Wsdl2java es de la siguiente manera:

Wsdl2java - p nombre del paquete -d nombre del directorio ruta wsdl

por ejemplo: wsdl2java -p demo.service.client -d e:/src htt://localhost:8080 /helloWorld?wsdl

-p especifica el espacio de nombres de wsdl, es decir, el nombre del paquete del código que se generará

-d especifica el directorio para generar el código

-cliente genera el código del cliente del servicio Web a probar

- servidor genera el código para que el servidor inicie el servicio Web

-impl genera el código de implementación del servicio web

-ant genera el archivo build.xml

-compila genera código y compila

-modo silencioso, sin advertencia ni mensaje de error.

-all genera todo el código de punto final de inicio: tipos, proxies de servicio, interfaces de servicio, líneas principales del servidor, líneas principales del cliente, objetos de implementación y archivos Ant build.xml.

2) Ejecute el programa por lotes wsdl2java, por ejemplo:

wsdl2java -p cxf.test -d d:/src -server http://localhost:8080/CXFTomcat/services/ HelloWorld ?wsdl

3) Importe la clase de interfaz java al proyecto.

El archivo de clase Java generado en el paso anterior se puede utilizar en muchas aplicaciones generales siempre que el archivo de clase que describe la interfaz se pueda importar al proyecto, como el archivo HelloWorld.java generado anteriormente. ejemplo.

Servicio;

importar javax.xml.ws.soap.SOAPBinding;

importar cxf.test.HelloWorld; // necesario

Cliente público final {

QName final estático privado SERVICE_NAME

= new QName("http://test.cxf/", "HelloWorld" // El primer paquete que hace referencia a la clase de implementación de interfaz Opuesto); nombre

QName final estático privado PORT_NAME

= nuevo QName("http://test.cxf/", "HelloWorldPort");

Cliente privado ( ) { }

public static void main(String args []) lanza una excepción {

Servicio servicio = Service.create(SERVICE_NAME)create(SERVICE_NAME);

// Dirección del punto final

String endpointAddress = "http://localhost:8080/CXFTomcat/services/HelloWorld";

// Agregar un puerto al servicio

service.addPort(PORT_NAME, SOAPBinding.getPort(HelloWorld.class);

System.out.println(hw.say("World" ));

}

}

Método 2: utilizar código subyacente para controlar el comportamiento del programa con mayor precisión, como

paquete cxf.test

importar org.apache.cxf.jaxws.JaxWsProxyFactory;