我在尝试使用 ColdFusion 的 Web 服务时遇到了一些挑战。服务 (AccountsService) 有一个方法 GetAccountLinksByUser,它返回与给定用户关联的帐户。此方法接受两个参数:
UPN,它只是用于标识用户的唯一字符串。据我所知,这没问题。
源类型。这最终是一个字符串,但在 WSDL 中被定义为具有三个可能值之一的简单类型。这是来自 WSDL 的 XML 的相关部分:
<xsd:simpleType name="SourceType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="All"/>
<xsd:enumeration value="Manual"/>
<xsd:enumeration value="System"/>
</xsd:restriction>
</xsd:simpleType>
问题是我似乎不能只将字符串“All”、“Manual”或“System”传递到 Web 服务中。CF 生成的存根对此方法具有以下签名:
getAccountLinksByUser(java.lang.String, org.datacontract.schemas._2004._07.tfonline_services_accounts_datacontracts.SourceType)
这似乎表明我需要传入 org.datacontract.schemas._2004._07.tfonline_services_accounts_datacontracts.SourceType 的实例。但是,我无法(轻松)创建该类型的实例,因为它似乎不在 CF 搜索的类路径中。我尝试将 CF 生成到 /stubs 目录中的类包装到 jar 中,并将它们放在类路径中。这确实有效,因为我现在可以创建 org.datacontract.schemas._2004._07.tfonline_services_accounts_datacontracts.SourceType 的实例,但我仍然无法将其传递给 getAccountLinksByUser 方法。
根据要求,这是我用来调用 Web 服务的代码:
<cfset accountsService = CreateObject("WebService", "http://local.hostname/libraries/com/foo/bar/staging/AccountsService.wsdl") />
<cfset SourceType = CreateObject("java", "org.datacontract.schemas._2004._07.tfonline_services_accounts_datacontracts.SourceType") />
<cfset accounts = accountsService.getAccountLinksByUser("username@domain", SourceType.All) />
更多信息。Web 服务的发布者不会公开发布其 WSDL。这是通过电子邮件发送给我的,我正在从我的本地开发站点加载 WSDL。
我得到的具体错误是:
无法执行 Web 服务调用 getAccountLinksByUser。调用 Web 服务操作时返回的错误是:
无法执行 Web 服务调用 getAccountLinksByUser。调用 Web 服务操作时返回的错误是:'' java.lang.IllegalArgumentException: argument type mismatch
我现在不确定该去哪里。有什么建议么?
该服务是用 .NET 编写的。