axis调用webService(二)
介绍
Axis框架来自 Apache 开放源代码组织,它是基于JAVA语言的最新的 SOAP 规范(SOAP 1.2)和 SOAP with Attachments 规范(来自 Apache Group )的开放源代码实现。有很多流行的开发工具都使用AXIS作为其实现支持Web服务的功能,例如JBuilder以及著名的Eclipse J2EE插件Lomboz。AXIS的最新版本是1.1,可以从 http://ws.apache.org/axis/index.html下载。下图是AXIS核心引擎的体系结构图:
代码
pom代码里面引入axis依赖
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>axis</groupId>
<artifactId>axis-wsdl4j</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jaxrpc</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.2</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
客户端代码调用示例
public class ExternalUnitService{
@Autowired
private IOrgUnitService service;
@Autowired
private OrgUnitMapper mapper;
public void selectFromOrgUnit(String date1,String date2,String crbuid,String userName,String password){
String method="queryUnit";
String str = invokeRemoteFuc(date1,date2,crbuid,method,userName,password);
JSONArray json = JSONArray.fromObject(str);
List<HrOrgUnit> list = JSONArray.toList(json, HrOrgUnit.class);
for(HrOrgUnit hrOrgUnit :list){
List<HrOrgUnit> hrOrgUnits = service.selectByUnitCode(hrOrgUnit.getUnitCode());
if(hrOrgUnits.size()==0){
hrOrgUnit.setUnitId(null);
mapper.insertSelective(hrOrgUnit);
}else{
hrOrgUnit.setUnitId(hrOrgUnits.get(0).getUnitId());
mapper.updateByPrimaryKey(hrOrgUnit);
}
}
}
public static String invokeRemoteFuc(String date1,String date2,String crbuid,String method,String userName,String password){
String endpoint="http://192.168.1.156:8080/core/ws/UnitService?wsdl";
String result="[]";
System.out.println(result);
org.apache.axis.client.Service service =new org.apache.axis.client.Service();
Call call;
Object[] object=new Object[4]; //Object用来存储方法的参数
object[0]="111"; //相应的参数,由于保密
try {
call=(Call)service.createCall();
call.setTargetEndpointAddress(endpoint); //远程调用路径
// call.setOperationName(new QName("delete")); //调用的方法名
String targetNamespace = "http://ws.dcpc.hap.hand.com/";
call.setOperationName(new QName(targetNamespace, method));
//设置参数名:
call.addParameter("lastUpdateDateBegin", //参数名
XMLType.XSD_STRING,//参数类型:String
ParameterMode.IN); //参数模式:'IN' or 'OUT'
call.addParameter("lastUpdateDateEnd", //参数名
XMLType.XSD_STRING,//参数类型:String
ParameterMode.IN); //参数模式:'IN' or 'OUT'
call.addParameter("crbuid", //参数名
XMLType.XSD_STRING,//参数类型:String
ParameterMode.IN); //参数模式:'IN' or 'OUT'
//设置返回值类型:
call.setReturnType(XMLType.XSD_STRING); //返回值类型:String
call.setUsername(userName);
call.setPassword(password);
call.setTimeout(1000000);
result=(String)call.invoke(new Object[] {date1,date2,crbuid} ); //远程调用
System.out.println(result);
}catch (ServiceException e) {
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
return result;
}
}