簡體   English   中英

在Java中使用Web服務時如何觸發處理程序類

[英]How to trigger a handler class when consuming web-service in java

使用Axis 1.4我構建了將使用外部服務器服務的客戶端應用程序。

服務器應用程序的響應帶有Soap消息,包括標頭標簽和正文標簽。

我的header標記問題,我試圖找到header元素。

到目前為止已完成的工作:

我發現我需要使用可以使用該類擴展BasicHandler的處理程序, BasicHandler獲得標頭標記。 來源: 在Axis中處理SOAP標頭

但是,在使用Web服務時如何使此處理程序正常工作? 我的意思是當我從服務器接收響應以獲取其header時如何調用此處理程序。

一些博客建議我需要使用.wsdd文件。 我在Weblogic 10.3.6環境中使用Jdeveloper 11g,在該環境中我僅知道用於配置的web.xml文件。

問題:如何鏈接這些信息(處理程序類, .wsdd文件和web.xml )以收集並使處理程序工作以獲取標頭標記?

最好的開始是查看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.
  }
}

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>

您可以看到我僅使用處理程序處理來自服務器端的傳入響應。 因此,無論何時客戶端應用程序從服務器收到響應,處理程序類SoapHeaderConsumerHandler都會被觸發,並且默認情況下將調用方法調用。

注意:如果要在將傳出請求發送到服務器之前訪問傳出請求,則需要為<requestFlow>添加額外的標記以添加請求處理程序。

檢查來自Axis指南的Deployment(WSDD)參考

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

您應將.wsdd文件放在工作目錄中。 您可以使用以下命令輕松找到工作目錄位置:

System.out.println("Working Directory = " + System.getProperty("user.dir"));

資料來源: 用Java獲取當前工作目錄

更新:

我發現沒有必要將client-config.wsdd文件放在工作目錄中。 您可以在代碼中指定此文件的路徑,如下所示:

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

您只需要將.wsdd文件放在此處。

額外有用的鏈接:

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

V軸處理程序這是服務器端處理程序的示例。

在Axis中處理SOAP標頭

為了避免文件位置問題,您可以以編程方式配置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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM