java如何取得webservice返回的对象

wsLOVEss 2009-05-10 03:17:13
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

...全文
623 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsLOVEss 2009-05-14
  • 打赏
  • 举报
回复
上面用到的
link = "http://schemas.xmlsoap.org/soap/encoding/"
namespace 为Web Service的命名空间
wsLOVEss 2009-05-14
  • 打赏
  • 举报
回复

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包
lovingpig 2009-05-11
  • 打赏
  • 举报
回复
如何返回要看你WSDL是怎么定义的阿
wsLOVEss 2009-05-11
  • 打赏
  • 举报
回复
据说可以返回对象的吧!!!
wsLOVEss 2009-05-11
  • 打赏
  • 举报
回复
哦,发现是我客户端没有指定映射类型。。。
zqx32 2009-05-10
  • 打赏
  • 举报
回复
用string返回xml文件,不能用object吧

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧