Web Service (四) 手动发布Web Service接口-CXF与Spring集成
当我们发布完Web Service接口之后有两种方式可以调用Web service服务,一种是通过动态客户端方式,另一种是引用服务端的接口,引用服务端接口的方式对于客户端同服务器端耦合比较大,而使用WSDL的方式客户端不知道服务端的存在就可以调用服务器的方法。
下面是项目的结构图:
1.Web Service发布项目
2.编写服务端接口类以及实现类,如下,同上一篇自动发布接口,多了一个注解@WebService
package com.test.webservice; import javax.jws.WebService; @WebService public interface IHelloWorld { public String sayHello(User user); public String sayHello1(); }
package com.test.webservice; import javax.jws.WebMethod; import javax.jws.WebService; @WebService(endpointInterface="com.test.webservice.IHelloWorld",serviceName="helloService123") public class HelloWorldImpl implements IHelloWorld { @Override public String sayHello(User user) { System.out.println("开始调用Web Service method:sayHello()"); return user.getUsername()+"lilongsheng"; } @Override @WebMethod public String sayHello1() { System.out.println("开始调用Web Service method:sayHello1()"); return "lilongsheng1"; } }在实现类上面还可以加上SOAP注解,如
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)表示Web Service方法传递数据的类型、编码等设置。
参考:http://dlc-cdn.sun.com/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html/zh_CN/api/javax/jws/soap/SOAPBinding.html
3.Spring配置文件配置
<?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:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <jaxws:endpoint id="helloService456" implementor="com.test.webservice.HelloWorldImpl" address="/helloService789"/> </beans>
4.客户端测试代码
package com.test.webservice; //import org.apache.cxf.endpoint.Client; import org.apache.cxf.endpoint.Client; import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; public class testClient { public static void main(String[] args) { JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); //创建客户端 Client client = dcf.createClient("http://192.168.24.82:8080/Web_Service_Spring/ws/helloService789?wsdl"); Object[] objects; try { User user=new User(); user.setUsername("longsheng"); objects = client.invoke("sayHello",user); //输出调用结果 System.out.println(objects[0].toString()); } catch (Exception e) { e.printStackTrace(); } } }
上面传参为传实体,实体需要实现序列化接口才能先通过网络传输。Web service在系统间以及系统交互上用的很广泛。