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

解决方案 »

  1.   

    用string返回xml文件,不能用object吧
      

  2.   

    如何返回要看你WSDL是怎么定义的阿
      

  3.   


        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包
      

  4.   

    上面用到的
    link = "http://schemas.xmlsoap.org/soap/encoding/"
    namespace 为Web Service的命名空间