Web services 使用ColdFusion解析WSDL/SOAP

Web services 使用ColdFusion解析WSDL/SOAP,web-services,soap,coldfusion,lucee,Web Services,Soap,Coldfusion,Lucee,我将用户ID传递到我认为是SOAP请求的内容中。我从来没有使用过SOAP,也不太确定从哪里开始,所以如果我的问题不太合理,请告诉我,我将尝试填补缺少的细节 问题的背景: 我正在转换excel宏(宏将查询用户ID传递给服务器,服务器将返回员工详细信息,如姓名、电子邮件、地址等),并转换为web查找 我有以下代码: <cfscript> variables.sso = '55555'; variables.serverURL = "http://search.corporate.ge.c

我将用户ID传递到我认为是SOAP请求的内容中。我从来没有使用过SOAP,也不太确定从哪里开始,所以如果我的问题不太合理,请告诉我,我将尝试填补缺少的细节

问题的背景: 我正在转换excel宏(宏将查询用户ID传递给服务器,服务器将返回员工详细信息,如姓名、电子邮件、地址等),并转换为web查找

我有以下代码:

<cfscript>
variables.sso = '55555';
variables.serverURL = "http://search.corporate.ge.com/ldq/Query";
variables.queryString = "?serverID=ssoprod&searchBase=ou=domainWorker,+o=domain.com&Prebuilt=true&scope=2&filter=(domainoraclehrid=#variables.sso#)";
variables.webservice = "#variables.serverURL##variables.queryString#";
</cfscript>

<cfdump var="#variables.webservice#">
<cfhttp url="#variables.webservice#" method="get" result="response"></cfhttp>
<cfdump var="#response.fileContent#" label="soap content">

variables.sso='55555';
variables.serverURL=”http://search.corporate.ge.com/ldq/Query";
variables.queryString=“?serverID=ssoprod&searchBase=ou=domainWorker,+o=domain.com&prebuild=true&scope=2&filter=(domainoraclehrid=#variables.sso#)”;
variables.webservice=“#variables.serverURL##variables.queryString#”;
当我从variables.webservice的转储中获取值并将其直接粘贴到浏览器中时,我得到以下结果(假设userID为55555):

此XML文件似乎没有任何与之关联的样式信息。文档树如下所示。
...
承包商
约翰
90210
456456987
厕所。Doe@domain.com
多伊,约翰
...

但当我转储#response.fileContent#时,我得到了一些不同的东西,我得到:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:f="http://www.w3.org/2001/06/soap-faults">
    <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
            <SOAP-ENV:faultcode>MustUnderstand</SOAP-ENV:faultcode>
            <SOAP-ENV:faultstring>ou=domainWorker,+o=domain.com: [LDAP: error code 34 - Invalid DN], Name Not valid - ou=domainWorker,+o=domain.com - filter -(domainoraclehrid=55555) </SOAP-ENV:faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

必须理解
ou=domainWorker,+o=domain.com:[LDAP:错误代码34-无效DN],名称无效-ou=domainWorker,+o=domain.com-过滤器-(domainoraclehrid=55555)

最后,我想做的是解析出“cn”和“mail”的详细信息。我错过了什么?我怀疑这可能与我直接访问URL(登录用户)有关,因为请求是从服务器发出的,并且没有经过“身份验证”。如果是这种情况,我如何解决这个问题?

更新:

(起初,我对为什么不能用CF2018重现您的结果感到有点困惑,但现在我知道您使用的是Lucee,这种差异是有意义的。)

查看成功的响应,我注意到它没有包含
+
,而是在:

有趣的是,转储http请求数据表明显然CF2018的做法有所不同。与Lucee不同,CF2018将加号视为一个空格

CF2018=>
%20
(空格)

Lucee 5.2.8.50=>
%2B
(加号)


正如您所说,它可能是身份验证。如果你在一个私人窗口尝试它,它会起作用吗?这也可能是url参数编码或浏览器发送的不同头的问题。使用浏览器的web控制台查看它为成功请求发送的内容。另外,对于grins,尝试用空格替换+。当我用[space]替换+时,空格被URL编码为%20,并返回相同的结果(良好结果)。抱歉,最后一部分,我的意思是在cfhttp调用中将
+
更改为空格。剩下的事情要在浏览器中进行调查(使用私有选项卡、查看web控制台标题、url参数等)。i、 e.找出浏览器调用的不同之处以及成功的原因。如果您在其中添加有关“微笑”的评论,我的意思是删除+,我可以将其标记为答案。:)我能够解析XML树并获得所需的数据。我想您是指名为“mail”的属性吧?如果响应只有一个具有该名称的属性,则相对搜索应该可以工作
xmlSearch(doc,“//dsml:attr[@name='mail'])
。如果没有,最好打开一个新线程,这样下一个家伙就更容易找到xml问题。
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:f="http://www.w3.org/2001/06/soap-faults">
    <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
            <SOAP-ENV:faultcode>MustUnderstand</SOAP-ENV:faultcode>
            <SOAP-ENV:faultstring>ou=domainWorker,+o=domain.com: [LDAP: error code 34 - Invalid DN], Name Not valid - ou=domainWorker,+o=domain.com - filter -(domainoraclehrid=55555) </SOAP-ENV:faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<dsml:entry dn="domainssouid=xxxx,ou=domainWorker, o=domain.com">
searchBase=ou=domainWorker, o=domain.com
searchBase=ou%3DdomainWorker%2C%20o%3Ddomain.com
searchBase=ou%3DdomainWorker%2C%2Bo%3Ddomain.com