cxf在客户端定义output 添加用户名、密码

public static void main(String[] args) {
  HelloWs wsClient=new HelloWs();
  HelloWorld hws = wsClient.getHelloWorldImplPort();

  Client client = ClientProxy.getClient(hws);
  client.getOutInterceptors().add(new AuthInterceptor("test" ,"00"));

}

 

 

第二步添加用户名、密码头信息

 

package cn.xjs.util;

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 AuthInterceptor extends AbstractPhaseInterceptor<SoapMessage> {

  private String username;
  private String pass;

  public AuthInterceptor(String username ,String pass) {
    super(Phase.PREPARE_SEND);
    this.username=username;
    this.pass=pass;
  }

  @Override
  public void handleMessage(SoapMessage mess) throws Fault {
    List<Header> headers = mess.getHeaders();

    //生成 xml
    Document doc = DOMUtils.createDocument();
    Element ele = doc.createElement("authHeader");

    Element idEle = doc.createElement("userId");
    idEle.setTextContent(this.username);

    Element passEle = doc.createElement("pass");
    passEle.setTextContent(this.pass);

    ele.appendChild(idEle);
    ele.appendChild(passEle);
     

    /**
      上面代码生成了xml
      <authHeader>
        <userId>aaa</userId>
        <userPass>bbb</userPass>
      </authHeader>

    **/

    //把ele元素包装成Header,并添加到soap消息的


    headers.add(new Header(new QName("fkjava"), ele));
  }

}

posted @ 2018-03-24 22:58  不知道干什么行业  阅读(293)  评论(0编辑  收藏  举报