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类:
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; }}
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);}
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; }}
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]);}