xfire 编写webservice例子
来自 :
http://www.blogjava.net/jiujiubuzui/articles/293616.html
利用xfire编写webservice的例子,内容如下
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.XFireServletController;
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 = XFireServletController.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>
<!-- 启动时加载SpringContextServlet -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.util.IntrospectorCleanupListener
</listener-class>
</listener>
<!-- XFire 配置 -->
<servlet>
<servlet-name>xfire</servlet-name>
<servlet-class>org.springframework.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.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean parent="webService" 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.springframework.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)