Mule升级3.6编译错误

Mule upgrade 3.6 compiler error

我正在开发 mule 3.5.1,当我升级到 mule 3.6 版本时,出现以下 class:

的编译时错误
import org.mule.module.jersey.MuleResponseWriter;
import com.sun.jersey.spi.container.ContainerResponse;


public class GLExportTransformer extends AbstractMessageTransformer {

    public List<GLExport> methodType(@Payload MuleResponseWriter content){
        List<GLExport> glExportList = (List<GLExport>) content;
        System.out.println("Java payload is -->"+glExportList.getClass());
        return glExportList ;
    } 

    @Override
    public Object transformMessage(MuleMessage message, String outputEncoding)throws TransformerException {
        ContainerResponse cr = (ContainerResponse) message.getInvocationProperty("jersey_response");
        List<GLExport> res = (List<GLExport>)cr.getResponse().getEntity();
        System.out.println("Response from QB is -->"+res);
        return res;   
    }

}

<custom-transformer name="StringToNameString" class="com.trinet.qb.utils.GLExportTransformer" doc:name="GL Export Transformer"/> 

编译时错误:

The type org.mule.module.jersey.MuleResponseWriter is not visible

The import com.sun.jersey cannot be resolved

我该如何解决这个问题?

在我的 Anypoint Studio 中显示 Mule3.6 使用所有球衣相关的 jar 使用 2.11 版本的 jar 文件。使用 Java 1.7 版本。

编辑:

这是我的其余组件 (GLExportService):

@POST
@Path("/post")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public List<GLExport> postOperation(@Payload String content) throws ParseException {
    System.out.println("Content from Reporting page-->\n\n"+content+"\n\n");
    JSONParser jsonParser = new JSONParser();
    Object jsonObjectInstance =null;
    try {
        jsonObjectInstance = jsonParser.parse(new StringReader(content));
    } catch (ParseException e) {
        System.out.println(e.getLocalizedMessage());
    }
    // parse json and assign to dto as glExportList
    return glExportList;

这是我的 mule 流:

 <http:inbound-endpoint exchange-pattern="request-response" host="${hostname}" port="${glport}" path="QBJournalExport/QBGLRest" doc:name="HTTP"/>
        <jersey:resources doc:name="REST"> 
            <component class="com.qb.rest.GLExportService"/>
        </jersey:resources> 
<set-session-variable variableName="accessToken" value="#[payload.get(0).get('ACCESS_TOKEN')]" doc:name="Access token"/>
<set-session-variable variableName="accessTokenSecret" value="#[payload.get(0).get('ACCESS_TOKEN_SECRET')]" doc:name="Access Secret"/>
<set-session-variable variableName="realmId" value="#[payload.get(0).get('ACCT_SYSTEM_COMPANY_ID')]" doc:name="Company ID"/>
<set-session-variable variableName="quickbooksClient" value="#[com.qb.utils.QuickbooksUtils.getQuickbooksClient(sessionVars['accessToken'],sessionVars['accessTokenSecret'],'${consumerKey}','${consumerSecret}','${appToken}',sessionVars['realmId'])]" doc:name="QB Client"/>
<custom-transformer name="StringToNameString" class="com.qb.utils.GLExportTransformer" doc:name="GL Export Transformer"/>
<set-payload value="#[com.qb.utils.CreateJournalEntry.createJournalEntry(payload,sessionVars['accessToken'],sessionVars['accessTokenSecret'],'${consumerKey}','${consumerSecret}','${appToken}', sessionVars['realmId'])]" doc:name="Create Journal Entry"/>

尝试将参数类型设为 java.util.Object,然后删除导入。无论如何,您会立即将其转换为 List<GLExport>,因此您似乎不需要该类型。

他们似乎只制作了 class org.mule.module.jersey.MuleResponseWriter 包。

这可能是因为 class 从来都不是 public Mule API 的一部分,或者只是轻微的拼写错误。

总之,就目前的情况,你无能为力。 唯一的 hack 是将转换器和任何引用 org.mule.module.jersey.MuleResponseWriter 的 class 放在名为的包中: org.mule.module.jersey

但这是一个 HACK,我不建议这样做。 我会设法查明是否是故意的,然后让您知道 ;)

我们确实只制作了 MuleResponseWriter 包,但这不是您问题的根源。在 Mule 3.6 中,我们从 Jersey 1.6 升级到了 2.11。 Jersey 2 完全不同,它甚至包括一个从 com.sun.jersey 到 org.glassfish.jersey 的包重命名。您可以在此 post 中找到有关升级的更多信息,包括 link 到 Jersey 的迁移指南:http://blogs.mulesoft.org/mule-3-6-api/

我还是不明白,为什么你需要在你的转换器中访问 ContainerResponse,而不是让你的 jersey 资源直接将消息有效负载设置为列表。

此致

import org.glassfish.jersey.server.ContainerResponse;

public class GLExportTransformer extends AbstractMessageTransformer {

    @Override
    public Object transformMessage(MuleMessage message, String outputEncoding)throws TransformerException {
        ContainerResponse cr = (ContainerResponse) message.getInvocationProperty("jersey_response");
        List<GLExport> res = (List<GLExport>)cr.getEntity();
        return res;   
    }

}

名为 methodType 的方法是一个伪代码。