.net与java webService通信的最简单方法

.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;

	}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值