代码之家  ›  专栏  ›  技术社区  ›  Rohit Banga

使用Axis客户端API时未调用向HTTP请求添加HTTP头的处理程序

  •  7
  • Rohit Banga  · 技术社区  · 15 年前

    可以找到API的文档 here

    我正在使用以下代码向服务器添加处理程序。 service

        HandlerRegistry registry = service.getHandlerRegistry();
        QName serviceName = new QName(url, "MyServiceClass");
    
        List<HandlerInfo> handlerChain = new ArrayList<HandlerInfo>();
        HandlerInfo handlerInfo = new HandlerInfo(MyHandler.class, null, null);
        handlerChain.add(handlerInfo);
        registry.setHandlerChain(serviceName, handlerChain);
    

    不知怎么的,处理程序没有被调用。这是处理程序类。 我的目的是 在将请求转发到服务器之前。

    import javax.xml.namespace.QName;
    import org.apache.axis.AxisFault;
    import org.apache.axis.MessageContext;
    import org.apache.axis.handlers.BasicHandler;
    
    public class MyHandler extends BasicHandler {
    
        @Override
        public void init() {
            System.out.println("init called");
            super.init();
            System.out.println("init called");
        }
    
        @Override
        public void cleanup() {
            super.cleanup();
            System.out.println("cleanup called");
        }
    
        @Override
        public void invoke(MessageContext mc) throws AxisFault {
            System.out.println("invoke called");
        }
    
        public QName[] getHeaders() {
            System.out.println("getHeaders");
            return new QName[1];
        }
    }
    

    上面的代码怎么了?

    3 回复  |  直到 15 年前
        1
  •  7
  •   madhurtanwani    15 年前

    好吧。这应该可以做到:

    /tmp/test.wsdd )包含以下内容:

    <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
     <handler name="test" type="java:axistest.TestHandler" />
     <transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender">
       <requestFlow>
        <handler type="test"/>
       </requestFlow>
     </transport>
    </deployment>
    

    2-确保所有axis lib都在类路径中,然后运行:

    java org.apache.axis.utils.Admin client /tmp/test.wsdd
    

    3-步骤2将生成一个client-config.wsdd。将此复制到您的项目中,并确保它在项目运行时位于类路径中。

    4-所有webservice调用(通过Http传输)都将通过TestHandler1类路由

    这是我的TestHandler1类(对ur处理程序进行了一点修改,以访问MIME头):

    package axistest;
    
    import javax.xml.namespace.QName;
    import javax.xml.soap.MimeHeaders;
    import org.apache.axis.AxisFault;
    import org.apache.axis.MessageContext;
    import org.apache.axis.handlers.BasicHandler;
    
    public class TestHandler1 extends BasicHandler {
    
    @Override
    public void init() {
        System.out.println("init called");
        super.init();
        System.out.println("init called");
    }
    
    @Override
    public void cleanup() {
        super.cleanup();
        System.out.println("cleanup called");
    }
    
    @Override
    public void invoke(MessageContext mc) throws AxisFault {
        System.out.println("invoke called");
        System.out.println("=----------------------------------=");
        MimeHeaders mimeHeaders = mc.getMessage().getMimeHeaders();
        mimeHeaders.addHeader("X-Test", "Hello");
        System.out.println("Headers : \n " + mimeHeaders);
    }
    
    public QName[] getHeaders() {
        System.out.println("getHeaders");
        return new QName[1];
    }
    
    }
    

    当我在我的框上运行此命令时,我看到正在调用这些处理程序方法:

    - Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
    init called
    init called
    invoke called
    =----------------------------------=
    Headers : 
     org.apache.axis.message.MimeHeaders@761eec35
    .
    .
    .
    
        2
  •  1
  •   madhurtanwani    15 年前

    顺便看看处理程序的用法,我找到了这个页面。看看有没有帮助: http://soa.sys-con.com/node/39721

        3
  •  0
  •   madhurtanwani    15 年前

    如果你认为这也是你的用例,我可以找到代码并用我们所做的更新。

    推荐文章