webservice中有个方法返回的是一个Project对象
在java中如何能获取这个对象啊?
请高手指点下面是写的接口public interface HelloClientInterface
{
public Object GetProjectById(int id);
}
下面是java调用代码public class TestHelloClient
{
public static void main(final String[] args)
{
try
{
String wsdlUrl = "http://127.0.0.1:3000/project_server/wsdl";
String nameSpaceUri = "urn:ActionWebService";
String serviceName = "projectService";
String portName = "projectProjectServerPort"; ServiceFactory serviceFactory = ServiceFactory.newInstance(); Service afService =
serviceFactory.createService(new URL(wsdlUrl), new QName(
nameSpaceUri, serviceName)); HelloClientInterface proxy =
(HelloClientInterface)afService.getPort(new QName(nameSpaceUri,
portName), HelloClientInterface.class); System.out.println("return value is "+proxy.GetProjectById(1));
}
catch (Exception ex)
{
ex.printStackTrace();
} }
}
下面是报错信息- Exception:
org.xml.sax.SAXException: Deserializing parameter 'return': could not find deserializer for type {urn:ActionWebService}Project
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:236)
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 org.apache.axis.client.AxisClientProxy.invoke(AxisClientProxy.java:163)
at $Proxy0.GetProjectById(Unknown Source)
at Proxy.TestHelloClient.main(TestHelloClient.java:40)
java.lang.reflect.UndeclaredThrowableException
at $Proxy0.GetProjectById(Unknown Source)
at Proxy.TestHelloClient.main(TestHelloClient.java:40)
Caused by: org.xml.sax.SAXException: Deserializing parameter 'return': could not find deserializer for type {urn:ActionWebService}Project
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 org.apache.axis.client.AxisClientProxy.invoke(AxisClientProxy.java:163)
... 2 more
Caused by: org.xml.sax.SAXException: Deserializing parameter 'return': could not find deserializer for type {urn:ActionWebService}Project
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:236)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
at org.apache.axis.client.Call.invoke(Call.java:2467)
... 5 more
在java中如何能获取这个对象啊?
请高手指点下面是写的接口public interface HelloClientInterface
{
public Object GetProjectById(int id);
}
下面是java调用代码public class TestHelloClient
{
public static void main(final String[] args)
{
try
{
String wsdlUrl = "http://127.0.0.1:3000/project_server/wsdl";
String nameSpaceUri = "urn:ActionWebService";
String serviceName = "projectService";
String portName = "projectProjectServerPort"; ServiceFactory serviceFactory = ServiceFactory.newInstance(); Service afService =
serviceFactory.createService(new URL(wsdlUrl), new QName(
nameSpaceUri, serviceName)); HelloClientInterface proxy =
(HelloClientInterface)afService.getPort(new QName(nameSpaceUri,
portName), HelloClientInterface.class); System.out.println("return value is "+proxy.GetProjectById(1));
}
catch (Exception ex)
{
ex.printStackTrace();
} }
}
下面是报错信息- Exception:
org.xml.sax.SAXException: Deserializing parameter 'return': could not find deserializer for type {urn:ActionWebService}Project
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:236)
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 org.apache.axis.client.AxisClientProxy.invoke(AxisClientProxy.java:163)
at $Proxy0.GetProjectById(Unknown Source)
at Proxy.TestHelloClient.main(TestHelloClient.java:40)
java.lang.reflect.UndeclaredThrowableException
at $Proxy0.GetProjectById(Unknown Source)
at Proxy.TestHelloClient.main(TestHelloClient.java:40)
Caused by: org.xml.sax.SAXException: Deserializing parameter 'return': could not find deserializer for type {urn:ActionWebService}Project
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 org.apache.axis.client.AxisClientProxy.invoke(AxisClientProxy.java:163)
... 2 more
Caused by: org.xml.sax.SAXException: Deserializing parameter 'return': could not find deserializer for type {urn:ActionWebService}Project
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:236)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
at org.apache.axis.client.Call.invoke(Call.java:2467)
... 5 more
TypeMappingRegistry tmr = service.getTypeMappingRegistry();
TypeMapping tm = tmr.createTypeMapping();
tm.register(Project.class,
new QName(nameSpace, "Project"),
new BeanSerializerFactory(Project.class, new QName(nameSpace, "Project")),
new BeanDeserializerFactory(Project.class, new QName(nameSpace, "Project")));
tmr.register(link, tm);如果Web Service方法 返回一个Project类型对象,首先建一个Project JavaBean,其中字段要跟wsdl中描述的相一致,
然后通过上述代码进行类型映射,就可以了。
BeanSerializerFactory和BeanDeserializerFactory是axis.jar中的类,所以要先包含该jar包
link = "http://schemas.xmlsoap.org/soap/encoding/"
namespace 为Web Service的命名空间