WebService-xfire
xfire是3到5年的存活期,然后就淡出了市场。
1、引入相关的依赖:引入all的话,它会把所有关于xfire相关的东西都加载进来。
<dependency>
<groupId>org.codehaus.xfire</groupId>
<artifactId>xfire-all</artifactId>
<version>1.2.6</version>
</dependency>
引进来之后会把默认的spring1.2.6的版本给引入进来。
所以将spring1.2.6的版本给排除掉,而xfire最高支持spring的版本是3.2的。超过的话就会报错:
<!--引入spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.codehaus.xfire</groupId>
<artifactId>xfire-all</artifactId>
<version>${xfire-version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
2、新建一个接口和对应的实现类如下:
package com.xf.demo.service;
import com.xf.demo.domain.User;
import java.util.List;
public interface UserService {
void addUser(User user);
void delUser(Integer id);
User getUserById(Integer id);
List<User> getUsers();
}
package com.xf.demo.service;
import com.xf.demo.domain.User;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
//下面的接口中的方法是要暴漏出来的接口,然后通过接口找到对应的实现类,然后去实现远程的调用
@Service("userService")
public class UserServiceImpl implements UserService {
@Override
public void addUser(User user) {
System.out.println("新增的用户为"+user);
}
@Override
public void delUser(Integer id) {
System.out.println("删除了"+id+"用户信息");
}
@Override
public User getUserById(Integer id) {
User user = new User();
user.setId(id);
user.setName("魏朝阳");
user.setPass("123");
return null;
}
@Override
public List<User> getUsers() {
List<User> userList=new ArrayList<>();
userList.add(new User(1234567,"李四","234"));
userList.add(new User(1234568,"王五","235"));
userList.add(new User(1234569,"赵六","236"));
return userList;
}
}
2.1、写一个xml文件用来spring和xfire整合的:把这个导入进去,就是把整个xfire和spring整合的需要的对象就都交给Spring容器去管理。
在xfire.xml文件中导入了自定义的编辑器:
注册为单例的。
传输管理器,用的是默认的传输管理对象。
里面会定义一个默认的xfire的文件,当发布服务的时候必须有xfire的对象存在。因为这个对象是靠构造函数来注入的。是靠参数(的索引来注入的。
就是把刚刚的两个对象注入到xfire对象里面去。
数据格式提供绑定器:所以说在配置的时候要指定哪种数据格式来进行访问。
消息绑定的提供器:就是序列化和反序列化的提供器
消息在网络中进行传输肯定是需要序列化和反序列化将数据在网络中传输
2.2、配置哪些服务被发布:发布的接口是哪一个,发布的接口的实现类是哪一个。
2.3、配置web.xml,告诉哪些请求交给WebService去做处理,去配置xfire的控制器:
2.4、把该项目发布出去:
2.5、访问下xfire对应的wsdl文件:
2.6、这就成功的生成了wsdl的文件:
这样的一个WebService的服务就发布成功了,每一个元素都有一些约束。
name有in和out。in0代表传入的第一个参数。类型为整型。
getUserByIdResponse就是getUserById的响应结果,响应结果就是out
返回的类型是User对象。
它也把User的实体类映射一个xml,而且也保证了参数的顺序的。
当去调用的话,是需要下面的访问地址去调用 :这是一个服务终端的请求接口。
写一个主函数,然后运行启动:
WebService的Xfire就是这么做的。
在不同的项目中是如何去调用的呢?
3、新建一个客户端的项目,
3.1、加入相应的依赖,这里加的依赖与server端的依赖是一样的,这里就不贴了。
3.2、把server端的接口和实体类拷贝到client端,代码如下:
package com.xf.demo.domain;
public class User {
private Integer id;
private String name;
private String pass;
public User() {
}
public User(Integer id, String name, String pass) {
this.id = id;
this.name = name;
this.pass = pass;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pass='" + pass + '\'' +
'}';
}
}
package com.xf.demo.service;
import com.xf.demo.domain.User;
import java.util.List;
public interface UserService {
void addUser(User user);
void delUser(Integer id);
User getUserById(Integer id);
List<User> getUsers();
}
客户端的代码如下:
然后启动客户端:当客户端添加成功之后,就在server端的控制台就有对应的输出语句:
革命尚未成功,继续努力!!!!