采用axis创建web service
1.安装axis,下载axis,将saaj.jar,jaxrpc.jar,axis.jar,commons-discovery-0.2.jar,
commons-logging-api.jar,log4j-1.2.8.jar,wsdl4j-1.5.1.jar,activation.jar,
mailapi.jar文件复制到tomcat的common/lib下,并加到classpath中
2.编写webservice服务
public class smsServer {
public int Send(Message msg)
{
...
}
public Message[] Recv()
{
...
}
public SendState[] CheckSate(String SubmitIDs)
{
...
}
}
3.编写wsdd发布
先编写wsdd文件,然后执行java org.apache.axis.client.AdminClient -lhttp://localhost:8080/SXDL_SMS/services/AdminService deploy.wsdd发布生成server-config.wsdd文件
4.生成wsdl
java org.apache.axis.wsdl.Java2WSDL -oWebsms.wsdl -lhttp://localhost:8080/SXDL_SMS/services/ -nWebsms zxsms.webservice.smsServer
5.生成客户端文件
java org.apache.axis.wsdl.WSDL2Java Websms.wsdl -p zxsms.webclient
6.客户端注册自定义结构,由于我采用的是自定义接口,因此客户端需要注册示例如下
public int send(zxsms.webclient.Message msg) throws java.rmi.RemoteException {
if (super.cachedEndpoint == null) {
throw new org.apache.axis.NoEndPointException();
}
org.apache.axis.client.Call _call = createCall();
javax.xml.namespace.QName qn=new javax.xml.namespace.QName("MessageBean", "MessageBean");
_call.registerTypeMapping(Message.class, qn,
new org.apache.axis.encoding.ser.BeanSerializerFactory(Message.class, qn),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(Message.class, qn));
_call.setOperation(_operations[0]);
_call.setUseSOAPAction(true);
_call.setSOAPActionURI("");
_call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
_call.setOperationName(new javax.xml.namespace.QName("Websms", "Send"));
setRequestHeaders(_call);
setAttachments(_call);
try { java.lang.Object _resp = _call.invoke(new java.lang.Object[] {msg});
if (_resp instanceof java.rmi.RemoteException) {
throw (java.rmi.RemoteException)_resp;
}
else {
extractAttachments(_call);
try {
return ((java.lang.Integer) _resp).intValue();
} catch (java.lang.Exception _exception) {
return ((java.lang.Integer) org.apache.axis.utils.JavaUtils.convert(_resp, int.class)).intValue();
}
}
} catch (org.apache.axis.AxisFault axisFaultException) {
throw axisFaultException;
}
}
其中下列代码是手工添加的
javax.xml.namespace.QName qn=new javax.xml.namespace.QName("MessageBean", "MessageBean");
_call.registerTypeMapping(Message.class, qn,
new org.apache.axis.encoding.ser.BeanSerializerFactory(Message.class, qn),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(Message.class, qn));
javax.xml.namespace.QName qn=new javax.xml.namespace.QName("SendStateBean", "SendStateBean");
_call.registerTypeMapping(SendState.class, qn,
new org.apache.axis.encoding.ser.BeanSerializerFactory(SendState.class, qn),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(SendState.class, qn));
7.客户端测试
public static void main(String[] args) {
try{
SmsServerService service = new SmsServerServiceLocator();
SmsServer_PortType smsclient = service.getsmsServer();
//身份认证
((org.apache.axis.client.Stub)smsclient).setUsername("001");
((org.apache.axis.client.Stub)smsclient).setPassword("001");
Message sms=new Message();
sms.setTo("13001430090");
sms.setContent("zyg webservice 短信 测试");
sms.setFormat(15);
long id=smsclient.send(sms);
System.out.println("submitid="+id);
} catch (Exception e) {
System.err.println("Execution failed. Exception: " + e);
}
}