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

Java 将HTTP头添加到使用Axis客户端API时未调用的HTTP请求的处理程序,java,http,httphandler,axis,Java,Http,Httphandler,Axis,我正在使用Axis API访问Axis HTTP服务器。 可以找到API的文档 我使用以下代码向服务器添加处理程序服务的类型为java.xml.rpc.service HandlerRegistry registry = service.getHandlerRegistry(); QName serviceName = new QName(url, "MyServiceClass"); List<HandlerInfo> handlerChain = new

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

我使用以下代码向服务器添加处理程序<代码>服务的类型为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);
上面的代码有什么问题


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

我们正在向SOAP请求添加自定义头。但是,我们通过在运行时将头注入Web服务的Axis存根对象来实现这一点。因此,它们不会对每个请求都改变,但是注入的头将用于测试用例的整个运行


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

顺便说一句,阅读处理程序用法,我找到了此页面。看看是否有用:

好的。这应该可以做到:

1-创建包含以下内容的wsdd文件(例如
/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>
3-步骤2将生成client-config.wsdd。将其复制到项目中,并确保在项目运行时它将位于类路径中

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

下面是我的TestHandler1类(对ur处理程序进行了轻微修改以访问MIME头):

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

- 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
.
.
.

我需要添加HTTP头,而不是SOAP头。抱歉:(.尽管如此,我还是进行了搜索以找到它。请检查它是否有帮助:尝试在存根对象上调用setProperty函数。它不起作用。请给我您正在使用的代码段好吗?谢谢什么?我粘贴的链接有Axis和JAX-RPC的步骤-决定您要做什么?Axis方法不调用_setProperty();至于代码片段,请阅读我给出的最后一个答案:(我有一种感觉,有了所有的QName和东西,HandlerConfig是用来管理SOAP头的。这对我很有用。我的client-config.wsdd出现了一些问题。谢天谢地,这个工具生成了正确的文件。
java org.apache.axis.utils.Admin client /tmp/test.wsdd
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
.
.
.