你好WSO2社區你好#1,WSO2 ESB服務編排
我的SOA套件從ESB開始的測試將會好:現在的ESB識別外部服務,創建返回正確的結果正確的代理服務器。
解決
關於這一點,我有兩個問題:第一個是, 「嘗試」 功能引發異常:
"Cannot find dispatch method for {http://schemas.xmlsoap.org/soap/envelope/}Envelope
[tagOpened]/soapenv:文本[tagclosed]「
當我嘗試發送SOAP封裝爲 模擬服務創建的代理服務的Web服務。
無論如何,如果我嘗試從外部客戶端(上 NetBeans中創建)代理服務它的偉大工程。
ANSWER
在第一部分,其原因很可能是跨域問題的嘗試,它是通過Java腳本存根從 瀏覽器發送消息。你會發現,當服務 自己在ESB本身託管,因爲請求通過 同一個域這個偉大工程。這就是爲什麼,儘管,它完全通過 正常的客戶端調用,它不通過工作試穿它。
第二個問題是我無法編排兩項服務。我的目標是將第一個服務的輸入發送給第二個服務,然後發送給用戶。
我工作的教程Tharindu馬修建議:現在的一切對我來說很有意義,除了一兩件事:XSLT轉換。
這裏是失序的教程建議你創建:
<outSequence xmlns="http://ws.apache.org/ns/synapse">
<switch source="get-property('STATE')">
<case regex="PERSON_INFO_REQUEST">
<log level="full">
<property name="sequence" value="outSequence - STATE 01 - response from PersonInfoService" />
</log>
<xslt key="xslt">
<property name="amount" expression="get-property('ORG_AMOUNT')" />
</xslt>
<log level="full">
<property name="sequence" value="outSequence - STATE 01 - request for CreditService" />
</log>
<property name="STATE" value="CREDIT_REQUEST" />
<send>
<endpoint key="CreditEpr" />
</send>
</case>
<case regex="CREDIT_REQUEST">
<log level="full">
<property name="sequence" value="outSequence - STATE 02 - response from CreditService" />
</log>
<send />
</case>
</switch>
</outSequence>
現在,聚焦開關的第一種情況的XSLT節點上,你可以看到有隻爲量特性的獲取。 因此,我認爲我們有一個來自序列的XML,它聲明瞭ID,並且這取決於數量屬性(我不知道它是什麼)。
教程則表明:
創建請求這個CrediService,我們使用與XSLT調解下XSLT。請注意,我們使用的是我們存儲在此XSLT作爲XSLT參數ORG_ID並使用XSLT調解爲好。
這裏是XSLT顯示,在教程:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
xmlns:ns="http://samples.esb.wso2.org"
xmlns:ax21="http://samples.esb.wso2.org/xsd"
exclude-result-prefixes="ns fn">
<xsl:param name="amount"/>
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="//ns:getResponse" />
</xsl:template>
<xsl:template match="ns:getResponse" xmlns:ns="http://samples.esb.wso2.org">
<sam:credit xmlns:sam="http://samples.esb.wso2.org" xmlns:xsd="http://samples.esb.wso2.org/xsd">
<sam:info>
<xsd:amount><xsl:value-of select="$amount"/></xsd:amount>
<xsd:personInfo>
<xsd:address><xsl:value-of select="ns:return/ax21:address"/></xsd:address>
<xsd:id><xsl:value-of select="ns:return/ax21:id"/></xsd:id>
<xsd:name><xsl:value-of select="ns:return/ax21:name"/></xsd:name>
</xsd:personInfo>
</sam:info>
</sam:credit>
</xsl:template>
</xsl:stylesheet>
有人問我把一個類似的文件到WSO2 ESB的資源目錄,但該文件從來沒有在教程中使用:
複製personToCredit.xslt樣品壓縮到WSO2 ESB的資源目錄。
--------- LITTLE PARENTHESIS -----------
未使用WSDL文件後,要麼有人說:
將示例zip中的CreditProxy.wsdl複製到WSO2 ESB的資源目錄中。
我在配置/治理註冊表中找不到WSDL文件,我不知道如何解決它,所以我選擇將其指定爲內聯。
--------- LITTLE PARENTHESIS END -----------
這句話後面是XSLT文件的文本。我現在的主要問題是:
應該在哪裏我把這個XSLT?我不知道該把XSLT中介放在哪裏,也不知道如何構建它。 我應該依賴註冊管理機構嗎?
一個完美的答案可能是失序的代碼,並與XSLT調解員指定的連接建議。
OverTheBitStair
嗨Tharindu馬修,謝謝你的幫助!我現在瞭解跨域問題,並且這不再是問題。 第二部分比我想象的要複雜得多。我試圖按照教程中的說明操作:我按順序內聯定義了CreditProxy內聯WSDL,但不接受序列。 我不明白的另一點是:XSLT文檔在哪裏起作用?此外,教程中顯示的XSL部分是否必須包含在輸出序列中? 你能爲我提取出序列嗎? 感謝您的幫助,我希望我能夠幫助您回到一天 – OverTheBitStair
出序列集! 我在出序列中嵌入了XSLT文檔(也許這是錯誤的)。 從SoapUI進行調用時,ESB引發異常:「發送消息時發生意外錯誤」。 如果有人能告訴我我錯了,我會立即修復! – OverTheBitStair
終端/控制檯上是否存在堆棧跟蹤?這應該給更多的細節。我需要更多的信息來確定錯誤是什麼。 –