WebService es un lenguaje de programación cruz, comunicación remota de sistema operativo multiplataforma tecnología, ampliamente utilizado en el desarrollo, la interfaz, la integración real del sistema.
el servidor
- elemento de la lista
Añadir la dependencia maven
dependencia específica del proyecto, además de la primavera, tenemos que añadir los dos siguientes dependencias.
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.3.5</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.3.5</version>
<scope>compile</scope>
</dependency>
- Configuración de web.xml
Además de la configuración de resorte convencional, donde la necesidad de añadir la configuración cxfServlet.
<!-- 1.cxfServlet配置-->
<servlet>
<servlet-name>cXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cXFServlet</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
<!-- 2.配置spring容器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
<!-- 3.监听器-->
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
- webService interfaz de escritura y clase de implementación de
clase de interfaz IHelloService
Interfaces necesitan para marcar comentario @WebService
@WebService
public interface IHelloService {
/**
* 对外发布服务接口的方法
* @param name
*/
public String welcome(String name);
}
clase de interfaz HelloServiceImpl
public class HelloServiceImpl implements IHelloService {
@Override
public String welcome(String name) {
return "welcome to webService "+name;
}
}
- ApplicationContext.xml dispuesta
en el espacio de nombres relacionados para añadir cxf XSD, y la información de configuración correspondiente al servicio, incluyendo la dirección de servicio, servicios, etc.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:cxf="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<cxf:server address="/hello">
<jaxws:serviceBean>
<bean class="service.impl.HelloServiceImpl"></bean>
</jaxws:serviceBean>
</cxf:server>
</beans>
-
Iniciar un servicio web, probar
el servicio se ha iniciado satisfactoriamente, podemos acceder en su navegador:http://localhost:8081/webservice/hello?wsdl
dondehttp://localhost:8081
es nuestra entrada de acceso del servidor,/webservice
en nuestroweb.xml
perfil de configuracióncxfServlet
correspondienteservlet-mapping
,/hello
para el servicio de acceso a laaddress
dirección, el último también es necesario añadir?wsdl
el acceso especificación WSDL.
La imagen muestra la pantalla es decir, navegador, el navegador Firefox Probé es un espacio en blanco, coherente con el correspondiente contenido f12 para el siguiente contenido.
cliente -
Añadir cxf sus dependencias
-
La introducción de la clase de interfaz de servicio correspondiente al tipo
aquí, tenemos que añadir el servicio hasta el final IHelloService HelloServiceImpl y código de cliente.Además, el cliente o servidor, interfaces de IHelloService se requieren anotaciones @WebService etiquetado. -
cliente applicationContext.xml Preparado
interfaz de servidor define el tipo de servicio, dirección de servicio, correspondiente a la misma, las necesidades de los clientes para configurarse la misma dirección de servicio, el tipo de interfaz de servicio.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:cxf="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd"
<jaxws:client id="helloService" serviceClass="service.impl.HelloServiceImpl" address="http://localhost:8081/webservice/hello"></jaxws:client>
</beans>
- pruebas de unidad de escritura
usados en este documento para probar la unidad de resorte, por lo tanto, no sólo para la importaciónjunit
-dependiente, pero tambiénspring-test
dependiente.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Client {
//注入对象
@Resource
private HelloServiceImpl helloService;
@Test
public void doClientRemote(){
System.out.println(helloService);
String content = helloService.welcome("Elaine");
System.out.println(content);
}
}
- Muestra los resultados
org.apache.cxf.jaxws.JaxWsClientProxy@45905bff
welcome to webService Elaine
Se puede encontrar, HelloServiceImpl objetos obtenemos un objeto proxy porque las interfaces pertinentes de antelación, es de naturaleza dinámica JDK aplicación proxy.
Al visualizar la salida del servidor, hay una advertencia
org.apache.cxf.interceptor.Fault: Unexpected wrapper element {http://impl.service/}welcome found. Expected {http://service/}welcome.
Bien entendido, nos damos cuenta de la clase, espero que CxF directamente tipo de interfaz en la adquisición objeto de tipo de prueba de unidad proxy. Reemplazar con:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Client {
//注入对象
@Resource
private IHelloService helloService;
@Test
public void doClientRemote(){
System.out.println(helloService);
String content = helloService.welcome("Elaine");
System.out.println(content);
}
}
Repetición de la prueba, sin previo aviso, no hay error.