1、首先确定对方开发WebService时使用的包
- axis1和axis2并不兼容
2、确定调用的方法
1、如对方给与方法使用该方法
2、使用axis的call方式
// 远程调用路径 ,无后缀wsdl
String endpoint = "http://IP地址:端口号/*/*/*";
//如:String url="http://127.0.0.1:8085/ibms/services/IQualityProblemsSyncService";
String result = "call failed!";
//调用方法名
String mothod = "Test";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(endpoint));
//new QName的URL是要指向的命名空间的名称,这个URL地址在你的wsdl打开后可以看到的,
//上面有写着targetNamespace="http://*.*.*/",这个就是你的命名空间值了;
call.setOperationName(mothod); // 调用的方法名
call.setTimeout(20000);//调用时间20s
// 设置参数名 :参数名 ,参数类型:String, 参数模式:'IN' or 'OUT'
call.addParameter(new QName("命名空间","param1"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName("命名空间","param2"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName("命名空间","param3"),XMLType.XSD_STRING,ParameterMode.IN);
call.setEncodingStyle("UTF-8");
String param1 = "";
String param2 = "";
String param3 = "";
call.setReturnType(Constants.XSD_STRING);
call.setUseSOAPAction(true);
try {
result = (String) call.invoke(new Object[] {param1,param2,param3});// 远程调用
System.out.println(result);
JSONObject resultJson = JSONObject.fromObject(result);
String resultDataXML = resultJson.getString("data");
if( "".equals(resultDataXML) && resultDataXML != null ){
Boolean flag = RealResultXML(resultDataXML);
if(flag){
System.out.println("解析成功");
}else {
System.out.println("解析失败");
}
}else{
System.out.println("无数据");
}
} catch (Exception e) {
System.out.println(result);
e.printStackTrace();
}
3、使用wsimport(jdk)方式(懒人专用)
打开jdk下的bin目录 看下能否找到"wsimport.exe"这个文件
一般情况下都会有
如果没有则说明你的JDK不支持这个功能
然后在DOS窗口下输入wsimport 敲回车
如果提示错误的话 说明你的JDK环境变量还没有配好
如果OK的话 输入以下命令就可以将wsdl文件生成java文件了
wsimport http://172.16.7.107:9090/com.kutesmart.esb.ldap.sso?wsdl -keep -p com.llg.ws2 -s g:/ws
参数说明
http://172.16.7.107:9090/com.kutesmart.esb.ldap.sso?wsdl wsdl文件url
-keep 是否生成源文件
-p com.llg.ws2 生成后的java包名
-s g:/ws 生成后放哪个目录
注意:wsimport与xfire冲突
原因:创建 Service 的代理的时候没有使用 jdk 自带的 javax.xml.ws.spi.Provider,而是使用了 xfire 包中的 javax.xml.ws.spi.Provider
处理方法:把 xfire 包中的 jaxws 子包删除掉就可以了
4、链接直接获取数据(直接把系统方法暴露)
//第一步:创建服务地址
URL url = new URL("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl");
//第二步:打开一个通向服务地址的连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//第三步:设置参数
//3.1发送方式设置:POST必须大写
connection.setRequestMethod("POST");
//3.2设置数据格式:content-type
connection.setRequestProperty("content-type", "text/xml;charset=utf-8");
//3.3设置输入输出,因为默认新创建的connection没有读写权限,
connection.setDoInput(true);
connection.setDoOutput(true);
//第四步:组织SOAP数据,发送请求
String soapXML = getXML("17321242779");
//将信息以流的方式发送出去
OutputStream os = connection.getOutputStream();
os.write(soapXML.getBytes());
//第五步:接收服务端响应,打印
int responseCode = connection.getResponseCode();
if(200 == responseCode){//表示服务端响应成功
//获取当前连接请求返回的数据流
InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String temp = null;
while(null != (temp = br.readLine())){
sb.append(temp);
}
/**
* 打印读取结果
*/
System.out.println(sb.toString());
is.close();
isr.close();
br.close();
}
os.close();