Soap サービスは、 [ Use Native Soap ] プロパティが True に設定されている環境で使用されます。このメカニズムでは location データタイプと同様の処理を行えますが、このタイプのデータを言語の詳細と一緒にロードせずに、その機能を拡張できます。
SOAP サービスの要求でデータを変更または追加できます。たとえば、資格情報や証明書を追加したり、URL を変更したりできます。
この実装を有効にするには、web.config を編集し、次の行を追加します。
<add key="NativeChannelConfigurator" value="GxSoapHandler"/>
また、location データタイプに [ Configuration ] (非標準) プロパティを設定し、追加または変更が必要なパラメーターを、文字列、SDT、またはオブジェクトで送信します。
プログラムは次のようになります:
&location = GetLocation("WS_eFactura")
&location.Configuration= "xxxxxxx"
//DGI のテストとしてクエリをロード
&pWS_eFacturaData.xmlData.FromString("")
&pWS_eFacturaDataResult = &WS_eFactura.EFACRECEPCIONSOBRE(&pWS_eFacturaData)
&longvar = &pWS_eFacturaDataResult.ToXml()
最後に、サービス呼び出しの前に呼び出されるアセンブリ (ネイティブ .NET オブジェクト) を作成します。GeneXus プログラムによって送信されたパラメーターはここで上書きされます。
このコードの例は、https://github.com/genexuslabs/GxSoapHandlerNet で参照できます。
例として、URL のみを上書きする場合は、次のようなプログラムになります:
using System;
using System.ServiceModel;
using GeneXus.Programs;
using GeneXus.Utils;
using System.ServiceModel.Description;
public class GxSoapHandler
{
public void Setup( string eoName, GxLocation loc, object serviceClient)
{
if (eoName == "WS_eFactura" && loc.Configuration=="xxxxxxx")
{
ClientBase<ISdtService1> svc = serviceClient as ClientBase<ISdtService1>;
svc.Endpoint.Address = new System.ServiceModel.EndpointAddress("https://efactura.dgi.gub.uy:443/efactura/ws_efactura"); //サービスの URI を変更
}
}
}
データを SOAP 要求に追加できます。たとえば、認証用の SAML トークンを送信できます。
これは外部の jar で実装されます。クラスパスに com.genexus.util.GXSoapHandler というクラスが含まれる場合は、サービス呼び出しの前にそのクラスの setHandlers と呼ばれる静的メソッドが呼び出されます。
このメソッドには次のパラメーターがあります:
public static void setHandlers(Integer remoteHandle, com.genexus.ModelContext context, String serviceName, javax.xml.ws.BindingProvider bProvider)
サンプルプロジェクトのダウンロード: https://github.com/genexuslabs/GxSoapHandlerJava
|