在java中使用web服务时如何触发处理程序类

在java中使用web服务时如何触发处理程序类,java,web-services,soap,axis,Java,Web Services,Soap,Axis,使用Axis1.4我构建了将使用外部服务器服务的客户端应用程序 带有soap消息的服务器应用程序响应,该消息包括标头标记和正文标记 我的header标签有问题,我正在试图找到合适的方法来获取header元素 到目前为止做了什么: 我发现我需要使用一个扩展BasicHandler的处理程序,使用这个类我可以得到header标记。资料来源: 但在使用web服务时如何使该处理程序工作?我的意思是,当我从服务器接收到响应以获取其标题时,如何调用该处理程序 一些博客建议我需要使用.wsdd文件。我在web

使用Axis1.4我构建了将使用外部服务器服务的客户端应用程序

带有soap消息的服务器应用程序响应,该消息包括标头标记和正文标记

我的header标签有问题,我正在试图找到合适的方法来获取
header
元素

到目前为止做了什么:

我发现我需要使用一个扩展
BasicHandler
的处理程序,使用这个类我可以得到header标记。资料来源:

但在使用web服务时如何使该处理程序工作?我的意思是,当我从服务器接收到响应以获取其
标题时,如何调用该处理程序

一些博客建议我需要使用
.wsdd
文件。我在weblogic 10.3.6环境中使用Jdeveloper 11g,我只知道
web.xml
文件用于配置


问题:如何链接这些信息(处理程序类,
.wsdd
文件和
web.xml
)以收集并使处理程序能够获取标题标记

最好的开始是检查Axis guide on:在这里您将对工作流程有一个概览

要将处理程序配置为从客户端触发,您需要执行以下操作:

package mypackge;

import javax.xml.soap.SOAPException;
import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;
import org.apache.axis.message.SOAPHeader;
import org.apache.axis.message.SOAPHeaderElement;

public class SoapHeaderConsumerHandler
  extends BasicHandler
{
  public void invoke(MessageContext messageContext)
    throws AxisFault
  {
    // Your logic for request or response handling goes here. 
    // Basically you need to make use of the parameter
   // messageContext where you can access the soap header and body tags.
  }
}
<deployment
    xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <globalConfiguration>
        <responseFlow>
            <handler name="log" type="java:mypackge.SoapHeaderConsumerHandler"/>
        </responseFlow>
    </globalConfiguration>
    <transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender"/>
</deployment>
1-创建处理程序类,基本上类似于以下内容:

package mypackge;

import javax.xml.soap.SOAPException;
import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;
import org.apache.axis.message.SOAPHeader;
import org.apache.axis.message.SOAPHeaderElement;

public class SoapHeaderConsumerHandler
  extends BasicHandler
{
  public void invoke(MessageContext messageContext)
    throws AxisFault
  {
    // Your logic for request or response handling goes here. 
    // Basically you need to make use of the parameter
   // messageContext where you can access the soap header and body tags.
  }
}
<deployment
    xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <globalConfiguration>
        <responseFlow>
            <handler name="log" type="java:mypackge.SoapHeaderConsumerHandler"/>
        </responseFlow>
    </globalConfiguration>
    <transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender"/>
</deployment>
2-创建
client config.wsdd
文件。它将如下所示:

package mypackge;

import javax.xml.soap.SOAPException;
import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;
import org.apache.axis.message.SOAPHeader;
import org.apache.axis.message.SOAPHeaderElement;

public class SoapHeaderConsumerHandler
  extends BasicHandler
{
  public void invoke(MessageContext messageContext)
    throws AxisFault
  {
    // Your logic for request or response handling goes here. 
    // Basically you need to make use of the parameter
   // messageContext where you can access the soap header and body tags.
  }
}
<deployment
    xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <globalConfiguration>
        <responseFlow>
            <handler name="log" type="java:mypackge.SoapHeaderConsumerHandler"/>
        </responseFlow>
    </globalConfiguration>
    <transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender"/>
</deployment>
来源:

更新:

我发现没有必要将
client config.wsdd
文件放在工作目录中。您可以在代码中指定此文件的路径,如下所示:

System.setProperty("axis.ClientConfigFile", "[Path goes here]\\client-config.wsdd");
您只需要将
.wsdd
文件放在那里

额外有用的链接:

这是服务器端处理程序的一个示例


为避免文件位置问题,您可以通过编程方式配置axis:

    ConsultationServiceLocator stub = new ConsultationServiceLocator();
    SimpleProvider clientConfig = new SimpleProvider();
    SoapHeaderConsumerHandler logHandler = new SoapHeaderConsumerHandler();
    SimpleChain reqHandler = new SimpleChain();
    SimpleChain respHandler = new SimpleChain();
    reqHandler.addHandler(logHandler);
    respHandler.addHandler(logHandler);
    Handler pivot = new HTTPSender();
    Handler transport = new SimpleTargetedChain(reqHandler, pivot, respHandler);
    clientConfig.deployTransport(HTTPTransport.DEFAULT_TRANSPORT_NAME, transport);