1 . XFire可以认为是webservice的一个实现。
其下载地址:http://xfire.codehaus.org/
下载了以后把lib下的所有jar和xfire-all-*.jar拷贝到你的项目里。
配置web.xml
xml 代码
- xml version="1.0" encoding="UTF-8"?>
- <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <servlet>
- <servlet-name>xfireservlet-name>
- <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServletservlet-class>
- servlet>
- <servlet-mapping>
- <servlet-name>xfireservlet-name>
- <url-pattern>/services/*url-pattern>
- servlet-mapping>
- web-app>
构建Server端
java 代码
- package org.ttitfly;
- public class User {
- private String username;
- private int age;
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
UserService及UserService的实现类:UserServiceImpl
java 代码
- package org.ttitfly;
- public interface UserService {
- public User getUserByUsername(String username);
- public String getString();
- }
java 代码
- public class UserServiceImpl implements UserService{
- private User user;
- public UserServiceImpl(){
- user = new User();
- user.setUsername("ttitfly");
- user.setAge(26);
- }
- public User getUserByUsername(String username){
- if("ttitfly".equals(username)){
- return user;
- }else{
- return new User();
- }
- }
- public String getString(){
- return "testtest";
- }
- }
在services.xml里配置发布服务的说明。
默认会去classpath下的META-INF/xfire/services.xml找这个文件。
xml 代码
- <beans xmlns="http://xfire.codehaus.org/config/1.0">
- <service>
- <name>UserServicename>
- <namespace>sdfjslfjslfkjlsnamespace>
- <serviceClass>org.ttitfly.UserServiceserviceClass>
- <implementationClass>org.ttitfly.UserServiceImplimplementationClass>
- service>
- beans>
客户端代码:
java 代码
- package org.ttitfly;
- import java.net.MalformedURLException;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.codehaus.xfire.client.XFireProxyFactory;
- import org.codehaus.xfire.service.Service;
- import org.codehaus.xfire.service.binding.ObjectServiceFactory;
- import org.springframework.util.Assert;
- @SuppressWarnings("unchecked")
- public class XFireClientFactory {
- private static XFireProxyFactory serviceFactory = new XFireProxyFactory();
- private static final Log log = LogFactory.getLog(XFireClientFactory.class);
- private XFireClientFactory() {
- }
- /**
- * 获得POJO形式的Web服务的客户端Proxy类.
- *
- * @param serviceURL Web ServiceURL
- * @param serviceClass Web Service接口类
- * @return 类型为Web Service接口的客户端Proxy类
- */
- public static <t></t> T getClient(String serviceURL, Class<t></t> serviceClass) {
- Assert.notNull(serviceURL);
- Assert.notNull(serviceClass);
- Service serviceModel = new ObjectServiceFactory().create(serviceClass);
- try {
- return (T) serviceFactory.create(serviceModel, serviceURL);
- } catch (MalformedURLException e) {
- log.error(e.getMessage(), e);
- e.printStackTrace();
- return null;
- }
- }
- }
客户端调用类:
java 代码
- package org.ttitfly;
- public class TestClient {
- public static void main(String[] args) {
- String serviceURL = "http://localhost:8080/xfireTest/services/UserService";
- try {
- UserService service = XFireClientFactory.getClient(serviceURL, UserService.class);
- System.out.println(service.getUserByUsername("ttitfly").getAge());
- System.out.println(service.getString());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
启动tomcat:输入:http://localhost:8080/xfireTest/services/UserService?wsdl 可以查看生成的wsdl文档
如果输入:http://localhost:8080/xfireTest/services/UserService 输出的是:Invalid SOAP request. 也是正常的