读书人

Xfire~传递对象的有关问题~

发布时间: 2012-02-24 16:30:38 作者: rapoo

Xfire~~传递对象的问题~~
最近在看WebService,由于要整合Spring,所以选择了Xfire。
服务器端和客户端的测试demo都写好了。
当传递的参数是String类型的时候,没什么问题。
当传递的参数是自定义的User对象的时候,出现异常:
Exception in thread "main" org.codehaus.xfire.fault.XFireFault: Fault: java.lang.NullPointerException
at org.codehaus.xfire.fault.XFireFault.createFault(XFireFault.java:89)
at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:83)
at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114)
at org.codehaus.xfire.client.Client.invoke(Client.java:336)
at org.codehaus.xfire.client.Client.invoke(Client.java:368)
at com.leo.text.UserText.main(UserText.java:18)
Caused by: java.lang.NullPointerException
at org.codehaus.xfire.aegis.type.basic.ObjectType.writeObject(ObjectType.java:192)
at org.codehaus.xfire.aegis.AegisBindingProvider.writeParameter(AegisBindingProvider.java:229)
at org.codehaus.xfire.service.binding.AbstractBinding.writeParameter(AbstractBinding.java:273)
at org.codehaus.xfire.service.binding.WrappedBinding.writeMessage(WrappedBinding.java:90)
at org.codehaus.xfire.soap.SoapSerializer.writeMessage(SoapSerializer.java:80)
at org.codehaus.xfire.transport.http.HttpChannel.writeWithoutAttachments(HttpChannel.java:56)
at org.codehaus.xfire.transport.http.CommonsHttpMessageSender.getByteArrayRequestEntity(CommonsHttpMessageSender.java:422)
at org.codehaus.xfire.transport.http.CommonsHttpMessageSender.send(CommonsHttpMessageSender.java:360)
at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:123)
at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java:48)
at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:79)
此时的WSDL用IE能访问到。
DEBUG跟踪客户端进去,发现他根本没进入WebService暴露出的addUser方法就报错了。
User类我序列化过了,请问有人遇到过这类问题么,有解决方案么??
User类:

Java code
public class User implements Serializable{    private static final long serialVersionUID = 5502216907549201191L;    public User(){};    public User(String name,String password){        this.name = name;        this.password = password;    }    private int id;    private String name;    private String password;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}


UserDao接口:
Java code
public interface UserDao {    public User findUserById(int id);    public List<User> findAllUsers();    public boolean addUser(User user);    public boolean updateUser(User user);    public boolean deleteUser(User user);}


UserDaoImpl实现类:
Java code
public class UserDaoImpl  extends HibernateDaoSupport implements UserDao {    public boolean deleteUser(User user) {        this.getHibernateTemplate().delete(user);        return true;    }    public List<User> findAllUsers() {        List<User> users = this.getHibernateTemplate().find("from User");        return users;    }    public User findUserById(int id) {        User user = (User) this.getHibernateTemplate().get(User.class, id);        return user;    }    public boolean addUser(User user) {System.out.println(user.getName());System.out.println(user.getPassword());        this.getHibernateTemplate().save(user);        return true;    }    public boolean updateUser(User user) {        this.getHibernateTemplate().update(user);        return true;    }} 



UserText测试类:
Java code
public class UserText {    public static void main(String[] args) throws MalformedURLException,    Exception {    Client client = new Client(new URL(            "http://localhost:8080/xfire/services/UserDao?wsdl"));    Object[] opAddEntryArgs = new Object[] {new User("zhangzhibo","zhangzhibo")};    Object[] results = client            .invoke("addUser", opAddEntryArgs);    System.out.println(results[0]);}


applicationContext.xml,xfire-servlet.xml,Web.xml个人猜测没什么错误,因为测试的时候传String都可以调用。
如果有需要,后面贴上来。
请知道的朋友赐教~~谢谢

[解决办法]
配置文件贴出来吧。。
建议先把 this.getHibernateTemplate().save(user); 注释掉。看看效果。

或者
http://topic.csdn.net/u/20090917/17/24266879-d931-4e28-97e5-e4ac46bfbb19.html

[解决办法]
好长,配置这些东东最烦了

读书人网 >XML SOAP

热点推荐