当前位置: 首页 > 面试题库 >

使用Axis Client API时未将HTTP标头添加到HTTP请求的处理程序

柴意智
2023-03-14
问题内容

我正在使用Axis API访问Axis
HTTP服务器。该API的文档可在此处找到。

我正在使用以下代码将处理程序添加到服务器。service类型为java.xml.rpc.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);

我知道服务名称是正确的,因为我在随后对服务对象的调用中获得了正确的输出。

处理程序没有以某种方式被调用。这是Handler类。我的意图是在 将请求 转发到服务器之前 向HTTP请求添加自定义标头

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];
    }
}

上面的代码有什么问题?

还有其他使用Apache Axis API修改HTTP标头的方法吗?


问题答案:

好的 这应该可以解决问题:

1-创建一个/tmp/test.wsdd包含以下内容的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-确保所有轴库都在您的类路径中,然后运行:

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

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

4-所有Web服务调用(通过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
.
.
.


 类似资料:
  • 问题内容: 我已经开发了一个Restfull应用程序,我想添加另一个Web应用程序来使用其服务,因此我进行了以下Ajax调用: 我得到这个例外: 对象{readyState:0,状态:0,statusText:“ SyntaxError:无法执行’setRequestHeader’…-Origin: ‘不是有效的HTTP标头字段名称。”}错误DOMException:无法在’XMLHttpRequ

  • 先决条件 Apache Tomcat 7 Spring3.2.11。释放 Apache Camel 2.14.1 Camel HTTP4endpoint(Camel-HTTP4) 问题 我尝试通过http4组件调用https加密站点。位于我的服务器和Internet(目标服务器)之间的代理检查标头“User-Agent”并在请求为空时拒绝请求。 连接请求不包含http标头“User Agent”。

  • 问题内容: 这是我的第一篇文章。 我刚刚开始学习Go和Angular,并且尝试将angular应用程序连接到go api。我已经写了这两本书,并且一直坚持找出问题的根源。我以为这是一个CORS问题,但是如果我在Angular http请求中不包含代码的标题行,它就可以正常工作。在这一点上,我只是想添加标题。授权代码尚未实现。 这两个应用程序都在本地运行,端口5000上的Go应用程序和4200端口上

  • 问题内容: 澄清点:将自定义标头添加到我的jQuery ajax调用中没有任何问题,我想将我的自定义标头自动添加到所有ajax调用中。 如果您看看jquery $.ajax自定义http标头问题(不是我的问题),您将看到一个很好的示例,说明如何为每个ajax调用手动实现代码。 我想为所有jQuery ajax调用覆盖beforeSend。根据jQuery文档,我可以使用jQuery.ajaxSet

  • 问题内容: 我有一个角度应用程序,需要将其重定向到外部非角度html页面,所以我认为我可以使用将该角度应用程序重定向到我的外部站点。这实际上工作正常,但是,我有一个nodejs / express后端,在提供任何内容(甚至静态内容)之前检查auth令牌。 这要求在http请求的标头中发送身份验证令牌。现在的问题是: 可以/如何在发送前更改更改后的请求中添加身份验证令牌? 问题答案: 使用浏览器时,

  • 问题内容: 我想将自定义标头添加到jQuery的AJAX POST请求中。 我已经试过了: 当我发送此请求并观看FireBug时,看到以下标头: 选项xxxx / yyyy HTTP / 1.1 主机:127.0.0.1:6666 用户代理:Mozilla / 5.0(Windows NT 6.1; WOW64; rv:11.0)Gecko / 20100101 Firefox / 11.0 接受