web-services - 复杂数据类型的 Coldfusion Webservice 错误

标签 web-services coldfusion coldfusion-11

我正在尝试测试 Bloomberg webservice对于 getFields 操作,但它会抛出错误。

Web service parameter name parameters cannot be found in the provided parameters {CRITERIA}.

到目前为止的代码。

<cfset FieldSearchCriteria = structNew()>
<cfset FieldSearchCriteria.mnemonic = "NAME">

<cfset GetFieldsRequest = structNew()>
<cfset getFieldsRequest.criteria =  FieldSearchCriteria>



<cfinvoke 
webservice="https://service.bloomberg.com/assets/dl/dlws.wsdl" 
proxyserver="***"
proxyport="***"
proxyuser="***"
proxypassword="***"
method="getFields" 
refreshwsdl="false"
wsVersion="1"
argumentcollection="#getFieldsRequest#"
returnvariable="aTemp"> 

<cfdump var="#aTemp#">

下面是有效的相应 soapUI 请求

<soapenv:Body>
  <ns:getFieldsRequest>
     <ns:criteria>
        <!--Optional:-->
        <ns:mnemonic>NAME</ns:mnemonic>
     </ns:criteria>
  </ns:getFieldsRequest>

有什么建议吗?

更新 1:createobject() 在一定程度上随着参数的变化而起作用。但是现在抛出握手错误。

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

代码:

<cfscript>
    ws = createObject("webservice", "https://service.bloomberg.com/assets/dl/dlws.wsdl",{refreshwsdl=true,proxyserver="***",proxyport="***",proxyuser="***",proxypassword="***",wsversion=1});
    //show web service methods for debugging purposes
    //writeDump(ws);

    // construct arguments
    args = {parameters={criteria={mnemonic="NAME"}}
        };

    writeDump(args);
    // call the method
    result  = ws.getFields(argumentCollection=args);

    writeDump(result)
</cfscript>

我们获得了 x.509 .p12 证书并使用 OpenSSL 编码为 DER。 目前,不确定存储的证书是否有问题。

最终更新: 最后,改为使用 cfhttp 调用设法使 web 服务运行。 本的blog post是一位出色的向导。我无法解决 cfinvoke 的 keystore 的证书问题。

<cfsavecontent variable="soapBody">
    <soapenv:Envelope
        xxmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:ns="http://services.bloomberg.com/datalicense/dlws/ps/20071001">
        <soapenv:Header/>
        <soapenv:Body>
            <ns:getFieldsRequest>
                <ns:criteria>
                    <!--Optional:-->
                    <ns:mnemonic>NAME</ns:mnemonic>
                </ns:criteria>
            </ns:getFieldsRequest>
        </soapenv:Body>
    </soapenv:Envelope> 

<cfhttp
    url="https://dlws.bloomberg.com/dlps"
    method="post"
    result="httpResponse"
    clientcert="#ExpandPath(".")#\cert.p12"
    clientcertpassword="****">

    <!---
        Most SOAP action require some sort of SOAP Action header
        to be used.
    --->
    <cfhttpparam
        type="header"
        name="SOAPAction"
        value="""getFields"""
        />

    <cfhttpparam
        type="xml"
        value="#trim( soapBody )#"
        />

</cfhttp>

<cfdump var="#XmlParse(httpResponse.filecontent)#">

最佳答案

尝试使用 createObject() 并改为调用 getFields() 方法。好像过了“找不到参数错误”。

<cfset svc = createObject("webservice"
                , "https://service.bloomberg.com/assets/dl/dlws.wsdl"
                , {wsVersion=1}
            )>
<cfset getFieldsRequest = {criteria={mnemonic="NAME"}}>
<cfset result = svc.getFields(getFieldsRequest)>
<cfdump var="#result#">

(与问题无关,但 CF11 支持结构的快捷语法,即 {})

关于web-services - 复杂数据类型的 Coldfusion Webservice 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55233591/

相关文章:

eclipse - Apache CXF 配置 : Failed to import bean definitions from URL location

php - 在 WSDL 文件中为服务提供者使用动态 IP 地址

coldfusion - CFSWITCH 用于排序列时能否防止 SQL 注入(inject)?

ios - objective-c 在发送到 web 服务后卡住

asp.net - 将 jQuery AJAX 与 .NET 集成

coldfusion - 当我们在 ColdFusion 中使用 API 调用(POST 请求)将参数数量传递到服务器时,如何修复 'POST request Exceeded' 错误?

coldfusion - 如何使用 ColdBox 中选择 HTML 帮助器中的结构填充选择列表?

json - 覆盖 ColdFusion 11 图表的外部样式 JSON

web-services - ColdFusion 11 - 使用 axis-1 Web 服务

javascript - 与服务器端和客户端验证冲突