簡體   English   中英

將JSON轉換為Java組件

[英]Mule json to java component

我有這個json對象

data = {    
    "amount": "70",
    "cardNumber": "4222222222222",
    "expiryDate": "1215",
    "currency": "Currency.ISK.alpha" 
}

我想將此json對象更改為Java組件,並使用Java調用各種Java函數。 我在將此json對象轉換為Java組件時遇到問題。 我創建了以下兩個Java類。

@JsonAutoDetect
public class Handpoint {
private String amount;
private String cardNumber;
private String expireDate;
private String currency;

public String getAmount() { return amount; }
public void setAmount(String amount) { this.amount = amount; }

public String getCardNumber() { return cardNumber; }
public void setCardNumber(String cardNumber) { this.cardNumber = cardNumber; }

public String getExpireDate() { return expireDate; }
public void setExpireDate(String expireDate) { this.expireDate = expireDate; }

public String getCurrency() { return currency; }
public void setCurrency(String currency) { this.currency = currency; }

}

public class HandpointService {
public void ProcessPerson(@Payload Handpoint handpoint) {
    String cardNumber = handpoint.getCardNumber();
    cardNumber.toString();
}
}

配置文件很簡單

<flow name="json_to_java_componentFlow1" doc:name="json_to_java_componentFlow1">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081"     path="json" doc:name="HTTP"/>
    <component class="is.threesixtyfive.example.HandpointService" doc:name="Java"/>
</flow>

運行此命令時,出現以下錯誤:

Message               : Failed to transform from "json" to 

"is.threesixtyfive.example.Handpoint"
Code                  : MULE_ERROR-109
--------------------------------------------------------------------------------
Exception stack is:
1. Unrecognized field "expiryDate" (Class is.threesixtyfive.example.Handpoint), not marked as ignorable
 at [Source: java.io.InputStreamReader@26940a2e; line: 1, column: 98] (through reference chain: is.threesixtyfive.example.Handpoint["expiryDate"]) (org.codehaus.jackson.map.exc.UnrecognizedPropertyException)
  org.codehaus.jackson.map.exc.UnrecognizedPropertyException:53 (null)
2. Failed to transform from "json" to "is.threesixtyfive.example.Handpoint" (org.mule.api.transformer.TransformerException)
  org.mule.module.json.transformers.JsonToObject:136 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "expiryDate" (Class is.threesixtyfive.example.Handpoint), not marked as ignorable
 at [Source: java.io.InputStreamReader@26940a2e; line: 1, column: 98] (through reference chain: is.threesixtyfive.example.Handpoint["expiryDate"])
    at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
    at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267)
    at org.codehaus.jackson.map.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:673)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************

任何幫助,將不勝感激

JSON和POJO之間的字段名稱不同。
在JSON中: expiryDate
在POJO中: expireDate

問題來自於以下事實:

  • 入站HTTP端點是request-response因此它將返回響應給調用者,
  • component方法沒有返回值。

Mule使用組件之后的當前消息有效負載(可能是消耗的輸入流)來為入站終結點創建響應並失敗。

如果我添加:

<set-payload value="foo" />

組件之后,錯誤將清除(HTTP客戶端收到“ foo”)。

我認為,做到這一點的一種方法是首先處理轉換部分,方法是使用JSON到Object的轉換器並將其加載到映射引用,然后使用Java Component並將HandpointService類加載並使其可調用,這樣您就可以擁有一個入口你上課。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM