如何形成okhttp调用以使用自定义Web服务API

时间:2010-12-09 00:16:03

标签: web-services soap coldfusion

我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> 

非常感谢, 保罗

2 个答案:

答案 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对象。

  1. 创建存根,jar,将它们放入lib文件夹并重新启动coldfusion
  2. 确保您可以在路径中看到jar文件(在摘要中查看cf admin)。
  3. 像这样使用它:

    &lt; cfobject name =“myObj”type =“Java”class =“your.class.name”action =“create”&gt;

    &LT; CFSCRIPT&GT;
    args = structNew()
    myObj.webservicemethod(参数);
    &LT; / CFSCRIPT&GT;