Java Web Services的classpaths,classNotFoundException

时间:2012-08-20 07:27:45

标签: java web-services classpath

这里的严重问题,我不知道该怎么做,一直都在这个时候。得到此错误:

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控制台抛出错误。

任何人都可以帮助我,我真的很感激。

1 个答案:

答案 0 :(得分:1)

我假设它的反序列化失败了:

Object obj = read.readObject();

它失败了,因为序列化时对象的完全限定类名是User(因此异常消息“java.lang.ClassNotFoundException: User”)。但是你的代码库只有一个名为bc.User的类(因为它在“bc”包中)。从Java的角度来看,这些是完全不同且不相关的类。

您需要在序列化的两端使用相同的类。