Call-SOAPService
サードパーティ Simple Object Access Protocol (SOAP) サービスへのリクエストを作成します。この Webject は、Info*Engine グループと XSL テンプレートを使用して、SOAP リクエストをフォーマットします。Webject の出力は、SOAP レスポンスボディを模倣する Info*Engine グループとして直接生成できます。または、XSL テンプレートを指定して、SOAP レスポンスを Info*Engine グループに変換できます。
SOAP エラーが発生すると、com.infoengine.exception.fatal.IERemoteException のインスタンスが生成されます。
構文
<ie:webject name="Call-SOAPService" type="MSG">
<ie:param name="DBUSER" data="username"/>
<ie:param name="ENDPOINT" data="url"/>
<ie:param name="GROUP_IN" data="groupName"/>
<ie:param name="GROUP_OUT" data="groupName"/>
<ie:param name="PASSWD" data="password"/>
<ie:param name="SOAP_ACTION" data="operationName"/>
<ie:param name="XSL_URL" data="url"/>
<ie:param name="XSL_RESPONSE_URL" data="url"/>
<ie:param name="XSL_DBUSER" data="username"/>
<ie:param name="XSL_PASSWD" data="passwd"/>
</ie:webject>
パラメータ
必須
|
選択
|
オプション
|
ENDPOINT
|
|
DBUSER
|
GROUP_IN
|
|
EXCEPTION_ON_FAULT
|
XSL_URL
|
|
GROUP_OUT
|
|
|
PASSWD
|
|
|
SOAP_ACTION
|
|
|
XSL_DBUSER
|
|
|
XSL_PASSWD
|
|
|
XSL_RESPONSE_URL
|
DBUSER
ENDPOINT に対する認証に使用するユーザー名。このパラメータは、ENDPOINT パラメータで指定された SOAP 終点が認証を必要とする場合に、PASSWD とともに使用されます。このパラメータはオプションです。
ENDPOINT
SOAP リクエストを送信する必要のある SOAP 終点の URL。このパラメータは必須です。
EXCEPTION_ON_FAULT
サービスが SOAP エラーで応答する場合に例外が発生するかどうかを指定します。デフォルト値は true です。パラメータが false に設定されている場合、エラーが発生しても例外は発生しません。結果を変換するために XSL が使用されている場合は、XSL テンプレートを使用してエラーを Info*Engine データ (detail 要素のコンテンツと実行されたその他の操作を含む) に変換できます。XSL が使用されていない場合は、Webject はエラーを Info*Engine グループに変換します。このパラメータはオプションです。
GROUP_IN
XSL_URL で指定された XSL テンプレートと結合するデータを含んでいる Info*Engine グループ。このパラメータは必須です。
GROUP_OUT
SOAP レスポンスを表す Info*Engine グループの名前。XSL_RESPONSE_URL が指定されている場合、このパラメータは、SOAP レスポンスを GROUP_OUT 値の名前を持つ Info*Engine グループに変換する際に使用されます。XSL_RESPONSE_URL が指定されていない場合、このグループには、レスポンスに単一の要素と、XML 要素ごとに 1 つの属性が含まれます。属性の値は、要素データを表すオブジェクト、またはネストされた追加の XML 要素を表す Info*Engine 要素です。属性の名前は、対応する XML 要素の名前と一致します。このパラメータのデフォルト値は SOAPResponse です。このパラメータはオプションです。
PASSWD
DBUSER に対応するパスワード。このパラメータはオプションです。
SOAP_ACTION
送信する必要がある SOAPAction ヘッダーの値 (存在する場合)。このパラメータはオプションです。
XSL_DBUSER
XSL_URL および XSL_RESPONSE_URL に対する認証に使用するユーザー名。このパラメータは、Webject によって使用される XSL テンプレートが、認証を必要とするリモート HTTP サーバー上にある場合に、XSL_PASSWD とともに使用されます。このパラメータはオプションです。
XSL_PASSWD
XSL_DBUSER に対応するパスワード。このパラメータはオプションです。
XSL_RESPONSE_URL
SOAP レスポンスの処理に使用される XSL テンプレートの場所。XSL テンプレートは、GROUP_OUT を作成する際に SOAP レスポンスと結合されます。このパラメータはオプションです。
Auth-Map コンテキストグループのデータを使用すると、完全修飾 URL の参照が解除されます。Auth-Map は完全修飾 URL で見つかったドメイン名に基づくユーザー名およびパスワードでサーチされます。たとえば、完全修飾 URL が
http://machine.com/infoengine/servlet/IE/tasks/createGroupData.xml
であれば、
http://machine.com の INSTANCE 名を持つユーザー名とパスワードが Auth-Map コンテキストグループでサーチされます。ユーザー名とパスワードが見つかると、URL にアクセスするときに BASIC 認証情報が使用されます。ユーザー名とパスワードが見つからない場合、認証情報はリモート Web サーバーに送信されません。
データ値に :// 文字列が含まれている場合は、完全修飾インターネット URL であると見なされます。データ値に文字列が含まれていない場合は、現在のタスクルートディレクトリに関連するローカルファイルであると見なされます。
XSL_URL
SOAP リクエストの生成に使用される XSL テンプレートの場所。XSL テンプレートは、SOAP リクエストを生成する際に GROUP_IN と結合されます。
SOAP リクエストおよびレスポンスを変換するために使用される XSL 文書を作成するときに、XML ドキュメントのリクエストとレスポンスのペアの例が使用できる場合は、それらを XML のテンプレートとして使用できます。このようなリクエストおよびレスポンスのドキュメントの例が使用できない場合、XSL 作成者は Web サービスの WSDL ドキュメントによって提供されるスキーマに細心の注意を払う必要があります。有効で使用可能な XML を Web サービスに提供するには、WSDL ドキュメントに準拠する必要があります。サービスの実装方法によっては、サービスで使用できるものが制限される場合があります。ただし、WSDL に用意されているスキーマは、そのまま使用する必要があり、すべての XML 要素および属性の順序、大文字小文字、選択性、多重度、およびデータタイプに準拠することで、そのスキーマを検証する XML を作成するために使用する必要があります。
Auth-Map コンテキストグループのデータを使用すると、完全修飾 URL の参照が解除されます。Auth-Map は完全修飾 URL で見つかったドメイン名に基づくユーザー名およびパスワードでサーチされます。たとえば、完全修飾 URL が
http://machine.com/infoengine/servlet/IE/tasks/createGroupData.xml
であれば、
http://machine.com の INSTANCE 名を持つユーザー名とパスワードが Auth-Map コンテキストグループでサーチされます。ユーザー名とパスワードが見つかると、URL にアクセスするときに BASIC 認証情報が使用されます。ユーザー名とパスワードが見つからない場合、認証情報はリモート Web サーバーに送信されません。
データ値に :// 文字列が含まれている場合は、完全修飾インターネット URL であると見なされます。データ値に文字列が含まれていない場合は、現在のタスクルートディレクトリに関連するローカルファイルであると見なされます。
このパラメータは必須です。
例: Translate-Group と XSL
|
サンプルコードではコードの内容を明確にするために Info*Engine SOAP コメントが使用されています。SOAP および SOAP コメントの詳細については、 SOAP サービスを参照してください。
|
この例では、Translate-Group Webject と XSL を使用して、複雑な Info*Engine グループとして Call-SOAPService Webject から返された SOAP レスポンスを簡略化します。
hostlookup.xml
<%@page language="java" import="java.util.StringTokenizer,com.infoengine.
object.
IeMultipartInputStream,java.io.ByteArrayInputStream"%>
<%@taglib uri="http://www.ptc.com/infoengine/taglib/core"
prefix="ie"%>
<!--com.infoengine.soap.rpc.def
Resolves information about a host name.
@param string host The hostname
@return INFOENGINE_GROUP $(output)-->
<ie:webject name="Create-Group" type="GRP">
<ie:param name="ELEMENT" data="host=$(@FORM[]host[])"
default="www.google.com"/>
<ie:param name="CLASS" data="parameters"/>
<ie:param name="GROUP_OUT" data="parameters"/>
</ie:webject>
<ie:webject name="Call-SOAPService" type="MSG">
<ie:param name="ENDPOINT"
data="http://www.esynaps.com/webservices/YourHostInfo.asmx"/>
<ie:param name="SOAP_ACTION"
data="http://tempuri.org/GetHostInfoByName"/>
<ie:param name="XSL_URL"
data="/com/company/hostlookup/ hostlookupRequest.xsl"/>
<ie:param name="GROUP_IN" data="parameters"/>
<ie:param name="GROUP_OUT" data="response"/>
<ie:param name="CLASS" data="response"/>
</ie:webject>
<ie:webject name="Translate-Group" type="GRP">
<ie:param name="GROUP_IN" data="response"/>
<ie:param name="XSL_URL"
data="/com/company/hostlookup/
hostlookupResponse.xsl"/>
<ie:param name="GROUP_OUT" data="$(@FORM[]group_out[])"
default="output"/>
<ie:param name="CLASS" data="lookupResponse"/>
</ie:webject>
hostlookupRequest.xsl
<?xml version='1.0'?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:wc="http://www.ptc.com/infoengine/1.0">
<xsl:template match="/wc:COLLECTION/parameters/wc:INSTANCE">
<soap:Envelope xmlns:s0="http://tempuri.org/"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<s0:GetHostInfoByName>
<s0:Name><xsl:value-of select="host"/></s0:Name>
</s0:GetHostInfoByName>
</soap:Body>
</soap:Envelope>
</xsl:template>
</xsl:stylesheet>
hostlookupResponse.xsl
<?xml version='1.0'?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:wc="http://www.ptc.com/infoengine/1.0">
<xsl:template match="/wc:COLLECTION/response/wc:INSTANCE">
<wc:COLLECTION xmlns:wc="http://www.ptc.com/infoengine/1.0">
<lookupResponse TYPE="Object" STATUS="0">
<wc:INSTANCE>
<xsl:for-each select="Aliases/wc:INSTANCE/Alias">
<Alias><xsl:value-of select="current()"/></Alias>
</xsl:for-each>
<Name><xsl:value-of select="Name"/></Name>
<xsl:for-each select="IPList/wc:INSTANCE/IPAddress">
<IPAddress><xsl:value-of select="current()"/></IPAddress>
</xsl:for-each>
</wc:INSTANCE>
</lookupResponse>
</wc:COLLECTION>
</xsl:template>
</xsl:stylesheet>
例: XSL_RESPONSE_URL
この例では、XSL_RESPONSE_URL パラメータを使用して、SOAP レスポンスを前述の例で作成されたものと同じグループに変換します。
hostlookup2.xml
<%@page language="java" import="java.util.StringTokenizer,com.
infoengine.object.
IeMultipartInputStream,java.io.ByteArrayInputStream"%>
<%@taglib uri="http://www.ptc.com/infoengine/taglib/core"
prefix="ie"%>
<!--com.infoengine.soap.rpc.def
Resolves information about a host name, goes straight from SOAP
response to group.
@param string host The hostname
@return INFOENGINE_GROUP $(output)
-->
<ie:webject name="Create-Group" type="GRP">
<ie:param name="ELEMENT" data="host=$(@FORM[]host[])"
default="www.google.com"/>
<ie:param name="CLASS" data="parameters"/>
<ie:param name="GROUP_OUT" data="parameters"/>
</ie:webject>
<ie:webject name="Call-SOAPService" type="MSG">
<ie:param name="ENDPOINT"
data="http://www.esynaps.com/webservices/YourHostInfo.asmx"/>
<ie:param name="SOAP_ACTION"
data="http://tempuri.org/GetHostInfoByName"/>
<ie:param name="XSL_URL"
data="/soap/document/hostlookup/hostlookupRequest.xsl"/>
<ie:param name="XSL_RESPONSE_URL"
data="/soap/document/hostlookup/hostlookupResponseSOAP.xsl"/>
<ie:param name="GROUP_IN" data="parameters"/>
<ie:param name="GROUP_OUT" data="output"/>
<ie:param name="CLASS" data="output"/>
</ie:webject>
hostlookupResponseSOAP.xsl
<?xml version='1.0'?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:wc="http://www.ptc.com/infoengine/1.0"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:dflt="http://tempuri.org/">
<!--Due to XSL/XPath limitation and not being able to deal with
the "default" namespace weneed to assign a bogus id (here dflt)
to the default namespace and use it in our XSL so that via XPath
we can select unqualified elements within the SOAP response.
-->
<xsl:template match="/soap:Envelope/soap:Body/
dflt:GetHostInfoByNameResponse/dflt:GetHostInfoByNameResult">
<wc:COLLECTION xmlns:wc="http://www.ptc.com/infoengine/1.0">
<output TYPE="Object" STATUS="0">
<wc:INSTANCE>
<Name><xsl:value-of select="dflt:Name"/></Name>
<xsl:for-each select="dflt:Aliases/dflt:Alias">
<Alias><xsl:value-of select="current()"/></Alias>
</xsl:for-each>
<xsl:for-each select="dflt:IPList/dflt:IPAddress">
<IPAddress><xsl:value-of select="current()"/></IPAddress>
</xsl:for-each>
</wc:INSTANCE>
</output>
</wc:COLLECTION>
</xsl:template>
</xsl:stylesheet>