问题:
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.   

    引用“现在已经用Soap来调用过了,但是不知道怎么处理这么复杂的返回值。”
    有什么复杂的!?楼主解释下么?
      

  2.   

    List<city>泛型,我个人觉得是比较复杂了,如果楼上不觉得复杂,那就为小弟解说解说,谢谢!非常感激。
      

  3.   

    List<City>泛型,我个人觉得比较复杂,希望楼上给小弟指点指点,谢谢!非常感激。
      

  4.   

    这个帖子中我写了个例子,不过是用 Apache CXF 的,有兴趣的话可以参考一下:http://topic.csdn.net/u/20091016/22/56aebb07-cd7b-4c7b-a38a-ebd7f35392c8.html
      

  5.   


    我去看了,但是东西下载下来执行命令的时候却出异常了:set JAVA_HOME to the path where the J2SE5.0 <JDK5.0> is installed
      

  6.   

    这和是不是。net发布没有关系的。
      

  7.   


    看上去好像是要设置 JAVA_HOME 变量
      

  8.   

    执行生成一些封装的类和 SOAP 接口的命令,要先配置JAVA_HOME变量吗?那如果要配置,应该怎么配呢?在网上找了半天,也就是找出:JAVA_HOME=C:\Program Files\Java\jdk1.6.0   这一种配置。现在我就按那样的配置,然后再执行命令,结果出现另一种异常:这个异常找了很多资料都没有找到正确的解决方案。