感谢万能的互联网,废话少说,挑关键代码上了。
服务端:
//服务接口
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;
}
}
//服务接口