3

ファイルと2つの入力を含むフォームをMuleのインバウンドエンドポイントに送信しようとしています。カスタムプロセッサがあり、フローは次のように定義されています。

<custom-processor class="informa.app.classifier.transformers.MyfileUploadProcessor" name="fileuploadprocessor"></custom-processor>
<flow name="httpTest">
    <http:inbound-endpoint
                    address="http://tango.privada.informa:11002/services/fileupload"></http:inbound-endpoint>
    <processor ref="fileuploadprocessor"/>
</flow>

クラスMyfileUploadProcessor:

パブリッククラスMyfileUploadProcessorはMessageProcessorを実装します{

    @Override
    public MuleEvent process(MuleEvent event) throws MuleException {
        // TODO Auto-generated method stub
        String response = "success";

        MuleMessage mulemessage = event.getMessage();

        String countryCode = mulemessage.getInboundProperty("username");
        String sourceCode = mulemessage.getInboundProperty("password");
        InputStream input = (InputStream) mulemessage.getPayload();

...

そしてテストするために、簡単なhtml:

<form action="http://tango.privada.informa:11002/services/fileupload" method="post"
enctype="multipart/form-data">
   <p>Country Code :<input type="text" name="username" /></p>
   <p>Source Code :<input type="text" name="password" /></p>
   <p>File :<input type="file" name="payload" /></p>
   <p><input type="submit" name="submit" value="submit" />
<input type="reset" name="reset" value="reset"></p>
</form>

</body>
</html>

問題は、mulemessageのペイロードからファイルを作成できず、フォームの入力の値を取得する方法がわからないことです...何が間違っているのでしょうか。手がかりはありますか?

前もって感謝します

4

2 に答える 2

3

org.mule.transport.http.HttpMultipartMuleMessageFactoryHTTP POSTを処理するには、を使用するようにHTTPコネクタを構成する必要がありますmultipart/form-data

このために、構成に以下を追加します。

<http:connector name="httpConnector">
    <service-overrides messageFactory="org.mule.transport.http.HttpMultipartMuleMessageFactory"/>
</http:connector>

これが適切な場所にあると、payloadフォームフィールドはMuleメッセージのストリーミングペイロードになり、他のすべてのフィールド値はインバウンド添付ファイルになります(すべてのパーツヘッダーはインバウンドヘッダーになります)。

于 2013-03-28T21:49:40.330 に答える
1

最初はhttpConnectorをhttpトランスポート参照として使用する必要があることに気づかなかったいくつかの追加アイテムの価値についてのDavid(私にとっては命の恩人!! cudos david)からの素晴らしい回答

<http:connector name="httpConnector" doc:name="HTTP\HTTPS">
        <service-overrides
            messageFactory="org.mule.transport.http.HttpMultipartMuleMessageFactory" />
    </http:connector>

<flow name="AttachmentTestFlow1" doc:name="AttachmentTestFlow1">        
    <http:inbound-endpoint connector-ref="httpConnector" doc:name="HTTP" exchange-pattern="request-response" host="localhost" port="8081"/>
    <component class="ProcessAttachment" doc:name="Java" />
</flow>

jmeterを使用して、最初の2つの添付ファイルを追加してアップロードできました。

  • パラメータ名は「payload」で、mime-type = "multipart/form-data"です。
  • 2つ目は、「添付ファイル」などのユーザー固有の名前です。

その後、これは通常のラバの流れ、またはコンポーネントによって処理することができます

public String process(@Payload String payload, @InboundAttachments("*") Map<String, DataHandler> headers  ) throws IOException{     
    InputStream in  = headers.get("attachment").getDataSource().getInputStream();   
于 2013-07-26T19:24:37.600 に答える