最近在搞webService,结合网上的例子自己故总结一下,带大家利用xfire做一个webService接口,同时和spring相结合,相关的xfire的jar包,可以到xfire的官网上下载,然后在加上spring mvc ,spring等jar。。废话不多说,let's go
1创建一个简单的SayXFireService接口,里面只有一个sayHello的方法
public interface SayXFireService {
public String sayHello(String name);
}
2创建其实现类,实现方法很简单,简单的输出一句话而已:
public class SayXFireServiceImpl implements SayXFireService{
@Override
public String sayHello(String name) {
return name+",你好,这是我的第一个XFire demo";
}
}
3在context.xml文件中定义它的bean ,我这里beanId定义为com.mip.biz.webservice.xfire.server.service.sayXFireService
上面的基本上就是我们平时写一个service没什么区别,关键在下面的配置文件中。
4在配置文件夹中创建xfire-servlet.xml文件,配置文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 若是web.xml已经配置了org/codehaus/xfire/spring/xfire.xml,这里就不需要配置了 -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<bean id="baseExporter" class="org.codehaus.xfire.spring.remoting.XFireExporter"
lazy-init="false" abstract="true">
<property name="serviceFactory" ref="xfire.serviceFactory" />
<property name="xfire" ref="xfire" />
<property name="outHandlers">
<list>
<ref bean="domOutHandler" />
<ref bean="soapOutHandler" />
</list>
</property>
<property name="inHandlers">
<list>
<ref bean="domInHandler" />
</list>
</property>
</bean>
<bean id="domOutHandler" class="org.codehaus.xfire.util.dom.DOMOutHandler" />
<!-- 拦截器,自己写一个,不需要做什么的具体类在下面 -->
<bean id="soapOutHandler"
class="com.mip.biz.webservice.xfire.server.handler.soapOutHandler" />
<bean id="domInHandler" class="org.codehaus.xfire.util.dom.DOMInHandler" />
<!--
定义访问的url,但是web.xml需要配置org.springframework.web.servlet.dispatcherServlet
-->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<!-- test 这里可以写多个,你有几个webservice 写几个entry ref指向下面你写的bean-->
<entry key="/sayXfire.ws">
<ref bean="sayXfireExporter" />
</entry>
<!-- test -->
</map>
</property>
</bean>
<!-- hello webservice -->
<bean id="sayXfireExporter" parent="baseExporter">
<!-- 用到的实现类的bennId -->
<property name="serviceBean" ref="com.mip.biz.webservice.xfire.server.service.sayXFireService" />
<!-- 当前service对应的接口名称 -->
<property name="serviceClass"
value="com.mip.biz.webservice.xfire.server.service.SayXFireService" />
<!-- 发布的webService名称 -->
<property name="name" value="sayXfire" />
</bean>
<!-- hello webservice -->
</beans>
上面的soapOutHandler我们需要自己创建,不需要做什么,不过可以输出其信息
public class SoapOutHandler extends AbstractHandler {
public void invoke(MessageContext mc) throws Exception {
//每次调用接口会输出信息
// System.err.println(mc.getCurrentMessage());
}
}
其他的看下配置文件中的注释就可以瞬间明白了
5最后看下web.xml文件中需要添加的配置,其实本质和我们添加一个servlet的配置一个样,添加的代码如下
<!-- xfire webservice start -->
<!-- 它主要负责处理由 JavaBean Introspector 功能而引起的缓存泄露 -->
<listener>
<listener-class>
org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- 注意因为servlet-name为xfire,固xfire配置文件名应该是xfire-servlet.xml -->
<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>
<!-- 配合spring容器中XFire一起工作的Servlet- -->
<servlet>
<servlet-name>xfireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfireServlet</servlet-name>
<url-pattern>/xfireServices/*</url-pattern>
</servlet-mapping>
<!-- xfire webservice end -->
上面红色标记的是不是就是配置一个servlet!!!!
最后记得将下面的红色部分加进去
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
<!-- 其他的配置文件--->
classpath*:context/core-context.xml,
<!-- xfire的配置文件-->
classpath:context/xfire-servlet.xml
</param-value>
</context-param>
好了,到这里基本上配置完全搞定了,启动tomcat后在浏览器输入
http://localhost:8080/mip/xfireServices/sayXfire?wsdl看会输出什么内容吧,行动吧,少年!
如果输出的内容的最后有如下:
<wsdl:service name="sayXfire">
- <wsdl:port name="sayXfireHttpPort" binding="tns:sayXfireHttpBinding">
<wsdlsoap:address location="http://localhost:8080/mip/xfireServices/sayXfire" />
</wsdl:port>
</wsdl:service>
亲,你成功的发布了一个webService,从上面的一段中我们可以看到我们发布的服务名sayXfire,发布地址为http://localhost:8080/mip/xfireServices/sayXfire
最后,给大家再提供一个一个测试类
public class Test {
public static void main(String[] args) {
Service serviceModel = new ObjectServiceFactory().create(SayXFireService.class);
XFire xfire=XFireFactory.newInstance().getXFire();
XFireProxyFactory factory=new XFireProxyFactory(xfire);
String serviceUrl = "http://localhost:8080/mip/xfireServices/sayXfire"; SayXFireService service= null; try { service=(SayXFireService)factory.create(serviceModel,serviceUrl); } catch (MalformedURLException e) { e.printstacktrace(); } System.out.println(service.sayHello("zhangsan")); } } 运行application后在控制台输出了 zangsan,你好,这是我的第一个XFire demo 测试成功 ok,xfire的简单demo搞定了。。。具体细节大家可以继续去查找资料。。。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。