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

Sal*_*man 3 java axis soap web-services

使用Axis 1.4我构建的客户端应用程序将使用外部服务器服务。

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

我的标题标签有问题,我试图找到获取header元素。

到目前为止做了什么:

我发现我需要使用一个BasicHandler使用此类扩展的处理程序,我可以获得标头标签。来源:处理 Axis 中的 SOAP 标头

但是如何在使用 Web 服务时使这个处理程序工作呢?我的意思是当我从服务器收到响应以获取它的header.

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

问题:如何链接这些信息(处理程序类、.wsdd文件和web.xml)以收集并使处理程序工作以获取标题标签?

Sal*_*man 5

最好的开始是查看 Axis 指南:Apache-Axis 参考指南,您将在其中大致了解工作流程。

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

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.
  }
}
Run Code Online (Sandbox Code Playgroud)

2-创建client-config.wsdd文件。它将如下所示:

<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>
Run Code Online (Sandbox Code Playgroud)

您可以看到我仅使用处理程序处理来自服务器端的传入响应。因此,当客户端应用程序收到来自服务器的响应时,SoapHeaderConsumerHandler将触发处理程序类并默认调用方法 invoke。

注意:如果您想在将传出请求发送到服务器之前访问它,您需要添加额外的标签<requestFlow>以添加请求处理程序。

检查Axis 指南中的部署(WSDD)参考

3-在哪里放置client-config.wsdd文件?

您应该将.wsdd文件放在工作目录中。您可以使用以下命令轻松找到工作目录位置:

System.out.println("Working Directory = " + System.getProperty("user.dir"));
Run Code Online (Sandbox Code Playgroud)

来源: 在 Java 中获取当前工作目录

更新:

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

System.setProperty("axis.ClientConfigFile", "[Path goes here]\\client-config.wsdd");
Run Code Online (Sandbox Code Playgroud)

你只需要把.wsdd文件放在那里。

额外有用的链接:

在 Railo 中放置 client-config.wsdd 文件的位置

V 轴处理程序 这是服务器端处理程序的示例。

处理 Axis 中的 SOAP 标头