使用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