我11年来一直是一名cf开发人员,但我很尴尬地说我没有对网络服务做过任何实质性的事。
如何构建cfhttp调用以使用供应商提供的以下Web服务API?
Soap 1.2请求:
POST /Portal/internet.asmx HTTP/1.1
Host: 192.168.222.240
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<Usage xmlns="http://portal/internet.asmx">
<SessionID>string</SessionID>
<CustomerCode>int</CustomerCode>
<FullUserName>string</FullUserName>
<StartDate>dateTime</StartDate>
<EndDate>dateTime</EndDate>
</Usage>
</soap12:Body>
</soap12:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
肥皂1.2回复:
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<UsageResponse xmlns="http://portal/internet.asmx">
<UsageResult>
<xsd:schema>schema</xsd:schema>xml</UsageResult>
</UsageResponse>
</soap12:Body>
</soap12:Envelope>
我现在想手动完成(我知道cfinvoke和createobject)。我从Ben Nadel博客中得到了以下内容,但是我收到了“连接失败”错误。我想在查看代码是否与真正的连接/授权相关之前,我只需要有人检查代码中的明显缺陷。
<cfsavecontent variable="soapBody">
<cfoutput>
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Usage xmlns="http://portal/internet.asmx">
<SessionID>F7B3B3FB-DE35-45CB-A785-8229E91FAEC9</SessionID>
<CustomerCode>1112221</CustomerCode>
<FullUserName>MR DAVE GEORGE</FullUserName>
<StartDate>2010-01-01</StartDate>
<EndDate>2009-01-01</EndDate>
</Usage>
</soap:Body>
</soap:Envelope>
</cfoutput>
</cfsavecontent>
<cfhttp
url="http://portal/internet.asmx"
method="post"
result="httpResponse">
<cfhttpparam
type="header"
name="SOAPAction"
value="http://portal/internet.asmx/Usage"
/>
<cfhttpparam
type="header"
name="accept-encoding"
value="no-compression"
/>
<cfhttpparam
type="xml"
value="#trim( soapBody )#"
/>
</cfhttp>
<cfoutput>
#httpResponse.fileContent# <!--- ouputs "connection failure" --->
</cfoutput>
非常感谢, 保罗
答案 0 :(得分:0)
要接受你的话并假设不能用CF做,因为@Henry指出它是SOAP 1.2。所以看起来这需要直接使用Java,特别是Soap with Attachments API for Java(SAAJ)。这是在java包javax.xml.soap
中,它不是标准Java发行版的一部分。取而代之的是来自Oracle的a separate download。
Best end to end tutorial I could find关于建立与端点的连接,构建&amp;发送请求,接收和解析响应来自IBM的developerworks站点。预先警告它涉及到这样做将需要在上述下载的ColdFusion安装的类路径中安装几个罐子。
答案 1 :(得分:0)
最简单的方法是为你的web服务create Java stubs创建一个java对象并在coldfusion中调用java对象。
像这样使用它:
&lt; cfobject name =“myObj”type =“Java”class =“your.class.name”action =“create”&gt;
&LT; CFSCRIPT&GT;
args = structNew()
myObj.webservicemethod(参数);
&LT; / CFSCRIPT&GT;