2015-02-24 144 views
2

我工作的騾子3.5.1,當我升級到3.6騾子版本,收到編譯時錯誤爲下面的類:騾子升級3.6編譯器錯誤

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; 

這是我的騾流量:

<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"/> 

回答

2
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; 
    } 

} 

方法是空代碼。

1

嘗試使參數類型java.util.Object,併除去進口。無論如何,你立即將它投射到List<GLExport>,所以你看起來並不需要這種類型。

+0

transformMessage是一個重寫的方法,改變參數會導致編譯器錯誤。 – bekur 2015-02-25 00:38:17

+0

您需要完成的主要任務是根據您從客戶端收到的JSON生成列表。如果您希望客戶端發佈列表的JSON表示,則可以在之前或之後使用只需在postOperation方法中更改參數類型,然後查看球衣是否會爲您進行轉換。 – 2015-02-25 21:03:31

+0

你說在postOperation方法中改變參數類型,看看球衣是否會爲你改變它,改變什麼?我的輸入數據,即字符串內容是字符串格式的json數據 – bekur 2015-02-25 21:57:38

0

看來他們只做了類org.mule.module.jersey.MuleResponseWriter包。

這可能是因爲班級從來不是公共騾API的一部分,或者只是小錯字。

無論如何,因爲它現在是沒有多少,你可以做。 唯一黑客是把變壓器和引用org.mule.module.jersey.MuleResponseWriter名爲包內的任何類: org.mule.module.jersey

但是這是一個黑客,而我不會」建議它。 我會試着找出是否有意爲之,並讓你知道;)

1

我們的確只製作了MuleResponseWriter軟件包,但這不是你問題的根源。在Mule 3.6中,我們從Jersey 1.6升級到了2.11。 Jersey 2完全不同,它甚至包括從com.sun.jersey重命名爲org.glassfish.jersey的包。你可以在這篇文章中找到更多關於升級的信息,包括澤西島移植指南的鏈接:http://blogs.mulesoft.org/mule-3-6-api/

我不明白爲什麼你需要訪問你的變壓器中的ContainerResponse而不是你的球衣資源直接將消息負載設置爲列表。

問候稱爲methodType

+0

我遇到同樣的問題。關於澤西島模塊的舊文檔建議以上述方式使用ContainerResponse「將球衣組件的請求轉換或發送到下一個資源/流程」。查看此頁鏈接的最底部:http://www.mulesoft.org/documentation/display/34X/Jersey+Module+Reference – GarySharpe 2015-02-25 17:52:51

+0

用mule流程和組件更新。輸入是來自一個系統的json數據,該系統調用休息組件併發送/接收來自休息的數據並上傳到基於雲的應用程序 - QuickBooks – bekur 2015-02-25 19:26:46