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 的方法是一个伪代码。
我正在开发 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 的方法是一个伪代码。