[英]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:
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.