你可以在coldfusion中编写webservice调用而不使用createObject(“webservice”....即使用Java

时间:2012-02-20 12:33:17

标签: java web-services coldfusion wsdl

我在Adobe网站上发现了这些信息:Consuming web services that ColdFusion does not generate。但是,我仍然无法通过此网络服务进行身份验证:https://secure.eloqua.com/API/1.2/Service.svc?wsdl

身份验证确实有效,因为我已设法通过.Net访问这些方法。这是CF无法处理的Web服务吗?

Eloqua站点包含Java的代码示例,但它假定使用Netbeans的Java Dev Environment。您是否可以绕过内置的CF Web服务调用并直接在Java中执行?

2 个答案:

答案 0 :(得分:1)

Eloqua正在使用WS-Security来获取ColdFusion不支持的SOAP消息(需要Axis2)。

但是你可以使用Anthony Israel-Davis的cfWSAuthenticator,一个ColdFusion CFC来为SOAP请求添加WS-Security - > https://github.com/anthony-id/cfWSAuthenticator

希望它会有所帮助。

答案 1 :(得分:1)

这个问题有点晚了,但是我能够通过在ColdFusion中手动构建请求主体和头文件而无需任何外部jar并且不直接调用任何java库,来向ws安全SOAP服务发出有效请求。 WSS(Web服务安全性)用户名令牌Making Soap Web Service Request with ColdFusion and CFHTTP非常简单。您可以执行以下操作来生成安全标头,并将其添加到自定义构建的SOAP有效内容中。关键是生成一个兼容且唯一的随机数,每个请求以及合规的创建日期/时间。

如果您需要有关构建和发送请求的更多信息,请查看azizbekian。一旦你构建了一个具有各种实用程序方法的cfc(发送请求,创建安全头等),就需要创建与你想要调用的API方法相对应的特定函数(在soapUI中加载wsdl,复制/粘贴)请求体进入你的cfc函数,根据需要添加参数和业务逻辑,解析响应)。

<cffunction name="generateSecurityHeader" access="private" returntype="string" output="false">
        <cfset var loc = structNew() />
        <cfsavecontent variable="loc.soapSecurityHeader">
            <cfoutput>
                <soapenv:Header>
                    <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                        <wsse:UsernameToken wsu:Id="UsernameToken-1">
                            <wsse:Username>USERNAME</wsse:Username>
                            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0##PasswordText">PASSWORD</wsse:Password>
                            <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0##Base64Binary">#ToBase64(createUUID())#</wsse:Nonce>
                            <wsu:Created>#Dateformat(Now(),'yyyy-mm-ddThh:mm:ss')#Z</wsu:Created>
                        </wsse:UsernameToken>
                    </wsse:Security>
                </soapenv:Header>
            </cfoutput>
        </cfsavecontent>
        <cfreturn loc.soapSecurityHeader>
    </cffunction>