使 bean 参数可选
Making a bean parameter optional
我有以下路由和 bean 从 属性 文件获取消息。在某些消息中,我必须替换消息中的参数。因此,我一直在寻找一种解决方案,无需在 bean 中编写 2 个方法,一个带有参数 (getMessageWithArgs
),第二个不带参数 (getMessage
)。
是否可以通过在路由中使用 DSL 来摆脱 bean 中的 getMessageWithArgs
或使 getMessage
中的参数可选,所以我最后在 bean 中有一个方法?
路线
@Override
public void configure() throws Exception {
from("activemq:queue:1234")
.setHeader("functionId", simple(FUNCTION_ID))
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Message message = exchange.getIn();
message.setHeader("messageId", "notice_1234_error_messageBox_1");
// List<String> arguments = Arrays.asList("Test1", "Test2", "Test3");
// message.setHeader("arguments", arguments);
}
})
.setHeader("message").method("messageBean", "getMessage( ${header.functionId}, ${header.messageId})")
//.setHeader("message").method("messageBean", "getMessageWithArgs( ${header.functionId}, ${header.messageId}, ${header.arguments})")
.log("after calling getMessageWithoutValidation: ${body}");
}
豆子
@Component
public class MessageBean {
public String getMessage(@Header("functionId") String functionId,
@Header("messageId") String messageId) {
//Doing something to get the message
return message;
}
public String getMessageWithArgs(@Header("functionId") String functionId,
@Header("messageId") String messageId,
@Header("arguments") List<String> arguments) {
//Doing something to get the message
return message;
}
}
我认为 Arbitrary Number of Arguments 可能适合你。
http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs
所以 Bean 现在只有一个:
public String getMessageWithArgs(@Header("functionId") String functionId,
@Header("arguments") String... arguments) {
String messageId = arguments[0];
//Doing something to get the message
return message;
}
我不确定是否可以这样,但这可能是一种可以提供帮助的方法..
如果你的目标是只保留一个方法,那么只保留你有所有参数的方法,知道如果 header arguments
没有被设置,它的值将是 null
.
public String getMessage(@Header("functionId") String functionId,
@Header("messageId") String messageId,
@Header("arguments") List<String> arguments) {
if (arguments == null || arguments.isEmpty()) {
// No arguments have been provided
} else {
// Arguments have been provided
}
return message;
}
我有以下路由和 bean 从 属性 文件获取消息。在某些消息中,我必须替换消息中的参数。因此,我一直在寻找一种解决方案,无需在 bean 中编写 2 个方法,一个带有参数 (getMessageWithArgs
),第二个不带参数 (getMessage
)。
是否可以通过在路由中使用 DSL 来摆脱 bean 中的 getMessageWithArgs
或使 getMessage
中的参数可选,所以我最后在 bean 中有一个方法?
路线
@Override
public void configure() throws Exception {
from("activemq:queue:1234")
.setHeader("functionId", simple(FUNCTION_ID))
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Message message = exchange.getIn();
message.setHeader("messageId", "notice_1234_error_messageBox_1");
// List<String> arguments = Arrays.asList("Test1", "Test2", "Test3");
// message.setHeader("arguments", arguments);
}
})
.setHeader("message").method("messageBean", "getMessage( ${header.functionId}, ${header.messageId})")
//.setHeader("message").method("messageBean", "getMessageWithArgs( ${header.functionId}, ${header.messageId}, ${header.arguments})")
.log("after calling getMessageWithoutValidation: ${body}");
}
豆子
@Component
public class MessageBean {
public String getMessage(@Header("functionId") String functionId,
@Header("messageId") String messageId) {
//Doing something to get the message
return message;
}
public String getMessageWithArgs(@Header("functionId") String functionId,
@Header("messageId") String messageId,
@Header("arguments") List<String> arguments) {
//Doing something to get the message
return message;
}
}
我认为 Arbitrary Number of Arguments 可能适合你。
http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs
所以 Bean 现在只有一个:
public String getMessageWithArgs(@Header("functionId") String functionId,
@Header("arguments") String... arguments) {
String messageId = arguments[0];
//Doing something to get the message
return message;
}
我不确定是否可以这样,但这可能是一种可以提供帮助的方法..
如果你的目标是只保留一个方法,那么只保留你有所有参数的方法,知道如果 header arguments
没有被设置,它的值将是 null
.
public String getMessage(@Header("functionId") String functionId,
@Header("messageId") String messageId,
@Header("arguments") List<String> arguments) {
if (arguments == null || arguments.isEmpty()) {
// No arguments have been provided
} else {
// Arguments have been provided
}
return message;
}