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



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值