私は突然ColdFusionの2016と私のWebサービスへのColdFusion 9から、もはや仕事をアップグレードしていませんよ。私はそれが軸2が常温核融合10で導入されたためだと、それは非機能私の既存のWebサービスをレンダリングと信じています。私は、ColdFusion Administratorで1に戻って、Webサービスのバージョンを設定してもWebサービスは、もはや機能しない
、それはまだ動作しません。
私は、これらのWebサービスを呼び出す方法は、以下のようなcreateObject
機能である:
<cfscript>
objSoapHeader = XmlParse("<wsse:Security mustUnderstand=""true"" xmlns:wsse=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd""><wsse:UsernameToken><wsse:Username>USERNAME</wsse:Username><wsse:Password>PASSWORD</wsse:Password></wsse:UsernameToken></wsse:Security>");
Application.UserWebService = CreateObject("webservice", PATH & "Requests/UserService.asmx?WSDL");
addSOAPRequestHeader(Application.UserWebService,"","",objSoapHeader,true);
// Get the .Net resources
Application.NetResources = Application.UserWebService.GetNetResources();
</cfscript>
私が受け取るエラーは、次のとおりです。
Cannot perform web service invocation GetNetResources.
The fault returned when invoking the web service operation is:java.lang.RuntimeException: Error obtaining parser from data source:LanguageHeader cannot be null!
それはLangaugeHeader
ができないと述べていますnull
なります。メッセージのリストを見たとき、私はGetNetResourcesに関連する3つのメッセージを参照することができますしかし
<wsdl:portType name="UserServiceSoap">
<wsdl:operation name="GetNetResources">
<wsdl:input message="tns:GetNetResourcesSoapIn"/>
<wsdl:output message="tns:GetNetResourcesSoapOut"/>
</wsdl:operation>
</wsdl:portType >
:操作のみを指定した場合
<wsdl:message name="GetNetResourcesSoapIn">
<wsdl:part name="parameters" element=tns:GetNetResources"/>
</wsdl:message>
<wsdl:message name="GetNetResourcesSoapOut">
<wsdl:part name="parameters" element=tns:GetNetResourcesResponse"/>
</wsdl:message>
<wsdl:message name="GetNetResourcesLanguageHeader">
<wsdl:part name="parameters" element=tns:LanguageHeader"/>
</wsdl:message>
をWSDLはGetNetResources
操作に関連した2件のメッセージを表示します2つのメッセージ、次にWSDLファイル内でこの3番目のメッセージが操作に関連付けられていますか?
LanguageHeaderパラメータは絶対に必要とColdFusion 2016年にenforedされているようですので、なぜそれは、ColdFusion 9(1軸)で働いていましたか?
EDIT 1
portType
とは対照的に、私はbinding
に次のコードを見つけ上記(アウトstriked)私の最初の質問に答えるために:
<wsdl:binding name="UserServiceSoap" type="tns:UserServiceSoap">
<wsdl:operation name="GetNetResources">
<soap:operation style="document" soapAction="http://tempuri.org/GetNetResources"/>
<wsdl:input>
<soap:body use="literal"/>
<soap:header message="tns:GetNetResourcesLanguageHeader" use="literal" part="LanguageHeader"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
しかしまだないこと私の2番目の質問に答えてください。
EDIT 2
コードで少し遊んでた後、私は、Webサービスの呼び出しに変数を追加することにより、RuntimeException
を解決するためにうまく管理。今、次のエラーが発生し
args = {TEST="<locale>en-CA</locale>"};
Application.NetResources = Application.UserWebService.GetNetResources(argumentCollection=args);
:TEST
として
Web service parameter name languageHeader cannot be found in the provided parameters {TEST}.
は、WSDLで指定された実際のパラメータではありません、私はlanguageHeader
にそれを修正し、この新しいエラーを受け取る:
Web service operation GetNetResources with parameters {LANGUAGEHEADER={<locale>en-CA</locale>}} cannot be found.
これは実際にはlanguageHeader
が正しいパラメータ名であることを示していますが、依然としてWebサービス操作を見つけることができないため、パラメータの 'タイプ'は異なります。
おそらく、私が値として文字列を送信することとしていないよ、しかし私のWSDLで振り返ってみると、それは彼らがLocale
のタイプと述べている文字列です:
<wsdl:types>
<s:schema targetNamespace="http://tempuri.org/" elementFormDefault="qualified">
<s:element name="LanguageHeader" type="tns:LanguageHeader"/>
<s:complexType name="LanguageHeader">
<s:sequence>
<s:element name="Locale" type="s:string" maxOccurs="1" minOccurs="0"/>
</s:sequence>
<s:anyAttribute/>
</s:complexType>
</s:schema>
</wsdl:types>
私が理解から、I文字列としてLocale
を含むパラメータとしてcomplexType
オブジェクトを送信すると仮定します。
この場合、CFMLからどのようなオブジェクトを送信しますか?
ないあなたの質問への答えが、あなたはそれがキャッシュのような愚かなものではありませんを確認するために、 'refreshWSDL = true'をしましたか? :) – Leigh
私は 'cfinvoke'を使って試してみましたが、それでも動作しません。 – MPaul
Ok。実際にWSオブジェクトを検証するだけでは、バージョン1(適切なスコープ内)で作成されました。私は今は2016年にアクセスすることはできませんが、何かが変わる可能性は常にあります。申し訳ありませんが、私はもっと助けになることはできませんでした。 – Leigh