急!!!java 做的webservice服务端如何获取客户端的WebService请求的soap包头?

解决方案 »

  1.   

    如果是通过 xfire框架实现webservice的话,xfire是通过管道运行的,服务器会经过几道工序处理客户端请求SOAP请求消息对Web Service发起真正调用之前,分别会经过传输(Transport)、预转发(PreDispatch)、转发(Dispatch)、策略实施(Policy)、用户信息处理(User)、预调用(PreInvoke)、服务调用(Service Invocation)等阶段。当Web Service调用后,XFire生成响应SOAP消息并通过管道发送给客户端请求者,这一过程会先后经历调用后(PostInvoke)、用户信息处理(User)、策略实施(Policy)、传输(Transport)四个阶段。每一个阶段都是一个可控点,通过编写并注册一些相应的Handler就可以实施一些额外处理逻辑如果要获取客户端请求的soap报头,可以写一个自己的handler,例如:UserPasswordHander extends AbstractHandler,
    Document inputDoc = (Document) context.getInMessage().getProperty(DOMInHandler.DOM_MESSAGE);
    if(inputDoc!=null){
    System.out.println("------------input Soap xml-------------");
    System.out.println(buildDocment(inputDoc).asXML()); 
    }

    InMessage message = context.getInMessage();
            
            XMLStreamReader reader = message.getXMLStreamReader();        Element header = message.getHeader();并在service.xml文件里配置该handler,形式类似下面:
    <inHandlers>
            <handler handlerClass="org.codehaus.xfire.util.dom.DOMInHandler"/>
    <handler handlerClass="com.service.UserPasswordHander"> </handler>       
    </inHandlers>  
    这样就能获取