.net与java webService通信的最简单方法
前一段时间,由于业务需要,需在java做的项目中调用.net做的webService来实现数据的提交(其实也是短信的发送,因为我们没有端信发送的端口,发送短信时需调用他们的外部接口)。
一、通信的实质:相应之间通信的内容是XML 在.net与java的WebService进行通信时,我们首先得搞清楚,在相互通信时交互的内容是什么,搞清楚这个很重要。我们在定Socket程序时,都有一个习惯,那就是客户端与服务器之间定义出一套互相能够识别的命令,来"走完"数据在业务上的流程。同样dotnet与java的互相一次性交互的是一段XML,既然我们知道了这个原理,那么我们完全可以按照dotnet要求的XML的内容拼凑出相应的XML给它。
二、XML内容的发送与接受。
在我们把XML拼凑出来后,我们怎么样才能将它发送给dotnet呢,借助axis。借助org.apache.axis.message.SOAP,这个类我们完全可以构造一个soap(也就是用于发送的Xml)。
三、模拟开发
/**
* 短信发送
*
* @param MobileNo
* 手机号码
* @param Sms
* 短信的内容
* @param ServiceNo
* 短信端口号
* @return long -1:鉴权失败 0:发送失败,可能是数据错。 n:成功发送后的发送编号,以后可以通过此编号查询真正的发送状态和接收状态。
*/
public long SendSms(String MobileNo, String sms, String serviceNo) {
long ret = 0;
final String account = "账号";
final String sendMsgResponse = "SendMsgResponse";
String timestamp = "";
String md5String = "";
String xmlString ="";
sms=StringUtil.parseString(sms);
try {
java.text.DateFormat df = new java.text.SimpleDateFormat(
"yyyyMMddHHmmss");
timestamp = df.format(new Date());
md5String = StringUtil.ToMd5("密码" + timestamp);
xmlString = "<?xml version=/"1.0/" encoding=/"GBK/"?>/n"
+ "<soap:Envelope xmlns:soap=/"http://schemas.xmlsoap.org/soap/envelope//" xmlns:xsi=/"http://www.w3.org/2001/XMLSchema-instance/" xmlns:xsd=/"http://www.w3.org/2001/XMLSchema/">/n"
+ "<soap:Header>/n"
+ "<CredentialSoapHeader xmlns=/"http://服务器IP/VasmpWebService/">/n"
+ "<AccountName>"
+ account
+ "</AccountName>/n"
+ "<SendTimestamp>"
+ timestamp
+ "</SendTimestamp>/n"
+ "<MD5String>"
+ md5String
+ "</MD5String>/n"
+ "</CredentialSoapHeader>/n"
+ "</soap:Header>/n"
+ "<soap:Body>/n"
+ "<SendMsg xmlns=/"http://服务器IP/VasmpWebService/">/n"
+ "<MsgType>1</MsgType>/n" + "<MobileNo>" + MobileNo
+ "</MobileNo>/n" + "<ServiceNo>" + serviceNo
+ "</ServiceNo>/n" + "<MsgContent>" + sms
+ "</MsgContent>/n" + "<SmsSeqNo />/n" + "</SendMsg>/n"
+ "</soap:Body>/n" + "</soap:Envelope>";
org.apache.axis.message.SOAPEnvelope sap = new org.apache.axis.message.SOAPEnvelope(
new ByteArrayInputStream(xmlString.getBytes()));
String endpoint = "http://服务器IP/VasmpWebService/MsgService.asmx";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setUseSOAPAction(true);
call
.setSOAPActionURI("http://服务器IP/VasmpWebService/SendMsg");
org.apache.axis.message.SOAPEnvelope tmp = (org.apache.axis.message.SOAPEnvelope) call
.invoke(sap);
/**
*
* 获取它的返回值
*/
java.util.Iterator iter = tmp.getBody().getChildElements();
while (iter.hasNext()) {
MessageElement ele = (MessageElement) iter.next();
String eleName = ele.getName();
if (eleName.equalsIgnoreCase(sendMsgResponse)) {
MessageElement result = (MessageElement) ele
.getChildElements().next();
ret = new Long(result.getValue().trim()).longValue();
}
}
log.info(" 短信发送SendMsgResponse初始化结束== " + serviceNo);
log.info(" 短信发送返回值== " + ret+xmlString);
} catch (Exception e) {
log.error(" 短信发送错误== " + e.getMessage()+xmlString);
e.printStackTrace();
}
return ret;
}