日期:2014-05-17  浏览次数:20862 次

请问xfire 服务端如何在返回给客户端的报文上增加soapheader信息
 大家好, 如题目那样 , 服务端怎么在返回报文设置header 信息呢 
<soapenv:Header>
<Esb soapenv:actor="" soapenv:mustUnderstand="0">
<Route>
<Time>2011-09-23 11:51:08.124</Time>
<EsbId>b15ff61a22ea4572911675a86f90629e</EsbId>
</Route>
</Esb>
</soapenv:Header>

例如这些。
------解决方案--------------------
先编写服务端验证类继承 AbstractHandler
package test;

import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.handler.AbstractHandler;
import org.jdom.Element;

public class AuthenticationHandler extends AbstractHandler {

    public void invoke(MessageContext cfx) throws Exception {
           if(cfx.getInMessage().getHeader() == null)
           {
               throw new org.codehaus.xfire.fault.XFireFault("请求必须包含验证信息",org.codehaus.xfire.fault.XFireFault.SENDER);
           }
           Element token=cfx.getInMessage().getHeader().getChild("AuthenticationToken");
           if (token == null) 
           { 
            throw new org.codehaus.xfire.fault.XFireFault("请求必须包含身份验证信息", org.codehaus.xfire.fault.XFireFault.SENDER); 
           } 

              String username = token.getChild("Username").getValue(); 
              String password = token.getChild("Password").getValue(); 
              try 
              { 
                  //进行身份验证 ,只有abcd@1234的用户为授权用户
                 if(username.equals("abcd") && password.equals("1234"))
                  //这语句不显示
                  System.out.println("身份验证通过");
                 else throw new Exception();
              } 
              catch (Exception e) 
              { 
                  throw new   org.codehaus.xfire.fault.XFireFault("非法的用户名和密码",   org.codehaus.xfire.fault.XFireFault.SENDER);