Cómo configurar la dirección de publicación del servicio web de desarrollo Spring integrado de xfire
Lado del servidor:
commons-logging-1.1.1.jar
p>jdom-1.0.jar
org.1.1.jar
jdom-1.0.jar
org.springframework.aop -3.1.1 .RELEASE.jar
org.springframework.asm-3.1.1.RELEASE.jar
org.springframework.beans-3.1.1.-3.1.1. RELEASE.jar
wsdl4j-1.6.1.jar
xfire-all-1.2.6.jar
Cliente:
com .springsource org.junit-4.7.0.jar
commons-codec-1.3.jar
commons-mons-logging-1.1.1.jar
wsdl4j-1.6.1.jar
xfire-all-1.2.6.jar
XmlSchema-1.1.jar p>
2. Modifique web.xml y agregue el siguiente código:
[html] ver copia simple
lt context-paramgt; lt; param-namegt.contextConfigLocationlt;/param-namegt;
lt;param-valuegt;classpath: applicationContext.xmllt;/param-valuegt
lt;/context-paramgt;
lt;listenergt;
lt;listener-classgt;org.codehaus.xfire.spring.XFireSpringServletXFireSpringServletlt;/servlet-classgt;/ servletgt;
lt;/servletgt; p>
lt;servlet-mappinggt;
lt;servlet-namegt;xfireServletlt;/servlet-namegt; p> lt;url-patterngt;/service/*lt; /url-patterngt;
lt;/servlet-mappinggt
3. Agregue el archivo de configuración Spring applicationContext.xml debajo del classpath y agregue el siguiente código:
[html] ver copia simple
lt; contexto: componente-scan base-package="my.webservice" /gt; p>
lt;! -- XFire inicio --gt
lt;
urce="classpath:org/codehaus/xfire/spring/xfire.xml" /gt;
lt; bean id="webAnnotations" class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations" /gt;
lt; bean id="jsr181HandlerMapping" class="org.codehaus .xfire.spring.remoting.Jsr181HandlerMapping"gt;
lt;nombre de propiedad="xfire" ref="xfire" /gt;
lt; nombre de propiedad=" webAnnotations" ref="webAnnotations"
lt; es;! -- XFire end --gt;
4. Defina la interfaz del WebService y agregue los comentarios apropiados:
[java] ver copia simple
@WebService p>
p>
interfaz pública IBookService {
@WebMethod
libro público getBook()
} 5.
5. Clase de implementación de interfaz, la anotación serviceName define el nombre del servicio de publicación, endpointInterface define la interfaz implementada:
[java] ver copia simple
@Component p>
@ WebService(serviceName="BookService",
endpointInterface = "my.p>la clase pública BookServiceImpl implementa IBookService {
@Override
Libro público getBook() {
Libro b = nuevo Libro(1, "Java Core Ideas",
System.out.println("gt;gt;gt; gt;gt;gt; Servidor: " b);
devolver b;
}
}
}
6. Arriba Está la configuración e implementación del lado del servidor, ¿no es muy simple? Publique el proyecto en Tomcat e inícielo, ingrese en el navegador: http://127.0.0.1:8080/XFireTest/service. /BookService?wsdl (BookService se define mediante el nombre del servicio arriba), si el navegador muestra la información XML relacionada con BookService, significa que el WebService se publicó correctamente
7. Cómo llama el cliente al servicio. servidor:
(1) Utilice la llamada de interfaz, este El método requiere que el proveedor de servicios de publicación proporcione una interfaz, o generamos nuestra propia interfaz a través de wsdl.
Genere la interfaz usted mismo:
wsimport -keep -p my.client http://127.0.0.1:8080/XFireTest/service/BookService?wsdl
-keep indica que se debe mantener el archivo generado, -p especifica el nombre del paquete para el cual necesitamos generar artefactos. http://127.0.0.1:8080/XFireTest/service/BookService?wsdl es la ubicación del archivo WSDL.
wsimport se encuentra en el directorio JAVA_HOME/bin y debe agregarse a la variable de entorno PATH. Puede ejecutar los comandos anteriores directamente en cmd. Tenga en cuenta que antes de ejecutar estos comandos, primero debe ingresar el directorio donde desea generar clases (como src).
[java] Ver copia pura
@Test
public void testBookService() {
Service serviceModel = new ObjectServiceFactory(). create(IBookService.class);
String url = "http://127.0.0.1:8080/XFireTest/service/BookService"
IBookService service = null; >
intente {
servicio = (IBookService) new XFireProxyFactory().create(serviceModel, url
Libro b = service.getBook();
System.out.println("gt; gt; gt; gt; gt; gt; Cliente: "
} catch (Excepción e) {
e); .printStackTrace();
}
p>}
(2) Llamado a través de wsdl, si el valor de retorno es String, este método se puede usar normalmente Si el valor de retorno es de tipo Libro, como esta columna, el valor impreso es [#document: null] y el tipo de retorno es org.apache.xerces.dom.DocumentImpl, que debe analizarse manualmente. Cuando uso esto en mi proyecto, los datos se devuelven como xml cuando publico el servicio y el cliente los analiza usando dom4j.
[java] Ver copia pura
@Test
public void wsdlTest() lanza MalformedURLException, Exception {
Cliente cliente = nuevo Cliente(nueva URL("http://127.0.0.1:8080/XFireTest/service/BookService?wsdl"));
Objeto[] resultados = cliente.invoke("getBook", nuevo Objeto[ ] {});
System.out.println(resultados[0]);