现在单位突然要用短信平台,短信平台给个客户端程序,这哪符合我们单位IT系统统一管理的国情啊。没法子,再三询问,他们说提供webservice接口。我吓的一身冷汗。。这玩意从来没用过啊。
最后还是依靠本人强大的搜索能力,解决了问题,成功调用了webservice
步骤如下:
1.到apache网站下载axis包。
2.利用里面的wsdl2java来自动生成对应的类和实体。有一个很好的bat文件,可以帮助你生成.java文件。
set Axis_Lib=E:/工作/axis_test/axis-1_4/lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=E:/工作/axis_test/test/src
set Package=server.SayHello
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o %Output_Path% -p%Package% http://localhost:8080/ema/services/SmsNewOperator?wsdl
3.生成一大堆的类和文件,到底如何调用呢。我们看到,大体有5个文件,如下图
其中Service是一个接口,Stub是一个代理类,要调用webservice,只需要用stub调用相应webservice的方法即可。
但是,切忌,这里不要直接new一个stub,会出现“no endpoint”异常!
4.最简单的调用办法是,用接口定义一个service变量,new个Locator类,然后用service.getSmsNewOperator()方法获得一个webservice的代理类,具体调用代码如下:
package com.message;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.holders.StringHolder;
import org.apache.axis.AxisFault;
import com.util.MD5;
public class Test
{
public static void main(String [] s) throws RemoteException, ServiceException
{
//初始化webservice代理类
SmsNewOperatorService service = new SmsNewOperatorServiceLocator();
SmsNewOperatorSoapBindingStub sms = (SmsNewOperatorSoapBindingStub) service.getSmsNewOperator();
//准备数据
MtNewMessage ms = new MtNewMessage();
ms.setContent("你好~~");
ms.setPhoneNumber("1390000000");
StringHolder sendResMsg = new StringHolder();
StringHolder errMsg = new StringHolder();
//调用webservice
sms.sendSms("000000000", MD5.md5s("000000000"), ms, sendResMsg, errMsg);
//打印返回值
System.out.println("sendResMsg = " + sendResMsg.value);
System.out.println("errMsg = " + errMsg.value);
}
}