2017-04-24 34 views
0

我有以下定製/隱藏參數

> <book category="cooking"> 
> <title lang="en">Everyday Italian</title> 
> <author>Giada De Laurentiis</author> <year>2005</year> 
> <price>30.00</price> </book> 

現在我想隱藏參數,考慮到需要參數的服務,我想我的客戶應該只看到

<book category="cooking"> 
<title lang="en">Everyday Italian</title> 
<author>Giada De Laurentiis</author> 
<year>2005</year> 
</book> 

怎麼能是否有可能在WSO2 ESB中使用。 任何幫助都會有幫助。

回答

0

我假設你想隱藏一些參數給客戶或消費者,這樣他們就不必將它們作爲請求的一部分傳遞給它們。比如你的情況中的「價格」元素。

那麼,您可以使用適當的wsdl文件創建代理爲基於wsdl的代理,以便您在請求中或相應的複合類型中沒有「價格」元素。現在,客戶端將無法看到請求中的「price」元素,因爲您正在描述沒有「price」元素的WSDL合約。

希望它能幫助:)

+0

親愛的Praveen,我希望價格應該是硬編碼的,客戶端不應該知道「價格」的價值,客戶端將不得不將所有參數傳遞給SOAP消息,但很少有參數會從客戶端填充,其他會自動填充或硬編碼客戶端沒有看到這一點。在ESB之前,我曾經爲這種需求編寫包裝服務,但我已經切換到ESB,我正在找到解決方案,但我未能實現這一點。謝謝 –

0

有幾種方法可以實現這一點。你可以使用有效負載調解器,通過xslt轉換它,在腳本調解器中做它。我認爲你的情況我會使用有效載荷中介或xslt。在完成payload/xslt之後,您可以將呼出的有效載荷發回給呼叫者。你可以在wso2頁面找到很多例子。

例如這裏

https://docs.wso2.com/display/ESB481/PayloadFactory+Mediator

希望有所幫助。

+0

感謝Martin Hald.Can你更具體一點,我是WSO2 ESB的新蜜蜂,而且我已經嘗試了近兩週試圖找出解決方案。我的要求很簡單,我有一些Web服務,每個服務都有十到十二個參數,我想隱藏它們,我希望我的服務消費者只能看到幾個參數。任何形式的幫助將如此讚賞。 –

0

隨着JS中保,你可以這樣做:

<payloadFactory media-type="xml"> 
    <format> 
     <book category="cooking"> 
      <title lang="en">Everyday Italian</title> 
      <author>Giada De Laurentiis</author> 
      <year>2005</year> 
      <price>30.00</price> 
     </book> 
    </format> 
    <args/> 
</payloadFactory> 

<log level="full"/> 
<script language="js"><![CDATA[ 
    var msg = mc.getPayloadXML(); 
    mc.setPayloadXML(
     <book category="cooking"> 
      <title lang="en">{msg..*::title}</title> 
      <author>{msg..*::author}</author> 
      <year>{msg..*::year}</year> 
     </book> 
    ); 
]]> 
</script> 
<log level="full"/> 

以上payloadFactory調解僅僅是定義你在你的問題中提出的XML。

此外,還可以使用payloadFactory中介:

<payloadFactory media-type="xml"> 
    <format> 
     <book category="cooking"> 
      <title lang="en">$1</title> 
      <author>$2</author> 
      <year>$3</year> 
     </book> 
    </format> 
    <args> 
     <arg evaluator="xml" expression="//book/title/text()"/> 
     <arg evaluator="xml" expression="//book/author/text()"/> 
     <arg evaluator="xml" expression="//book/year/text()"/> 
    </args> 
</payloadFactory> 

最後,XSLT方法,你可以在突觸配置定義本地入境文件:

<?xml version="1.0" encoding="UTF-8"?> 
<localEntry key="xsltToTransform" xmlns="http://ws.apache.org/ns/synapse"> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="node() | @*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node() | @*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="price"/> 

</xsl:stylesheet> 
</localEntry> 

然後,在調解序列中,只需調用已定義的本地條目即可。

<xslt key="xsltToTransform"/>