2013-11-25 3 views
1

multipart/form-data 수신을 기대하는 휴식 서비스를 호출하려고하는데이 문제에 직면하고 있습니다.Mule http : outbound-endpoint + multipart/form-data

검색하는 동안 페이로드를 아웃 바운드 첨부 파일로 이동하고 페이로드를 null로 설정해야한다는 것을 이해했습니다.

<expression-component><![CDATA[ 
     ds = new org.mule.message.ds.StringDataSource(formdata,'payload','multipart/form-data'); 
     dh = new javax.activation.DataHandler(ds); 
     message.outboundAttachments['payload'] = dh; 
    ]]></expression-component>   

    <set-payload value="#[null]" /> 

나는 또한 것을 수행하지만, 오류가있어 :

나는 콘텐츠 유형의 오류 접수 : 메시지 : 메시지에 포함 MIME 타입이 "text/XML", "다중/폼 데이터를 "예상했다.

Obs : 표현식 구성 요소를 사용해야했습니다. 설정 첨부 파일을 사용하는 경우 "null이 아니어야합니다."라는 오류가 표시됩니다.

여기에서 문제는 콘텐츠 유형이므로 메시지 속성을 변형하려고 시도했습니다.

<message-properties-transformer overwrite="true" doc:name="Message Properties"> 
     <add-message-property key="Content-Type" value="multipart/form-data;charset=utf-8"/> 
    </message-properties-transformer>   

그런 다음 나머지 서비스에서 400 오류가 발생했습니다.

나는 multipart의 각 속성 (키 - 값)을 콘텐츠 유형 : 텍스트/일반, 여기 같은 문제로 구분 된 첨부 파일에 넣으려고했습니다.

내 문제는 올바르게 첨부하는 방법입니다. 콘텐츠 유형이 multipart/form-data로 변환되어 성공합니다.

감사합니다. 감사.

HTTP 아웃 바운드 통화 코드 :

<enricher source="#[message.inboundProperties['http.status']]" target="#[variable:out]" doc:name="Message Enricher"> 
     <http:outbound-endpoint exchange-pattern="request-response" method="POST" host="${jbpm.host}" port="${jbpm.port}" path="#[address]" doc:name="HTTP" mimeType="multipart/form-data"> 
      <response> 
       <object-to-string-transformer /> 
      </response> 
     </http:outbound-endpoint> 
    </enricher> 
    <logger message="RESPONSE STATUS - #[variable:out]" level="INFO" doc:name="Logger"/> 
    <set-payload value="needAXml" doc:name="Set Payload"/> 
    <mulexml:object-to-xml-transformer doc:name="Object to XML"/> 

    <mulexml:xslt-transformer maxIdleTransformers="2" maxActiveTransformers="5" doc:name="XSLT"> 
     <mulexml:xslt-text> 
      <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
              xmlns:bpmsws="http://www.arizona.com.br/esb/bpmsws/service/v1_0_0/" 
                  xmlns:bpms="http://www.arizona.com.br/bpms/core/v1_0_0/"> 
       <xsl:param name="responseStatus"/> 

       <xsl:template match="/"> 
        <bpmsws:httpPostResponse> 
         <status xmlns=""><xsl:value-of select="$responseStatus" /></status> 
        </bpmsws:httpPostResponse> 
       </xsl:template> 
      </xsl:stylesheet> 
     </mulexml:xslt-text> 
     <mulexml:context-property key="responseStatus" value="#[variable:out]"/> 

    </mulexml:xslt-transformer> 

답변

3

을 보여줍니다 어떻게 두 개의 필드 값을 가진 멀티 엔티티를 작성하려면 : contentType 그렇지 않으면 뮬에 대한 값을하지 않습니다 지정하지에

<expression-component><![CDATA[ 
    ds = new org.mule.message.ds.StringDataSource('key1','value1','text/plain'); 
    dh = new javax.activation.DataHandler(ds); 
    message.outboundAttachments['key1'] = dh; 

    ds = new org.mule.message.ds.StringDataSource('key2','value2','text/plain'); 
    dh = new javax.activation.DataHandler(ds); 
    message.outboundAttachments['key2'] = dh; 
]]></expression-component> 

<set-payload value="#[null]" /> 

<http:outbound-endpoint exchange-pattern="request-response" 
    method="POST" address="http://localhost:8082/path" /> 

조심 POST에서 다중 부분 경계를 제공 할 수 있어야합니다.

당신은 아웃 바운드 범위에서 Content-Type 메시지 속성이 그것을 제거하는 일 경우 : HTTP 아웃 바운드 엔드 포인트 전에

<remove-property propertyName="Content-Type" /> 

.

: 만

0

내가 노새 런타임 3.5.0로 Anypoint 스튜디오 3.5.2를 사용하고 보완하기 위해, 클래스 org.mule.message.ds.StringDataSource의 생성자의 서명보다는, 다른 org.mule.message.ds.StringDataSource ('key1' 'value1', 'text/plain');

org.mule.message.ds.StringDataSource ('값 1', '키 1', '텍스트/일반')이다;

관련 문제