内部系统之间数据传输使用RMI方式比较方便,但外部系统之间由于系统兼容性原因,使用WebService是较流行的方式。这两天特意整理了一下WebService发布、调用的方式,把实例贴出来。
1.服务端配置:使用CXF + Spring方式。
配置web.xml,添加cxfservler,
原因是webservice服务是运行在web容器中的,接收外部的http请求。所以配置一个servler,这里由cxf进行包装。
2.编写具体发布服务逻辑,并使用Spring进行配置
配置spring beans.xml文件,发布服务端的逻辑,并配置外接访问地址为:/SpeakService
3.导出服务端生成的wsdl文件,访问http://localhost:8180/SpeakService?wsdl,把网页内容保存成speak.wsdl文件。wsdl是接口描述文件,通过XML进行定义,客户端需要把wsdl文件提前解析为java文件,这样在客户端就可以像rmi方式一样调用。
转换工具使用apache-cxf-2.6.16, 具体命令:wsdl2java -p com -d D:\data\sss d:\data\sss\speak.wsdl 取出生成的ISpeakService.java类。
4.新建java工程并创建一个客户端调用主类。
拷贝刚才生成的ISpeakService.java至客户端工程。
主类中按下面方式调用即可。
1.服务端配置:使用CXF + Spring方式。
配置web.xml,添加cxfservler,
- <servlet>
- <servlet-name>CXFServlet</servlet-name>
- <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>CXFServlet</servlet-name>
- <url-pattern>/*</url-pattern>
- </servlet-mapping>
原因是webservice服务是运行在web容器中的,接收外部的http请求。所以配置一个servler,这里由cxf进行包装。
2.编写具体发布服务逻辑,并使用Spring进行配置
- @WebService
- public interface ISpeakService {
- public String speak(String userName, Date date);
- @WebService(endpointInterface = "com.sfexpress.ISpeakService")
- public class SpeakServiceImpl implements ISpeakService {
- public String speak(String userName, Date date){
- return "Hello " + userName + ", today is " + date.toString();
- }
- }
- }
配置spring beans.xml文件,发布服务端的逻辑,并配置外接访问地址为:/SpeakService
- <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="speakService"
- implementor="com.sfexpress.SpeakServiceImpl"
- address="/SpeakService" />
3.导出服务端生成的wsdl文件,访问http://localhost:8180/SpeakService?wsdl,把网页内容保存成speak.wsdl文件。wsdl是接口描述文件,通过XML进行定义,客户端需要把wsdl文件提前解析为java文件,这样在客户端就可以像rmi方式一样调用。
转换工具使用apache-cxf-2.6.16, 具体命令:wsdl2java -p com -d D:\data\sss d:\data\sss\speak.wsdl 取出生成的ISpeakService.java类。
4.新建java工程并创建一个客户端调用主类。
拷贝刚才生成的ISpeakService.java至客户端工程。
主类中按下面方式调用即可。
- public static void main(String[] args) throws DatatypeConfigurationException {
- // 创建WebService客户端代理工厂
- JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
- // 注册WebService接口
- factory.setServiceClass(ISpeakService.class);
- // 设置WebService地址
- factory.setAddress("http://localhost:8180/SpeakService?wsdl");
- XMLGregorianCalendar date = DatatypeFactory.newInstance().newXMLGregorianCalendar();
- date.setYear(2014);
- date.setMonth(11);
- date.setDay(12);
- ISpeakService greetingService = (ISpeakService) factory.create();
- System.out.println("message context is:"
- + greetingService.speak("beck", date));
- }
- 本文由上海java培训机构推荐阅读,更多精彩请浏览上海it培训官网。