2015-05-22 79 views
0

我需要從WSO2 ESB代理服務發送MTOM編碼請求。 我在設置參數:WSO2 ESB從代理服務發送MTOM編碼請求

<property name="enableMTOM" value="true" scope="axis2" type="STRING"/> 
<property name="messageType" value="multipart/related" scope="axis2" type="STRING"/> 

它工作正常。

頁眉請求:

POST /alfresco/cmisws/DiscoveryService HTTP/1.1 
Accept-Encoding: gzip,deflate 
Content-Type: multipart/related; boundary="MIMEBoundary_a62df4c2a350faee72d4e9faf54c07e7135aa06bcf30bf02"; type="application/xop+xml"; start="<[email protected]>"; start-info="text/xml" 
SOAPAction: "urn:mediate" 
Transfer-Encoding: chunked 
Host: 127.0.0.1:8181 
Connection: Keep-Alive 
User-Agent: Synapse-PT-HttpComponents-NIO 

67b 
--MIMEBoundary_a62df4c2a350faee72d4e9faf54c07e7135aa06bcf30bf02 
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml" 
Content-Transfer-Encoding: binary 
Content-ID: <[email protected]> 

但我需要調用我的代理服務的HTTP GET。所以當我需要從代理服務發送MTOM編碼請求時,我在端點定義中設置了附加屬性format =「soap11」。 並且消息不再是MTOM編碼 - 內容類型是text/xml

POST /alfresco/cmisws/DiscoveryService HTTP/1.1 
Accept-Encoding: gzip,deflate 
Content-Type: text/xml 
Transfer-Encoding: chunked 
Host: 127.0.0.1:8181 
Connection: Keep-Alive 
User-Agent: Synapse-PT-HttpComponents-NIO 

678 
--MIMEBoundary_c62df4c2a350faee60d6513af54c07e7035aa06bcf30bf02 
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml" 
Content-Transfer-Encoding: binary 
Content-ID: <[email protected]> 

無需格式= 「soap11」 屬性我'得到錯誤

SequenceMediator Error while building message 
org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,530] 
Message: The element type "body" must be terminated by the matching end-tag "</body>". 
     at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296) 

序列deffinition:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="GetDocIdFromAlfresco"> 

    <property name="enableMTOM" value="true" scope="axis2" type="STRING"/> 
    <property name="messageType" value="multipart/related" scope="axis2" type="STRING"/> 

    <payloadFactory media-type="xml"> 
     . 
     . 
     . 
    </payloadFactory> 

    <call> 
     <endpoint> 
      <address uri="http://localhost:8080/alfresco/cmisws/DiscoveryService" format="soap11"/> 
     </endpoint> 
    </call> 
    <respond/> 
</sequence> 

如何從被稱爲HTTP GET代理服務發送MTOM編碼的請求?

+0

將優化=「mtom」屬性添加到您的地址端點使其工作? – RaviU

+0

不,optimize =「mtom」屬性與設置具有相同的效果。 – tyfyh

回答

0

您不能發送GET請求的多部分,因爲它不應該包含正文,只有一個頭。

+0

是的,那是真的,但我的問題不是關於使用GET請求發送多部分。我需要將我的代理服務調用爲HTTP GET,並且我的代理服務將轉換爲多部分並調用另一個(外部)Web服務。 當我打電話給我的代理服務作爲肥皂ws它工作正常。但是,當我將我的代理服務作爲HTTP GET調用時,我需要在地址元素(端點)中設置format =「soap11」屬性,並且由於內容類型錯誤而不再工作。 – tyfyh

0

我以前遇到過這樣的情況:似乎ESB不允許創建一個啓用mtom的get-request,因爲沒有內容給mtom-ifie。但對於CMIS,您確實需要:CMIS規範指定所有請求(也包括GET請求)都應該進行編碼。

最後,我通過創建一個自定義介體來解決這個問題,它可以通過OpenCMIS java api與所有CMIS進行聯繫。

+0

我正在使用接收帶有附件的SOAP消息的代理; SwA的。但是我無法在連線日誌中看到附加文件的二進制數據。你可以提供一些將SwA發送到代理並將其存儲到jms商店的想法 –