1. 查询对方提供的wsdl链接,通过该链接以及wsdl工具生成源码文件。
eg: wsdl地址为:http://sersh.passport.189.cn/UDBAPPInterface/UDBAPPSYS/AccountLogin.asmx?WSDL
eg: wsdl地址为:http://sersh.passport.189.cn/UDBAPPInterface/UDBAPPSYS/AccountLogin.asmx?WSDL
打开cmd,输入如下命令:wsimport -extension -s d:/test http://sersh.passport.189.cn/UDBAPPInterface/UDBAPPSYS/AccountLogin.asmx?WSDL
2. 上apache官网,下载CXF相关jar包。(apache-cxf-2.7.4.zip)
3. 导入相关jar包至项目中,编写客户端查询代码。(前提是Webservice服务端已经部署完毕)
public static void main(String[] args) throws MalformedURLException {
System.out.println("start.");
IMSILoginResult login = getIMSILoginResultFromQGUDBByImsi("460030136905408");
System.out.println("mobile is " + login.getUserID());
}
private static String serviceUrl = "http://sersh.passport.189.cn/UDBAPPInterface/UDBAPPSYS/AccountLogin.asmx?WSDL";
private static String QGUDB_DEVICENO = "3500000000408501";
private static String QGUDB_DESKEY = "75BD2E98AC17564B2DB7C74B064F5084C6557FDDF3E4C286";
public static <T> T getISAGService(Class<T> serviceClass, String serviceUrl) {
final JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(serviceClass);
factory.setAddress(serviceUrl);
return (T) factory.create();
}
/**
* 没有代理时,通过IMSI号查询返回FJUDB数据(只要有对象返回的时候,就说明是0,成功状态.)
* @param IMSI
* @return
* @throws MalformedURLException
* @throws Exception
*/
private static IMSILoginResult getIMSILoginResultFromQGUDBByImsi(String imsi)
throws MalformedURLException {
System.setProperty("http.proxyHost", "192.168.13.19");
System.setProperty("http.proxyPort", "7777");
// URL url = new URL(serviceUrl);
// // URL url = WebServiceUtil.class.getResource("/conf/AccountLogin_china.xml");
// // URL url = new URL("file:\\C:\\Users\\FFCS-4\\Desktop\\AccountLogin.xml");
// QName name = new QName("http://udb.chinatelecom.com", "AccountLogin");
// AccountLogin accountLogin = new AccountLogin(url, name);
// AccountLoginSoap accountLoginSoap = accountLogin.getAccountLoginSoap();
AccountLoginSoap accountLoginSoap = getISAGService(AccountLoginSoap.class, serviceUrl);
String SrcSsDeviceNo = QGUDB_DEVICENO;
String AuthSsDeviceNo = QGUDB_DEVICENO;
String UDBTokenFlag = "0";
String IPAddress = "218.5.99.35";
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String TimeStamp = dateFormat.format(date);
String Extension = "";
//先把各字段串成一个字符串
String Authenticator1 = SrcSsDeviceNo + AuthSsDeviceNo + imsi
+ UDBTokenFlag + IPAddress + TimeStamp + Extension;
String Authenticator2 = Cryto.generateAuthenticator(Authenticator1,QGUDB_DESKEY, "utf-8");
IMSILoginRequest imsiLoginRequest = new IMSILoginRequest();
imsiLoginRequest.setAuthenticator(Authenticator2);
imsiLoginRequest.setAuthSsDeviceNo(AuthSsDeviceNo);
imsiLoginRequest.setExtension(Extension);
imsiLoginRequest.setIMSI(imsi);
imsiLoginRequest.setIPAddress(IPAddress);
imsiLoginRequest.setSrcSsDeviceNo(SrcSsDeviceNo);
imsiLoginRequest.setTimeStamp(TimeStamp);
imsiLoginRequest.setUDBTokenFlag(UDBTokenFlag);
IMSILoginResponse imsiLoginResponse = accountLoginSoap.imsiLogin(imsiLoginRequest);
IMSILoginResult imsiLoginResult = imsiLoginResponse.getIMSILoginResult();
IMSILoginResult result = null;
//如果返回状态为0时,说明查询成功
if (imsiLoginResult.getResultCode() == 0) {
result = imsiLoginResult;
}
return result;
}