mule flow创建和下载文件

mule flow创建和下载文件,mule,Mule,若我在mule流中有一些java或rest组件,mule不会创建和下载文件 <flow name="qbiif" doc:name="qbiif"> <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="9192" doc:name="HTTP" path="QBRest"/> <jersey:res

若我在mule流中有一些java或rest组件,mule不会创建和下载文件

     <flow name="qbiif" doc:name="qbiif">
            <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="9192" doc:name="HTTP" path="QBRest"/>
            <jersey:resources doc:name="REST">
                <component class="com.trinet.rest.RestIntegration"/>
            </jersey:resources>
            <component doc:name="Java">
                <singleton-object class="com.mycompany.iif.java.AppendData"/>
            </component>
            <set-payload value="Hello" doc:name="Set Payload"/>
            <set-property propertyName="mimeType" value="text/csv" doc:name="Property"/>
            <set-property propertyName="Content-Disposition" value="attachment;filename=QuickbooksAccountsJava.iif" doc:name="Property"/>
            <logger message="final output==#[payload]" level="INFO" doc:name="Logger"/>  
</flow>
我正在windows中使用Chrome Rest客户端。我得到的答复如下:


您的方法存在设计缺陷

com.trinet.rest.RestIntegration
应该是创建预期响应的位置:

  • 修复
    @生成
    ,因此它返回
    text/csv
  • appendData
    的逻辑移动到
    postOperation
  • post operation
    中设置
    Content Disposition
    标题
因此,除了Jersey资源之外,根本不需要任何额外的消息处理器,即您的流应该是这样的:

<flow name="qbiif" doc:name="qbiif">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="9192" doc:name="HTTP" path="QBRest"/>
    <jersey:resources doc:name="REST">
        <component class="com.trinet.rest.RestIntegration"/>
    </jersey:resources>
</flow>


我已尝试复制您的场景,并成功创建和下载了该文件。。问题可能在Java类中。。您是否能够共享它以便能够检测问题生成正确的响应应该是
com.trinet.rest.RestIntegration
的工作。实际上,应该没有理由在
jersey:resources
之后添加额外的组件或消息处理器。还有一个输入错误:您在
应该是
@DavidDossot更新了我的代码集操作后的内容处置标题。如何在Rest类文件中设置?我是否在Java中同时设置mimetype和内容类型更好?否:继续使用
@products
作为响应内容类型。我添加了return-response.ok(res).header(“内容处置”,“附件;文件名=QuickBookAccountsjava.iif”).build();制作@products(“text/csv”),在mule中只有rest调用。但文件仍然无法下载。请您粘贴一个
curl-v
交互,好吗?我希望看到确切的响应,包括标题。问题是Chrome Rest客户端没有显示下载文件及其路径,在CURL中找到了它
@Path("/")
public class RestIntegration {

    @POST
    @Path("/post/{id1}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response postOperation(@PathParam("id1")String id, String cont) throws Exception{
                return Response.status(200).entity(cont).build();
    }
    }



Java Component




 public class AppendData implements Serializable {
        public String appendData(@Payload String str) throws IOException, ParseException{
            JSONParser jsonParser = new JSONParser();
            Object jsonObjectInstance = jsonParser.parse(new StringReader(str));
            StringBuilder stringBuilder = new StringBuilder();
            buildHeaders(stringBuilder);
            if (jsonObjectInstance instanceof JSONObject) {
                JSONObject jObject = (JSONObject) jsonObjectInstance;
                buildContent(stringBuilder,jObject);
            }else{
                JSONArray jsonArray = (JSONArray) jsonObjectInstance;
                for(int i=0; i<jsonArray.size(); i++ ){
                    JSONObject jsonObject= (JSONObject) jsonArray.get(i);
                    buildContent(stringBuilder,jsonObject);
                }
            }
            buildFooter(stringBuilder);
            return (stringBuilder.toString());
        }
    private void buildContent(StringBuilder stringBuilder, JSONObject jsonObject) {
            stringBuilder.append("ANS"+"\t");
    }
    private void buildHeaders(StringBuilder stringBuilder) {
            stringBuilder.append("!TRNS \t Account \t Date \t\t Amount \t Description \t Memo \n");
        }
        private void buildFooter(StringBuilder stringBuilder) {
            stringBuilder.append("ENDANNS");
        }
    }
<flow name="qbiif" doc:name="qbiif">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="9192" doc:name="HTTP" path="QBRest"/>
    <jersey:resources doc:name="REST">
        <component class="com.trinet.rest.RestIntegration"/>
    </jersey:resources>
</flow>
@Consumes(MediaType.APPLICATION_JSON)
@Produces("text/csv")
public Response postOperation(@PathParam("id1")String id, String cont) throws Exception{
        String res = appendData(cont); // become private method
        return Response.ok(res).header("Content-Disposition", "attachment;filename=QuickbooksAccountsJava.iif").header("mimeType", "text/csv").build();
<flow name="qbiif" doc:name="qbiif">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="9192" doc:name="HTTP" path="QBRest"/>
    <jersey:resources doc:name="REST">
        <component class="com.trinet.rest.RestIntegration"/>
    </jersey:resources>
</flow>