尝试过多种调用服务端方式,个人觉得这种最为简便,第9行为添加拦截器方法
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import javax.xml.namespace.QName;
public Object[] getServiceData() throws Exception {
Object[] parms = parm;
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(url);
client.getOutInterceptors().add(new AddHeaderInterceptor(username,password));
QName opAddEntry = new QName(nameSpace, method);
Object[] object = client.invoke(opAddEntry, parms);
return object;
}
拦截器代码:
import java.util.List;
import javax.xml.namespace.QName;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.headers.Header;
import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class AddHeaderInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
private String userName;
private String passWord;
public AddHeaderInterceptor(String username, String password) {
super(Phase.PREPARE_SEND);
this.userName = username;
this.passWord = password;
}
@Override
public void handleMessage(SoapMessage message) throws Fault {
List<Header> header = message.getHeaders();
// 创建Document对象
Document document = DOMUtils.createDocument();
Element element = document.createElement("authHeader");
// 配置服务端Head信息的用户名和密码
Element userNameElement = document.createElement("userName");
userNameElement.setTextContent(userName);
Element passWordElement = document.createElement("passWord");
passWordElement.setTextContent(passWord);
element.appendChild(userNameElement);
element.appendChild(passWordElement);
header.add(new Header(new QName(""), element));
}
}