Xfire在2007年就不在更新了,最后版本是1.2.6,为什么不更新了呢,因为被CXF合并了,CXF里面的X就是指Xfire。
这个WebService发布和调用框架相对简单一些,主要原因就是依赖的jar包不多。在企业开发中,涉及的jar包会非常非常多,如果WebService的依赖jar包也很多,两个混合到一起,就会产生致命的影响,jar包冲突,这是多数人的噩梦,经常搞几天也搞不定。
现在有一些项目如果必须用到WebService,我也是推荐xfire,主要原因就是简单无影响。
下面来看一下具体实现
添加依赖pom.xml
<dependency>
<groupId>org.codehaus.xfire</groupId>
<artifactId>xfire-all</artifactId>
<version>1.2.6</version>
</dependency>
这里面简单引入xfire-all,实际应用中,应该把不相关的都去掉,比如xfire-spring等等。
配置web.xml
<!--Xfire配置 -->
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
xfire的服务发布本质上还是一个servlet,在服务发布后,通过http://localhost:8080/service
可以查看服务的发布情况。
定义服务配置META-INF/xfire/services.xml
<beans>
<service xmlns="http://xfire.codehaus.org/config/1.0">
<name>FirstService</name>
<namespace>http://smallnest.googlepages.com/FirstService</namespace>
<serviceClass>com.critc.xfire.FirstService</serviceClass>
<implementationClass>com.critc.xfire.FirstServiceImpl</implementationClass>
</service>
</beans>
这个文件的路径一定要准确。
这是一个服务的配置,里面需要定义name
,namespace
,对应的class,即接口类 serviceClass
,接口的具体实现implementationClass
服务接口定义FirstService
public interface FirstService {
public String sayHello(String name);
}
服务接口实现FirstServiceImpl
public class FirstServiceImpl implements FirstService {
public String sayHello(String name) {
return "hello:" + name;
}
}
上面都比较简单。
启动整个工程,在地址栏输入:http://localhost:8080/services
:
点击services
链接:
客户端调用代码
public class TestXfire {
public static void main(String[] args) {
try {
Client client = new Client(new URL("http://localhost:8080/services/FirstService?wsdl"));
Object[] results = client.invoke("sayHello", new Object[] { "张三" });
System.out.println((String) results[0]);
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端调用还是非常容易的,定义url,指定方法名sayHello
,指定参数,传入Object[]
数组,通过invoke
调用就可以获取返回值了。
当然xfire的功能远不止于此,比如和spring整合,调用的权限校验,客户端通过逆向工程生成对应的方法和类型等等。但是简单的基于xfire的WebService的发布及调用就这么多。
网友评论