项目上用到java调用.net的ws接口,本来使用axis的方式去调用,代码如下:
public static String doWS4Nomal(String url, List list ,Object[] obj, String methond, String nameSpace) {
String endpoint = url;
String result = "";
Service service = new Service();
Call call;
if(obj==null){
return "";
}
try {
call = (Call) service.createCall();
//如果是有SOAPAction命名空间的报错,则放开下两行
// call.setUseSOAPAction(true);
// call.setSOAPActionURI(nameSpace+methond);
call.setTargetEndpointAddress(new URL(endpoint));// 远程调用路径
//call.setOperationName(methond);// 调用的方法名
call.setOperationName(methond);
for (int i = 0 ; i < list.size() ; i ++){
// 设置参数名:
call.addParameter(new QName(nameSpace,(String)list.get(i)), // 参数名
XMLType.SOAP_STRING,// 参数类型:String
ParameterMode.IN);// 参数模式:'IN' or 'OUT'
}
// 设置返回值类型:
call.setReturnType(XMLType.SOAP_STRING);// 返回值类型:String
result = (String) call.invoke(obj);// 远程调用
System.out.println(result);
//log.info("**********获取所有xml数据**************"+result);
} catch (ServiceException e) {
//System.out.println("1"+e);
e.printStackTrace();
} catch (Exception e) {
//System.out.println("2"+e);
e.printStackTrace();
}
return result;
}
命名空间也对,参数方法也对,但是对方就是获取不到数据
查询了很多方式没有解决,无奈之下只能换一条路:用xfire调用接口,这个方式确实可以成功,如果有人能看出上面方式的问题也欢迎留言!
public static JSONObject doWsXfire(String url, String method, String[] obj){ JSONObject result = new JSONObject(); Client client =null; Object[] results=null; try { client = new Client(new URL(url)); results = client.invoke(method,obj); result = net.sf.json.JSONObject.fromObject(results[0]); }catch (Exception e){ e.printStackTrace(); } return result; }