这里的严重问题,我不知道该怎么做,一直都在这个时候。得到此错误:
java.lang.ClassNotFoundException: User
这是我的代码:
public class BookingServerPublisher{
public static void main(String[] args){
System.out.println("Starting web Service,Press Ctrl + C to stop\n");
// 1st argument is the publication URL
// 2nd argument is an SIB instance
Endpoint.publish("http://127.0.0.1:9876/bs", new BookingServerImpl());
}
}
@WebService(endpointInterface = "bs.BookingServer")
public class BookingServerImpl implements BookingServer{
User users = new User();
public void initData(){
users.loadUsers();
}
}
@WebService
@SOAPBinding(style = Style.RPC)
public interface BookingServer{
@WebMethod void initData();
}
class BookingClient{
public static void main(String args[]) throws Exception{
URL url = new URL("http://localhost:9876/bs?wsdl");
// Qualified name of the service:
// 1st arg is the service URI
// 2nd is the service name published in the WSDL
QName qname = new QName("http://bs/", "BookingServerImplService");
// Create, in effect, a factory for the service.
Service service = Service.create(url, qname);
// Extract the endpoint interface, the service "port".
BookingServer eif = service.getPort(BookingServer.class);
eif.initData();
}
}
package bs;
import java.io.*;
import java.util.*;
public class User{
private static final long serialVersionUID = 1;
static ArrayList<User> userList = new ArrayList<User>(); //Dynamic List of all the User objects
String name;
String password;
String level;
boolean isAdmin = false;
User(){
super();
}
//Method for loading User objects from data file
static void loadUsers(){
try {
FileInputStream stream = new FileInputStream("UsersData");
ObjectInputStream read = new ObjectInputStream(stream);
while(stream.available() != 0){
Object obj = read.readObject();
if(obj instanceof User){
User users = (User) obj;
userList.add(users);
}
}
stream.close();
read.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
//Method for saving User objects to data file
static void saveUsers(){
try {
FileOutputStream stream = new FileOutputStream("UsersData");
ObjectOutputStream write = new ObjectOutputStream(stream);
for(int i = 0; i < userList.size();i++){
if(userList.get(i) instanceof User){
write.writeObject(userList.get(i));
}
}
stream.close();
write.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
所有文件中的包都是bs
,我正在执行java bs.BookingServerPublisher
,
java bs.BookingClient
文件夹的文件夹中的 bs
,即。 bs
'父目录,BookingServerPublisher
控制台抛出错误。
任何人都可以帮助我,我真的很感激。
答案 0 :(得分:1)
我假设它的反序列化失败了:
Object obj = read.readObject();
它失败了,因为序列化时对象的完全限定类名是User
(因此异常消息“java.lang.ClassNotFoundException: User
”)。但是你的代码库只有一个名为bc.User
的类(因为它在“bc”包中)。从Java的角度来看,这些是完全不同且不相关的类。
您需要在序列化的两端使用相同的类。