嗨,我正在尝试从单个消息中提取多条消息,并使用拆分器元素将这些消息拆分为多条消息。但是我的拆分器抛出以下错误
2015-10-26 15:09:06,257[[ACTIVE]execute thread:' 0 ' for queue:' WebLogic . kernel . default(self-tuning)']ERROR org . spring framework . web . Context . Context loader-Context初始化失败org . spring framework . beans . factory . beancreationexception:创建名为' org . spring framework . integration . handler . messagehandler chain # 1 '的bean时出错:无法创建内部bean ' org . spring framework . integration . config . splitterfactorybean # 20e 2嵌套异常为org . spring framework . beans . factory . beancreationexception:创建名为“org . spring framework . integration . config . splitterfactorybean # 20 e2ef 61”的bean时出错:FactoryBean在对象创建时引发异常;嵌套异常为Java . lang . illegalargumentexception:发现方法匹配的参数类型[class java.lang.String]不明确:[public Java . util . list com . sales order . payment . util . poslogtoisellerequests . poslogtransformer(Java . lang . string),public Java . util . list com . sales order . payment . util . poslogtoisellerequests . split(Java . util)],位于org . spring framework . beans . factory . support . beandefinitionvalueresolver . resolveinnerbean(bean definitionvalue
分路器块:
<si:splitter>
<bean
class="com.ikea.pip.salesorder.payment.util.PoslogToIsellRequests"
p:mapTaxRateCategory="${common.map.tax.rate.category}" p:buCode="${common.country.code.iso}"
p:sourceRegion="${common.isell.order.source}" p:countryCode ="${common.country.code.iso}" />
</si:splitter>
类的 Java 代码:
public class PoslogToIsellRequests implements Splitter {
private static final Logger LOG = LoggerFactory
.getLogger(PoslogToIsellRequests.class);
private static final String ORDER= "SpecialOrderNumber";
private static XMLInputFactory inputFactory;
private final SimpleXslt transformPoslogXslt = new SimpleXslt(
"xsl/POSLogToAddPaymentRequest.xsl");
private String sourceRegion;
private String buCode;
private String mapTaxRateCategory;
private String countryCode;
static {
inputFactory = XMLInputFactory.newInstance();
inputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE,
Boolean.TRUE);
}
public void setCountryCode(String countryCode) {
this.countryCode = countryCode;
}
@Override
public List<String> split(List<String> xmlToSplit) {
List<String> splittedPayload = new ArrayList<String>();
for (String xml : xmlToSplit) {
splittedPayload.addAll(split(xml));
}
return splittedPayload;
}
public void setSourceRegion(String sourceRegion) {
this.sourceRegion = sourceRegion;
}
public void setBuCode(String buCode) {
this.buCode = buCode;
}
public void setMapTaxRateCategory(String mapTaxRateCategory) {
this.mapTaxRateCategory = mapTaxRateCategory;
}
/* @param xmlToSplit
* @return
* @throws Exception
*/
@Override
public List<String> split(String xmlToSplit) {
List<String> resultSet=new ArrayList<String>();
resultSet=poslogTransformer(xmlToSplit);
return resultSet;
}
public List<String> poslogTransformer(String xmlToSplit) {
List<String> resultSet=null;
Set<String> orderNos=new HashSet<String>();
String payload = xmlToSplit;
try{
orderNos= parseOrderNos(payload);
resultSet=new ArrayList<String>();
}
catch (XMLStreamException e) {
LOG.warn("Could not parse Transaction");
}
for(String orderno:orderNos){
Map<String, String> parameters = createParams(orderno);
String result = transformPoslogXslt.transform(payload,
parameters);
resultSet.add(result);
}
return resultSet;
}
private Map<String, String> createParams(String orderNo) {
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("sourceRegion", sourceRegion);
parameters.put("buCode",buCode );
parameters.put("mapTaxRateCategory",mapTaxRateCategory );
parameters.put("orderNo",orderNo );
parameters.put("countryCode", countryCode);
return parameters;
}
private Set<String> parseOrderNos(String payload) throws XMLStreamException {
Set<String> orders=new HashSet<String>();
XMLEventReader reader;
reader = inputFactory.createXMLEventReader(new StringReader(payload));
String currentElement = "";
try {
while (reader.hasNext()) {
XMLEvent event = reader.nextEvent();
if (event.isStartElement()) {
currentElement = event.asStartElement().getName()
.getLocalPart();
} else if (currentElement.equals(ORDER)
&& event.isCharacters()) {
String value = event.asCharacters().getData();
if(StringUtils.isNotBlank(value)){
orders.add(value);}
}
}
} finally {
reader.close();
}
return orders;
}
}
拆分器接口只包含两个拆分方法。Spring集成中是否不允许方法重载?
一个额外的查询,我是否可以将字符串输入作为参数而不是消息?
如果您没有明确地标识拆分器中的方法名,框架将检测多个方法候选项,并且不能确定调用哪个方法。
因此:
找到用于方法匹配的不明确的参数类型[class Java . lang . string]:[public Java . util . list com . sales order . payment . util . poslogtoisellerequests . poslogtransformer(Java . lang . string),public Java . util . list com . sales order . payment . util . poslogtoisellerequests . split(Java . util . list)]
除非指定< code>method="split",否则POJO方法匹配会考虑所有公共方法。
如果添加该值,框架将调用相应的拆分
方法,具体取决于入站消息的有效负载类型。
我没有正确安装吗?我忽略了什么?
成功登录后,使用定义用户角色重定向,返回未定义路由的错误。 未定义InvalidArgumentException路由[列表活动]。 功能: 我的web.php文件代码 我的路由管理\web.php文件代码 这是我的控制器代码
问题内容: 我创建了一个单元工厂包装器,以启用JavaFX表单元的自定义配置。请参见下面的代码。 这个cellfactory包装器通常可以在我所有的表视图中导航。但是,一旦我在系统中执行其他功能,例如添加新记录,编辑记录等,就会引发以下错误。 我似乎无法弄清楚为什么这个包装器认为我的CML类中包含空值。任何人对于为什么会抛出此Null Pointer异常有任何想法? 问题答案: 不能保证在第一次调
我无法确定问题的原因,我不知道是分析器无效还是elasticsearch甚至找到了autocomplete-analyser.json文件。我该怎么解决这个?
"CATCH"应该严格地在"扔"之后叫吗?" 例1: 错误: 找不到方法“接收器”:没有方法缓存,也没有^在/tmp/739536251/main块中查找_方法。pl6第11行 例2: 无误
这是我目前得到的。 这是我创建的过滤器