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

我正在使用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类。我的意图是在 转发到服务器之前 。

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

.

.

.

以上是 使用Axis Client API时未将HTTP标头添加到HTTP请求的处理程序 的全部内容, 来源链接: utcz.com/qa/403861.html

回到顶部