2012-11-28 35 views
1

我目前正在嘗試在Salesforce中調用亞馬遜產品零售Web服務。無法在salesforce中的apex Web服務標註中設置標頭

正如我在 Getting WSDL parse error while generating Apex code from WSDL in Salesforce

提到我最初無法生成頂點短線類別,但我隨後@Ballinger建議的方法和創建頂點類。我寫了一個apex類來使用該存根並設置請求參數。我寫的類是如下

public class AmazonProductStubNew 
{ 
public static void getResults() 
{ 
     System.Debug(' getResults start '); 
     AmazonWS.AWSECommerceServicePortUS stub = new AmazonWS.AWSECommerceServicePortUS(); 

     stub.inputHttpHeaders_x = new Map<String,String>(); 
     stub.inputHttpHeaders_x.put('AWSAccessKeyId','MyAmazonAWSAccessKeyId'); 
     stub.inputHttpHeaders_x.put('Timestamp','2012-11-28T12:11:30Z'); 
     stub.inputHttpHeaders_x.put('Signature','Encrypted Secret Code'); 
     String MarketplaceDomain = ''; 
     String AWSAccessKeyId = 'MyAmazonAWSAccessKeyId'; 
     String AssociateTag = ''; 
     String XMLEscaping = ''; 
     String Validate = ''; 
     AmazonWS.ItemSearchRequest Shared = new AmazonWS.ItemSearchRequest(); 
     Shared.SearchIndex = 'DVD'; 
     AmazonWS.ItemSearchRequest[] Request = new AmazonWS.ItemSearchRequest[1]; 
     Request[0] = new AmazonWS.ItemSearchRequest(); 
     Request[0].Title = 'Inception'; 
     AmazonWS.ItemSearchResponse_element response = stub.ItemSearch(MarketplaceDomain,AWSAccessKeyId,AssociateTag,XMLEscaping,Validate,Shared,Request); 
     AmazonWS.Items_element[] localItems = response.Items; 
     System.Debug(localItems[0].TotalResults); 
} 
} 

即使我已經添加了HTTP頭存根,我沒有得到它在XML請求消息 XML請求如下

<?xml version="1.0" encoding="UTF-8"?> 
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<env:Header /> 
<env:Body> 
<ItemSearch xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01"> 
<MarketplaceDomain> 
</MarketplaceDomain> 
<AWSAccessKeyId>MyAWSAccessKeyId</AWSAccessKeyId> 
<AssociateTag></AssociateTag> 
<XMLEscaping></XMLEscaping> 
<Validate></Validate> 
<Shared><SearchIndex>DVD</SearchIndex></Shared> 
<Request><Title>Inception</Title> 
</Request></ItemSearch> 
</env:Body></env:Envelope> 

由於頭在SOAP請求中不存在,存在SOAP故障從Amazon服務器請求籤名。

正如您所見,我是Salesforce Apex的新手。我跟着步驟

http://www.salesforce.com/us/developer/docs/apexcode/index_Left.htm#StartTopic=Content/apex_web_services_wsdl2apex.htm#http_header_support

設置頭。

任何想法爲什麼頭沒有被添加?

P.S我手動添加了頭文件並在SOAP UI中嘗試過,我得到了正確的響應。

謝謝:)

+0

你能否澄清你的問題,標題是關於HTTP標題的討論,但你的問題似乎是關於SOAP消息標題,這是什麼? – superfell

+0

感謝您的回覆:) AWSAccessKeyId,時間戳,簽名所有三個應該出現的請求處理,在構建請求消息的SOAP UI中,我指定這些在,它工作正常。但是,當我通過頂點類添加它不會被添加,如空的所示。我在頂點代碼中的標題設置是否有誤?這是我的問題。按照Apex教程,存根有inputHttpHeaders_x地圖。現在這清楚了嗎? – Satty

+0

然後你可以修復你的問題的標題。 – superfell

回答

1

我認爲你正在使用錯誤的功能:)(問題確實令人困惑)。

SOAP(或通常爲HTTP)通信包含發送標頭和實際消息(如果您喜歡的話,有效載荷)。標題是簡短的文本內容,消息通常是一個巨大的XML。

您的代碼設置爲HTTP headers(用於網絡通信進行身份驗證,提供有關您的瀏覽器的信息,首選語言,設置cookie,返回狀態代碼,如404頁面未找到...)請不要冒犯「對於傻瓜」,但我意識到維基百科文章有點太多,這可能會更簡單:http://net.tutsplus.com/tutorials/other/http-headers-for-dummies/

而我懷疑亞馬遜的web服務想要的只是<env:Header>...</env:Header>標記內的一些字段?只需檢查生成的頂點代碼是否存在名爲「Header」的子類(您也可以搜索變量名稱,如「Signature」),這將是一個瘋狂的猜測,但我認爲您必須寫下如下內容:

AmazonWS.AWSECommerceServicePortUS stub = new AmazonWS.AWSECommerceServicePortUS(); 
AmazonWS.Header h = new AmazonWS.Header(); 
h.AWSAccessKeyId = 'MyAmazonAWSAccessKeyId'; 
h.Timestamp = '2012-11-28T12:11:30Z'; 
h.Signature = 'Encrypted Secret Code'; 
stub.Header = h; // plug it into the request 

// create and plug other required tags 
AmazonWS.ItemSearchRequest Shared = new AmazonWS.ItemSearchRequest(); 
Shared.SearchIndex = 'DVD'; 
AmazonWS.ItemSearchRequest[] Request = new AmazonWS.ItemSearchRequest[1]; 
Request[0] = new AmazonWS.ItemSearchRequest(); 
Request[0].Title = 'Inception'; 
// ... 

現在,使它更加混亂,你可能仍然必須使用HTTP標頭,有一個特殊的一個叫SOAPAction。但總體來說,我相信你是把你的數據在XML之後,而不是在HTTP頭。


夠滑稽的,我從http://aws.amazon.com/code/Product-Advertising-API/2478下載的Java例子,如果我正確讀取ŧ他希望在URL(端點)中傳遞簽名,而不是在XML中。可能是因爲它是一種REST GET方法(如果你可以訪問這個API,它可以爲你節省大量的頭髮,SOAP很笨拙)。

+0

是的,你對第一點完全正確,完全與HTTP標題和SOAP標題混淆:(我的不好。關於你在存根中尋找Signature元素的第二點,沒有運氣:(所以我跟着這個鏈接 http://boards.developerforce.com/t5/Apex-Code-Development/WSDL2Apex-adding-my-own-SOAP-Headers-to-the-apex-class/td-p/142237 可自行添加肥皂標題在Amazon WSDL中,將發佈操作結果:)感謝幫助eyescream。這是你第二次幫助我:D – Satty

相關問題