微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于SOAP编写WebService客户端一

本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());
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐