webservice客户端,四种实现方式模式,AXIOM,ADB, XMLBeans , JiBX
其中axiom -- axis2 object model ,AXIOM支持pull式处理。
个人理解为axiom提供一种高效的处理方式,不需要将整个对象加载到内存进行解析方式从而提高处理效率和可选择性。
之前用ServiceClient的方式,在服务运行正常的情况下,由于不知道如何设置各种参数导致以下错误:
org.apache.axis2.AxisFault:服务器未能识别 HTTP头 SOAPAction的值.
org.apache.axis2.AxisFault:服务器无法处理请求。 --->未将对象引用设置到对象的实例.
参考了官方文档的client实现,ADB实现比较简便
Downloads/axis2-1.6.2-docs/axis2-1.6.2/site/docs/quickstartguide.html#deploy说明了四种实现方式.
ADB实现步骤如下:
下载axis2-1.6.2-bin, axis2-1.6.2-war文件
1使用wsdl2java.bat(axis2/bin目录下)生成服务器对应的对象java类
2建立新的java工程,将生成的java放入src目录,解压axis2-1.6.2-war文件,
引用\axis2-1.6.2-war\axis2\WEB-INF\lib中的jar包
3使用生成文件中的*stub.java,获取相应函数和操作.
1生成java对象命令
wsdl2java-uri http://www.webxml.com.cn/webservices/weatherwebservice.asmx?wsdl -d adb -s-ss -sd -ssi –o mybuild
-uri可以本机wsdl文件路径或者是网络服务的uri地址
-o (mybuild)对应生成的文件路径,本例生成路径为-bin\axis2-1.6.2\bin\mybuild,内容如下
将src中的文件拷贝到新建工程中的src目录
红线标注的类为我们要使用的类,新建ADBClient.java
import cn.com.webxml.GetSupportCity;
import cn.com.webxml.GetSupportCityResponse;
import cn.com.webxml.WeatherWebServiceStub;
public class ADBClient {
public static void main(java.lang.String args[]){
try{
WeatherWebServiceStub stub =new WeatherWebServiceStub
("http://www.webxml.com.cn/webservices/weatherwebservice.asmx");
getSupportCity(stub);
} catch(Exception e){
e.printStackTrace();
System.err.println("\n\n\n");
}
}
/* fire and forget */
public static void getSupportCity(WeatherWebServiceStub stub){
try{
GetSupportCity city = new GetSupportCity();
city.setByProvinceName("All");
GetSupportCityResponse res = stub.getSupportCity(city);
String[] str = res.getGetSupportCityResult().getString();
int len = str.length;
for (int i=0;i<len;i++)
{System.out.println(str[i]);}
} catch(Exception e){
e.printStackTrace();
System.err.println("\n\n\n");
}
}
}
使用这种方式没有提示错误,返回结果