阅读背景:

ksoap调用cxf webservice传递类对象参数,返回类对象

来源:互联网 

感谢万能的互联网,废话少说,挑关键代码上了。

 

服务端:

//服务接口
import javax.jws.WebParam;
import javax.jws.WebService;

import com.jnbus.beans.DemoBean;

@WebService
public interface JNBusWsI {

	public byte[] testA(@WebParam(name="a")int pA, @WebParam(name="b")DemoBean pB);
	public String testB(@WebParam(name="c")int pC, @WebParam(name="d")String pD);
	
}


//接口实现类
import com.jnbus.beans.DemoBean;

public class JNBusWsImpl implements JNBusWsI {

	public byte[] testA(int pa, DemoBean pb) {
		return new DemoBean(pa, pb.getName() + "###").serialize();
	}

	public String testB(int pc, String pd) {
		return "testB responsed, and the param you passed is " + pc + "-" + pd;
	}

}

//测试中需要传递和返回的对象
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;

public class DemoBean implements IBaseBean {
	
	private int id;
	private String name;
	
	public DemoBean() {
		
	}
	
	public DemoBean(int id, String name) {
		this.id = id;
		this.name = name;
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	public byte[] serialize() {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		DataOutputStream dos = new DataOutputStream(baos);
		try {
			dos.writeInt(this.id);
			dos.writeUTF(this.name);
		} catch (IOException e) {
		} finally {
			try {
				if (dos != null)
					dos.close();
				if (baos != null)
					baos.close();
			} catch (IOException e) {
			}
		}
		
		return baos.toByteArray();
	}
	
}

public interface IBaseBean {
	public byte[] serialize();
}


//顺便把验证用户密码的也复制过来
//没看到ksoap支持wsse的例子
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;

import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.NodeList;

public class SAuthHeaderInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
	
	private SAAJInInterceptor saajIn = new SAAJInInterceptor();
	private final static String NAMESPACE = "https://jnbus.com/";

	public SAuthHeaderInterceptor() {
		super(Phase.PRE_PROTOCOL);
		getAfter().add(SAAJInInterceptor.class.getName());
	}

	public void handleMessage(SoapMessage msg) throws Fault {		
		SOAPMessage soapMessage = getSOAPMessage(msg);
		if (soapMessage != null) {
			try {
				SOAPHeader soapHeader = soapMessage.getSOAPHeader();
				if (soapHeader != null) {
					NodeList nodeList = soapHeader.getElementsByTagNameNS(NAMESPACE, "AuthName");
					if (nodeList != null && nodeList.item(0) != null) {
						String authName = nodeList.item(0).getTextContent();
						if (authName.equals("jnbus")) {
							nodeList = soapHeader.getElementsByTagNameNS(NAMESPACE, "AuthPassword");
							if (nodeList != null && nodeList.item(0) != null) {
								String authPsw = nodeList.item(0).getTextContent();
								if (!authPsw.equals("jnbuspsw")) {
									throw new Fault(new IllegalArgumentException("AuthPassword Wrong"));
								}
							} else {
								throw new Fault(new IllegalArgumentException("You should add AuthPassword"));
							}
						} else {
							throw new Fault(new IllegalArgumentException("AuthName Wrong"));
						}
					} else {
						throw new Fault(new IllegalArgumentException("You should add AuthName"));
					}
				}
			} catch (SOAPException e) {
				
			}
		}
	}
	
	private SOAPMessage getSOAPMessage(SoapMessage msg) {
		SOAPMessage SOAPMsg = msg.getContent(SOAPMessage.class);
		if (SOAPMsg == null) {
			saajIn.handleMessage(msg);
			SOAPMsg = msg.getContent(SOAPMessage.class);
		}
		return SOAPMsg;
	}

}
//服务接口



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: