1. xfire + spring 发布webservice
2. 利用 javascript 调用发布的webservice
使用xfire +spring 发布webservice其实很简单,遵循一下几个步骤即可
1. 想要发布成文webservice的类,必须实现接口
2. 3个配置文件(后面详细说)
下面针对以上步骤详细说明
关于1中的要求,给个例子就明白了
Itest.java 代码
- package test;
- import org.json.JSONException;
- public interface IHello
- {
- public String hello();
- public String helloTo(String name);
- public String getJsonData(String pageIndex,String pageSize);
- }
HelloImpl.java 代码
- package test;
- import java.util.*;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpSession;
- import org.codehaus.xfire .transport.http.XFire ServletController;
- import org.json.JSONException;
- import org.json.JSONStringer;
- public class HelloImpl implements IHello
- {
- public String hello()
- {
- return "hello" ;
- }
- public String helloTo(String name)
- {
- return " hello " + name + "!" ;
- }
- private void example()
- {
- //使用session
- HttpServletRequest request = XFire ServletController.getRequest();
- HttpSession session = request.getSession();
- }
- public String getJsonData(String pageIndex,String pageSize)
- {
- String rtnValue = "" ;
- rtnValue = "" ;
- for ( int i= 0 ;i<Integer.parseInt(pageSize);i++)
- {
- rtnValue = rtnValue + "{'lastname': 'last" + pageIndex + "-" + i + "', 'firstname': 'first" + pageIndex + "-" + i + "' }," ;
- }
- rtnValue = rtnValue + "{'lastname': 'last', 'firstname': 'last' }" ;
- rtnValue = "{'context':[" + rtnValue + "],'pager':[{'totalRecord':'100','totalpage':'10','pageIndex':'" + pageIndex + "','pageSize':'10'}]}" ;
- return rtnValue;
- }
- }
就这样写就可以了
关于三个配置文件
web.xml修改如下
xml 代码
- <? xml version = "1.0" encoding = "UTF-8" ?>
- < web-app xmlns = "http://java.sun.com/xml/ns/j2ee" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" version = "2.4" xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
- <!-- 配置文件路径 开始 -->
- < context-param >
- < param-name > log4jConfigLocation </ param-name >
- < param-value > /WEB-INF/classes/log4j.properties </ param-value >
- </ context-param >
- < context-param >
- < param-name > contextConfigLocation </ param-name >
- < param-value >
- /WEB-INF/classes/applicationContext*.xml
- classpath:org/codehaus/xfire /spring /xfire .xml
- </ param-value >
- </ context-param >
- <!-- 启动时加载Spring ContextServlet -->
- < listener >
- < listener-class >
- org.spring framework.web.context.ContextLoaderListener
- </ listener-class >
- </ listener >
- < listener >
- < listener-class > org.spring framework.web.util.Log4jConfigListener </ listener-class >
- </ listener >
- < listener >
- < listener-class >
- org.spring framework.web.util.IntrospectorCleanupListener
- </ listener-class >
- </ listener >
- <!-- XFire 配置 -->
- < servlet >
- < servlet-name > xfire </ servlet-name >
- < servlet-class > org.spring framework.web.servlet.DispatcherServlet </ servlet-class >
- </ servlet >
- < servlet-mapping >
- < servlet-name > xfire </ servlet-name >
- < url-pattern > *.ws </ url-pattern >
- </ servlet-mapping >
- < welcome-file-list >
- < welcome-file > index.html </ welcome-file >
- </ welcome-file-list >
- </ web-app >
这里注意 classpath:org/codehaus/xfire /spring /xfire .xml 必须要写进去
xfire -servlet.xml 新建这个文件,并且和web.xml放在同一个文件夹
注意: 名称和位置都不能变(也许可以改,我不知道)
xml 代码
- <? xml version = "1.0" encoding = "UTF-8" ?>
- <!DOCTYPE beans PUBLIC "-//SPRING //DTD BEAN//EN" "http://www.spring framework.org/dtd/spring -beans.dtd">
- < beans >
- < bean class = "org.spring framework.web.servlet.handler.SimpleUrlHandlerMapping" >
- < property name = "urlMap" >
- < map >
- < entry key = "/testService.ws" >
- < ref bean = "test" />
- </ entry >
- </ map >
- </ property >
- </ bean >
- < bean id = "test" parent = "webService" class = "org.codehaus.xfire .spring .remoting.XFire Exporter" >
- < property name = "serviceBean" >
- < ref bean = "testBean" />
- </ property >
- < property name = "serviceClass" >
- < value > test.IHello </ value >
- </ property >
- </ bean >
- <!-- webService base -->
- < bean id = "webService" class = "org.codehaus.xfire .spring .remoting.XFire Exporter" abstract = "true" >
- < property name = "serviceFactory" >
- < ref bean = "xfire .serviceFactory" />
- </ property >
- < property name = "xfire " >
- < ref bean = "xfire " />
- </ property >
- </ bean >
- </ beans >
spring 的配置文件 applicationContext-webService.xml
xml 代码
- <? xml version = "1.0" encoding = "UTF-8" ?>
- <!DOCTYPE beans PUBLIC "-//SPRING //DTD BEAN//EN" "http://www.spring framework.org/dtd/spring -beans.dtd">
- < beans >
- < bean id = "testBean" class = "test.HelloImpl" > </ bean >
- </ beans >
查看wsdl http://localhost:8080/mootools/ testService.ws ?wsdl
运行 进入 index.html 页面,点击 即可执行调用,正常显示表示发布成功,调用失败会返回error(运行前请修改index.html文件的源码,将url修改成真正的url)