XFire是与Axis2 并列的新一代WebService平台.我只学了点XFire,所以就说XFire,不说AXis2.XFire它有如下特性:
支持多个重要的Web Service标准,包括SOAP,WSDL,WS-I Basic Profile,WS-Addressing WS-Security等
可选的绑定方式,如POJO,XMLBeansJAXB1.1,JAXB2.0 CAstor JiBX等
支持 JSR181 API
多种传输方式,如 HTTP,JMS,XMPP,IN-JVM等
支持多个容器,如 Spring,Pico,Plexus,Loom
支持 JBI
(上面说的东西,我建议了解清楚,既能拓展知识面,同时也更清楚XFire到底支持的是什么东西.这对自己有很大帮助.我自己光了解上面东西概念,就用了一下午,学到很多)
2007年后Xfire改名为Apache CXF
既然了解了XFire能做啥,又知道XFire是新一代.那么下面就开始建立用XFire建立Web Service 下面以service为例
1 建立接口和实现类
当然首先的加入XFire包.
//定义接口
package com.ywxm.service;
public interface SimpleService {
public String login(@WebParam String username, String password);
public void getUser();
}
//接口实现类
package com.ywxm.service.support;
import com.ywxm.service.SimpleService;
public class SimpleServiceImpl implements SimpleService {
public String login(String username, String password) {
if (username.equals("") || username == null) {
return "交出用户名";
}
if (password.equals("") || password == null) {
return "交出密码";
}
return "ok";
}
public void getUser() {
}
}
2 建立services.xml.保存在WEB-INF/src/META-INF/xfire文件夹下.如果是maven工程将META-INF/xfire/service.xml建立在src/main/resources 下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>SimpleService </name> <!--web services 名 -->
<namespace>http://webservice.ywxm.com</namespace>
<serviceClass>com.ywxm.service.SimpleService </serviceClass> <!--接口 -->
<implementationClass>com.ywxm.service.support.SimpleServiceImpl </implementationClass> <!-- 接口实现-- >
</service>
<beans>
3 web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<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>/services/*</url-pattern>
</servlet-mapping>
</web-app>
在web.xml配置xfireServlet.它负责提供Web Service,并提供每个Web Service的WSDL.
4 将工程部署,运行.http://localhost:8080/service/services
Available Services:
SimpleService [wsdl]
Generated by XFire ( http://xfire.codehaus.org )
点击[wsdl]查看到wsdl文件,表明web service发布成功.
5 建立 client来使用这个web服务.
public static void main(String[] args) throws MalformedURLException {
<!--web service发布的URL.如果不清楚可查看<wsdl:service name="">....</wsdl:service> -->
String serviceURL = "http://localhost:8080/service/services/SimpleService";
Service serviceModel = new ObjectServiceFactory().create(SimpleServicePortType.class);
XFireProxyFactory serviceFactory = new XFireProxyFactory();
<!--SimpleServicePortType 为客户端定义的bean -->
SimpleServicePortType service = (SimpleServicePortType) serviceFactory.create(serviceModel, serviceURL);
// 忽略http连接的超时时间,0为不设置超时时间,》=1为超时毫秒数
Client client = Client.getInstance(service);
client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "0");
String hello = service.login("", ""); //参数不能为null
}
也可以使用wsdl生成客户端代码. 可以看下这位仁兄写的 http://blog.csdn.net/stoneyang2005/article/details/3939117
上面实现方式只是XFire一种,其实也是可以通过注解实现.使用注解可以减少很多xml配置.jsr181提供了一套注解web service 的方法.使用只需要修改两个地方.
1上面说的接口和实现类.使用注解将不再使用接口和实现类的方式,而是直接定义一个服务类
package com.ywxm.service.support;
import com.ywxm.service.SimpleService;
@WebService
public class SimpleService{
@WebMethod
@WebResult
public String login(@WebParam String username, @WebParam String password) {
if (username.equals("") || username == null) {
return "交出用户名";
}
if (password.equals("") || password == null) {
return "交出密码";
}
return "ok";
}
@WebMenthod
public void getUser() {
}
}
@WebService 、@WebMethod 、@WebResult、@WebParam 核心属性具有默认值.它们具体用法和意思,查看 JDK API
2 修改services.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans >
<service xmlns="http://xfire.codehaus.org/config/1.0">
<serviceClass>com.ywxm.webservice.support.SimpleService
<serviceFactory>jsr181</serviceFactory>
</service>
</beans>
然后根据WDSl编写客户端.自己使用可以用wsdl生成.
有兴趣的可以去看看