<
deployment
xmlns
=
"http://xml.apache.org/axis/wsdd/"
xmlns:java
=
"http://xml.apache.org/axis/wsdd/providers/java"
>
<
service
name
=
"Login"
provider
=
"java:RPC"
>
<
parameter
name
=
"className"
value
=
"info.vzless.ws.Login"
/>
<
parameter
name
=
"allowedMethods"
value
=
"*"
/>
<
beanMapping
languageSpecificType
=
"java:info.vzless.ws.User"
qname
=
"ns1:User"
xmlns:ns1
=
"urn:BeanService"
/>
</
service
>
</
deployment
>
package
info.vzless.ws;
import
java.net.MalformedURLException;
import
java.net.URL;
import
java.rmi.RemoteException;
import
javax.xml.namespace.QName;
import
javax.xml.rpc.ServiceException;
import
org.apache.axis.AxisFault;
import
org.apache.axis.client.Call;
import
org.apache.axis.client.Service;
import
org.apache.axis.encoding.ser.BeanDeserializerFactory;
import
org.apache.axis.encoding.ser.BeanSerializerFactory;
public
class
TestClient {
public
static
void
main(String[] args) {
Service service =
new
Service();
try
{
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(
new
URL(
"http://localhost/ws-login/services/Login?wsdl"
));
// 对象注册
QName qn =
new
QName(
"urn:BeanService"
,
"ns1:User"
);
call.registerTypeMapping(User.
class
, qn,
new
BeanSerializerFactory(User.
class
,qn),
new
BeanDeserializerFactory(User.
class
,qn));
call.setOperationName(
new
QName(
"urn:BeanService"
,
"login"
));
User user =(User)call.invoke(
new
Object[]{
"Admin"
,
"admin"
}) ;
System.out.println(
"登录成功,欢迎"
+user.getUserName()+
"!"
);
}
catch
(ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch
(MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch
(AxisFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch
(RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Exception:
org.xml.sax.SAXException: Deserializing parameter 'loginReturn': could not find deserializer for type {urn:BeanService}User
at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:277)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:345)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
at org.apache.axis.client.Call.invoke(Call.java:2467)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at info.vzless.ws.TestClient.main(TestClient.java:30)
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXException: Deserializing parameter 'loginReturn': could not find deserializer for type {urn:BeanService}User
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException: Deserializing parameter 'loginReturn': could not find deserializer for type {urn:BeanService}User
at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:277)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:345)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
at org.apache.axis.client.Call.invoke(Call.java:2467)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at info.vzless.ws.TestClient.main(TestClient.java:30)
{http://xml.apache.org/axis/}hostname:china-3b60ccb40
org.xml.sax.SAXException: Deserializing parameter 'loginReturn': could not find deserializer for type {urn:BeanService}User
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
at org.apache.axis.client.Call.invoke(Call.java:2470)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at info.vzless.ws.TestClient.main(TestClient.java:30)
Caused by: org.xml.sax.SAXException: Deserializing parameter 'loginReturn': could not find deserializer for type {urn:BeanService}User
at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:277)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:345)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
at org.apache.axis.client.Call.invoke(Call.java:2467)
... 3 more 可以了 加上下面的...结贴http://bbs.csdn.net/topics/300185476
call.addParameter("userName", org.apache.axis.Constants.XSD_STRING,
ParameterMode.IN);
call.addParameter("password", org.apache.axis.Constants.XSD_STRING,
ParameterMode.IN);
call.setReturnType(qn, User.class);