加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

基于SOAP编写WebService客户端(一)

发布时间:2020-12-16 23:39:35 所属栏目:安全 来源:网络整理
导读:本DEMO的 URLEndpoint 引入了AXIS2的axis-jaxrpc-1.4.jar, 但未成功,需要反思。 package com.hikvision.cms.webservcie.client.util;import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream

本DEMO的

URLEndpoint 
引入了AXIS2的axis-jaxrpc-1.4.jar, 但未成功,需要反思。

package com.hikvision.cms.webservcie.client.util;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import javax.xml.messaging.URLEndpoint;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;

import org.apache.log4j.Logger;

/**
 * SOAP底层方式实现与Web Service通讯。
 * 
 * @author Alex Woo
 * 
 */
public class DynamicSoapCall {
	
	private static final Logger log = Logger.getLogger(DynamicSoapCall.class);
	
	private String wsdlURI = null;
	
	public DynamicSoapCall(String wsdlURI) throws Exception {
		log.info("Reading WSDL document from '" + wsdlURI + "'");
		
		this.wsdlURI = wsdlURI;
	}
	
	public SOAPMessage soapCall(String xmlString,String charsetName,String soapVersion) throws Exception {
		if (null == xmlString)
			xmlString = "";
		
		byte[] bytes = null;
		if (null == charsetName || charsetName.trim().equals("")) {
			bytes = xmlString.getBytes();
		} else {
			try {
				bytes = xmlString.getBytes(charsetName);
			} catch (UnsupportedEncodingException e) {
				log.warn("不支持指定的字符集,将按照操作系统默认字符集转换。可能会导致发送数据(特别是中文字符等数据)乱码。");
				bytes = xmlString.getBytes();
			}
		}
		
		InputStream is = new ByteArrayInputStream(bytes);
		
		return soapCall(is,soapVersion);
	}
	
	public SOAPMessage soapCall(InputStream is,String soapVersion) throws Exception {
		MessageFactory mf = null;
		if (null != soapVersion && soapVersion.trim().equals("1.2")) {
			mf = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
		} else {// SOAP 1.1 is default.
			mf = MessageFactory.newInstance();
		}
		SOAPMessage message = null;
		
		try {
			message = mf.createMessage(null,is);
		} catch (SOAPException e) {
			throw new Exception("根据Request XML数据创建的SOAP Message消息无效。错误原因:" + e.getCause());
		}
		
		SOAPConnectionFactory soapFactory = SOAPConnectionFactory.newInstance();
		SOAPConnection con = soapFactory.createConnection();
		
		URLEndpoint endpoint = new URLEndpoint(wsdlURI);
		SOAPMessage response = con.call(message,endpoint);
		
		return response;
	}
	
	private static String myWsdl = "http://www.wll.com/ws/test?wsdl";
	
	public static void main(String[] args) throws Exception {
		File xml = new File("D:/getTokenInfo.xml");
		DynamicSoapCall call = new DynamicSoapCall(myWsdl);
		SOAPMessage result = call.soapCall(new FileInputStream(xml),null);
		System.out.println(result.getSOAPHeader());
		System.out.println(result.getSOAPBody());
	}
	
	public static void main1(String[] args) throws Exception {
		String xmlString = "<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.ws.filemgr.hikvision.com/">"
		        + "<soapenv:Header/>"
		        + "<soapenv:Body>"
		        + "<web:getTokenInfo>"
		        + "<username>administrator</username>"
		        + "<password>123456</password>" + "</web:getTokenInfo>" + "</soapenv:Body>" + "</soapenv:Envelope>";
		
		DynamicSoapCall call = new DynamicSoapCall(myWsdl);
		SOAPMessage result = call.soapCall(xmlString,"utf-8",null);
		System.out.println(result.getSOAPHeader());
		System.out.println(result.getSOAPBody());
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读