问题:
1.服务商提供的资料就只有Webservice地址和一个说明文档。2.Webservice发布的方法返回类型都是自定义类对象,比如调用查询城市的方法,那么返回值就是List<city>。3.现在已经用Soap来调用过了,但是不知道怎么处理这么复杂的返回值。后来改用Axis来实现,出现了:Server did not recognize the value of HTTP Header SOAPAction: 这个异常,并且也是不知道怎么处理返回值问题。4.最后XFire来实现,代码如下:
//创建服务的元数据
Service serviceModel=new ObjectServiceFactory().create(ITestBiz.class);
//创建服务的代理
XFire xfire=XFireFactory.newInstance().getXFire();
XFireProxyFactory factory=new XFireProxyFactory(xfire);
//服务的地址
//String serviceURL="http://localhost:8080/myservice/services/myservices";
String serviceURL="http://dsfws2.cn/SelfDriveSerivce.asmx?WSDL";
//创建服务对象
ITestBiz service=null;
try{
service=(ITestBiz)factory.create(serviceModel,serviceURL);
}catch(Exception e){
e.printStackTrace();
}
//return service;
System.out.println(service.getCityList().size());
ITestBiz是我自己创建的一个接口,接口里就只有webservice服务器上的方法,com.test.biz.ITesBiz 这是接口的全路径。结果还是报异常:
Exception in thread "main" org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: The request element <getCityList xmlns='http://biz.test.com'> was not recognized.
org.codehaus.xfire.fault.XFireFault: The request element <getCityList xmlns='http://biz.test.com'> was not recognized.
at org.codehaus.xfire.fault.Soap11FaultSerializer.readMessage(Soap11FaultSerializer.java:31)
at org.codehaus.xfire.fault.SoapFaultSerializer.readMessage(SoapFaultSerializer.java:28)
at org.codehaus.xfire.soap.handler.ReadHeadersHandler.checkForFault(ReadHeadersHandler.java:111)
at org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:67)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.client.Client.onReceive(Client.java:406)
at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:139)
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)
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.XFireProxy.handleRequest(XFireProxy.java:77)
at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:57)
at $Proxy0.getChooseJourney(Unknown Source)
at com.test.TestXFire.main(TestXFire.java:36)
我已经整了两天了,还是没整好,请路过的高手指点指点,应该用哪一种方法调用webservice的方法,怎么处理返回值的问题?谢谢!
1.服务商提供的资料就只有Webservice地址和一个说明文档。2.Webservice发布的方法返回类型都是自定义类对象,比如调用查询城市的方法,那么返回值就是List<city>。3.现在已经用Soap来调用过了,但是不知道怎么处理这么复杂的返回值。后来改用Axis来实现,出现了:Server did not recognize the value of HTTP Header SOAPAction: 这个异常,并且也是不知道怎么处理返回值问题。4.最后XFire来实现,代码如下:
//创建服务的元数据
Service serviceModel=new ObjectServiceFactory().create(ITestBiz.class);
//创建服务的代理
XFire xfire=XFireFactory.newInstance().getXFire();
XFireProxyFactory factory=new XFireProxyFactory(xfire);
//服务的地址
//String serviceURL="http://localhost:8080/myservice/services/myservices";
String serviceURL="http://dsfws2.cn/SelfDriveSerivce.asmx?WSDL";
//创建服务对象
ITestBiz service=null;
try{
service=(ITestBiz)factory.create(serviceModel,serviceURL);
}catch(Exception e){
e.printStackTrace();
}
//return service;
System.out.println(service.getCityList().size());
ITestBiz是我自己创建的一个接口,接口里就只有webservice服务器上的方法,com.test.biz.ITesBiz 这是接口的全路径。结果还是报异常:
Exception in thread "main" org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: The request element <getCityList xmlns='http://biz.test.com'> was not recognized.
org.codehaus.xfire.fault.XFireFault: The request element <getCityList xmlns='http://biz.test.com'> was not recognized.
at org.codehaus.xfire.fault.Soap11FaultSerializer.readMessage(Soap11FaultSerializer.java:31)
at org.codehaus.xfire.fault.SoapFaultSerializer.readMessage(SoapFaultSerializer.java:28)
at org.codehaus.xfire.soap.handler.ReadHeadersHandler.checkForFault(ReadHeadersHandler.java:111)
at org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:67)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.client.Client.onReceive(Client.java:406)
at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:139)
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)
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.XFireProxy.handleRequest(XFireProxy.java:77)
at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:57)
at $Proxy0.getChooseJourney(Unknown Source)
at com.test.TestXFire.main(TestXFire.java:36)
我已经整了两天了,还是没整好,请路过的高手指点指点,应该用哪一种方法调用webservice的方法,怎么处理返回值的问题?谢谢!
有什么复杂的!?楼主解释下么?
我去看了,但是东西下载下来执行命令的时候却出异常了:set JAVA_HOME to the path where the J2SE5.0 <JDK5.0> is installed
看上去好像是要设置 JAVA_HOME 变量