簡體   English   中英

WSO2代理服務“ InSequence”錯誤地發送請求而不是API響應

[英]WSO2 Proxy Service “InSequence” incorrectly sending a request instead of a response for API

我在以下代理的序列中遇到問題:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="AckServiceAPIProxy"
       transports="https,http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <property name="json-xml" value="text/xml" scope="axis2" type="STRING"/>
         <log level="full" category="DEBUG" separator="____:____"/>
         <property xmlns:ns="http://org.apache.synapse/xsd"
                   name="name"
                   expression="//productSearch/productName/text()"
                   scope="default"
                   type="STRING"/>
         <property xmlns:ns="http://org.apache.synapse/xsd"
                   name="size"
                   expression="//productSearch/productSize/text()"
                   scope="default"
                   type="STRING"/>
         <property xmlns:ns="http://org.apache.synapse/xsd"
                   name="colour"
                   expression="//productSearch/productColour/text()"
                   scope="default"
                   type="STRING"/>
         <payloadFactory media-type="xml">
            <format>
               <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
                              xmlns:ack="http://ack.pepkor.org">
                  <soap:Header/>
                  <soap:Body>
                     <ack:productSearch>
                        <ack:productName>$1</ack:productName>
                        <ack:productSize>$2</ack:productSize>
                        <ack:productColour>$3</ack:productColour>
                     </ack:productSearch>
                  </soap:Body>
               </soap:Envelope>
            </format>
            <args>
               <arg xmlns:ns="http://org.apache.synapse/xsd"
                    expression="$ctx:name"
                    evaluator="xml"/>
               <arg xmlns:ns="http://org.apache.synapse/xsd"
                    expression="$ctx:size"
                    evaluator="xml"/>
               <arg xmlns:ns="http://org.apache.synapse/xsd"
                    expression="$ctx:colour"
                    evaluator="xml"/>
            </args>
         </payloadFactory>
         <log level="full" category="DEBUG" separator="____:____"/>
         <send>
            <endpoint key="conf:/ackServiceEpr"/>
         </send>
      </inSequence>
      <outSequence>
         <log level="full" category="DEBUG" separator="____:____"/>
         <property name="messageType"
                   value="application/json"
                   scope="axis2"
                   type="STRING"/>
         <log level="full" category="DEBUG" separator="____:____"/>
         <send/>
      </outSequence>
      <faultSequence/>
   </target>
   <description/>
</proxy>

REST請求:

{ "productSearch":
    {   "productName":      "nike_shirts" ,
        "productSize":      "7",
        "productColour":    "red" 
    }
}

讓我分解一下日志:

    TID: [0] [ESB] [2015-02-03 11:56:14,994] DEBUG {org.apache.synapse.commons.json.JsonStreamBuilder} -  #processDocument. Built JSON payload from JSON stream. MessageID: urn:uuid:0d62c4ad-01b5-4eb5-ae7e-3b3aee762fbf {org.apache.synapse.commons.json.JsonStreamBuilder}

...

    #mediate. Transformed payload format>>> 
<pfPadding>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ack="http://ack.pepkor.org"><soap:Header></soap:Header><soap:Body><ack:productSearch><ack:productName>nike_shirts</ack:productName><ack:productSize>7</ack:productSize><ack:productColour>red</ack:productColour></ack:productSearch></soap:Body></soap:Envelope></pfPadding>

因此,我希望上述消息將發送到Ack服務(在Application Server上),但是,在SEND中介器內部,然后它再次轉換原始請求有效負載(REST),而是將其發送到服務:

<productSearch><productName>nike_shirts</productName><productSize>7</productSize><productColour>red</productColour></productSearch>

服務調用由於沒有名稱空間而失敗,並帶來了錯誤。

發送中介完整日志:

Start : Send mediator {org.apache.synapse.mediators.builtin.SendMediator}
TID: [0] [ESB] [2015-02-03 12:08:34,896] DEBUG {org.apache.synapse.endpoints.EndpointContext} -  Checking if endpoint : AnonymousEndpoint currently at state ACTIVE can be used now? {org.apache.synapse.endpoints.EndpointContext}
TID: [0] [ESB] [2015-02-03 12:08:34,896] DEBUG {org.apache.synapse.endpoints.AddressEndpoint} -  Sending message through endpoint : null resolving to address = https://localhost:9444/services/ProductSearchACKService.ProductSearchACKServiceHttpsSoap12Endpoint/ {org.apache.synapse.endpoints.AddressEndpoint}
TID: [0] [ESB] [2015-02-03 12:08:34,896] DEBUG {org.apache.synapse.endpoints.AddressEndpoint} -  SOAPAction: null {org.apache.synapse.endpoints.AddressEndpoint}
TID: [0] [ESB] [2015-02-03 12:08:34,897] DEBUG {org.apache.synapse.endpoints.AddressEndpoint} -  WSA-Action: null {org.apache.synapse.endpoints.AddressEndpoint}
TID: [0] [ESB] [2015-02-03 12:08:34,897] DEBUG {org.apache.synapse.core.axis2.Axis2FlexibleMEPClient} -  Sending [add = false] [sec = false] [rm = false] [mtom = false] [swa = false] [format = null] [force soap11=false] [force soap12=false] [pox=false] [get=false] [encoding=null] [to=https://localhost:9444/services/ProductSearchACKService.ProductSearchACKServiceHttpsSoap12Endpoint/] {org.apache.synapse.core.axis2.Axis2FlexibleMEPClient}
TID: [0] [ESB] [2015-02-03 12:08:34,898] DEBUG {org.apache.synapse.core.axis2.Axis2FlexibleMEPClient} -  Message [Original Request Message ID : urn:uuid:a451c7d8-b5a9-4474-8bd3-af9a25b65933] [New Cloned Request Message ID : urn:uuid:b0540f15-2094-4c3e-9184-fdc2df2fd491] {org.apache.synapse.core.axis2.Axis2FlexibleMEPClient}
TID: [0] [ESB] [2015-02-03 12:08:34,898] DEBUG {org.apache.synapse.core.axis2.SynapseCallbackReceiver} -  Callback added. Total callbacks waiting for : 1 {org.apache.synapse.core.axis2.SynapseCallbackReceiver}
TID: [0] [ESB] [2015-02-03 12:08:34,900] DEBUG {org.apache.synapse.commons.json.JsonUtil} -  #transformElement. Transformed OMElement. Result: <productSearch><productName>nike_shirts</productName><productSize>7</productSize><productColour>red</productColour></productSearch> {org.apache.synapse.commons.json.JsonUtil}
TID: [0] [ESB] [2015-02-03 12:08:34,901] DEBUG {org.apache.synapse.commons.json.XmlReaderDelegate} -  #XmlReaderDelegate. Setting XMLStreamReader: com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl {org.apache.synapse.commons.json.XmlReaderDelegate}
TID: [0] [ESB] [2015-02-03 12:08:34,902] DEBUG {org.apache.synapse.commons.json.XmlReaderDelegate} -  #getLocalName. old=productSearch, new=productSearch {org.apache.synapse.commons.json.XmlReaderDelegate}
TID: [0] [ESB] [2015-02-03 12:08:34,903] DEBUG {org.apache.synapse.commons.json.XmlReaderDelegate} -  #getLocalName. old=productName, new=productName {org.apache.synapse.commons.json.XmlReaderDelegate}
TID: [0] [ESB] [2015-02-03 12:08:34,903] DEBUG {org.apache.synapse.commons.json.XmlReaderDelegate} -  #getLocalName. old=productName, new=productName {org.apache.synapse.commons.json.XmlReaderDelegate}
TID: [0] [ESB] [2015-02-03 12:08:34,904] DEBUG {org.apache.synapse.commons.json.XmlReaderDelegate} -  #getLocalName. old=productSize, new=productSize {org.apache.synapse.commons.json.XmlReaderDelegate}
TID: [0] [ESB] [2015-02-03 12:08:34,904] DEBUG {org.apache.synapse.commons.json.XmlReaderDelegate} -  #getLocalName. old=productSize, new=productSize {org.apache.synapse.commons.json.XmlReaderDelegate}
TID: [0] [ESB] [2015-02-03 12:08:34,904] DEBUG {org.apache.synapse.commons.json.XmlReaderDelegate} -  #getLocalName. old=productColour, new=productColour {org.apache.synapse.commons.json.XmlReaderDelegate}
TID: [0] [ESB] [2015-02-03 12:08:34,905] DEBUG {org.apache.synapse.commons.json.XmlReaderDelegate} -  #getLocalName. old=productColour, new=productColour {org.apache.synapse.commons.json.XmlReaderDelegate}
TID: [0] [ESB] [2015-02-03 12:08:34,905] DEBUG {org.apache.synapse.commons.json.XmlReaderDelegate} -  #getLocalName. old=productSearch, new=productSearch {org.apache.synapse.commons.json.XmlReaderDelegate}
TID: [0] [ESB] [2015-02-03 12:08:34,905] DEBUG {org.apache.synapse.commons.json.JsonStreamFormatter} -  #writeTo. Wrote JSON payload to output stream. MessageID: urn:uuid:b0540f15-2094-4c3e-9184-fdc2df2fd491 {org.apache.synapse.commons.json.JsonStreamFormatter}
TID: [0] [ESB] [2015-02-03 12:08:34,906] DEBUG {org.apache.synapse.mediators.builtin.SendMediator} -  End : Send mediator

您的代理接收到JSON請求,並且您未為輸出指定任何內容,因此,ESB向您的ack服務發送了JSON請求(請參閱日志跟蹤#writeTo. Wrote JSON payload to output stream. MessageID: urn:uuid:b0540f15-2094-4c3e-9184-fdc2df2fd491 {org.apache.synapse.commons.json.JsonStreamFormatter}

如果要發送SOAP請求,可以在發送之前在端點def(ackServiceEpr)中指定屬性format =“ soap11”或在inSequence中添加屬性:

<property name="messageType" value="text/xml" scope="axis2"/>

在這種情況下,也許您需要設置SOAPAction,請使用標頭中介程序。 如果要設置一個空白:

<header name="Action" value="&quot;&quot;"/>

如果您的ack服務需要純XML,請使用application / xml

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM