目录
目录
一、直接上示例,直接跑
此代码可以当作一个模板
import com.alibaba.fastjson.JSONObject;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.junit.Test;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import java.rmi.RemoteException;
/**
* @ClassName: WebServiceTest
* @Description TODO
* @Author sugar
* @Date 2022/12/2814:22
*/
public class WebServiceTest {
@Test
public void MobileCodeWS() throws ServiceException, RemoteException {
//手机号
String jobNo = "1372465776";
//服务地址
String url = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl";
//命名空间
String namespaceURI = "http://WebXml.com.cn/";
//方法名
String method = "getMobileCodeInfo";
Service service = new Service();
Call call = (Call) service.createCall();
// wsdl完整地址
call.setTargetEndpointAddress(url);
/**
* 设置方法名
* new QName(String namespaceURI, String localPart) namespaceURI即为wsdl中的targetNamespace, localPart即为接口名
*/
call.setOperationName(new QName(namespaceURI, method));
/**
* 添加参数
* addParameter方法的参数包括:参数名(namespace+参数名)、参数类型、ParameterMode(入参即为IN)
*/
call.addParameter(new QName(namespaceURI, "mobileCode"), XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter(new QName(namespaceURI, "userID"), XMLType.XSD_STRING, ParameterMode.IN);
call.setUseSOAPAction(true);
// SOAPActionURI格式为targetNamespace+方法名
call.setSOAPActionURI(namespaceURI + method);
// 指定返回值类型,为字符串
call.setReturnType(XMLType.XSD_STRING);
call.setReturnClass(java.lang.String.class);
//调用方法并传递参数
String resultStr = (String) call.invoke(new Object[]{jobNo, ""});
System.out.println("服务调用结果:" + resultStr);
}
}
二、详解
1、页面访问接口
这里有个手机号归属地查询WebService接口MobileCodeWS Web 服务
2、java代码访问接口
可以理解例代码是个调用WS接口的模板。调其他WS接口都是一个套路,简单修改模板对应的参数即可。
java代码跑出来的结果:
三、总结
代码直接调用的优点:简单快捷,灵活。维护成本低。不像生产java类那样死板,如果接口存在调整,java类可能也需要跟着调整。比较麻烦。