最近偶尔在外部订单导入的时候会报
java.lang.Exception: javax.xml.bind.UnmarshalException: unexpected element (uri:”", local:”address”). Expected elements are <{}inventoryTranferDtlDto>,<{}inventoryTransferDto>这种错误,后来发现是由于参数中包含有不可见的非法字符,在重调的时候对参数做下处理就好了:
private static void processUnicode(Object serviceDispatchDto) {
Field[] fields = serviceDispatchDto.getClass().getDeclaredFields();
for (Field field : fields) {
try {
field.setAccessible(true);
Object value = field.get(serviceDispatchDto);
if (value instanceof Collection) {
Collection<?> col = (Collection<?>) value;
for (Object item : col) {
processUnicode(item);
}
} else if (value instanceof String) {
if (value != null) {
value = ((String)value).replaceAll(“[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]“, “[X]“);
field.set(serviceDispatchDto, value);
}
}
} catch (Exception e) {
log.error(“Error while processUnicode”, e);
}
}
}
这些错误的发生是由于一些不可见的特殊字符的存在,而这些字符对于XMl文件来说又是非法的,所以XML解析器在解析时会发生异常,官方定义了XML的无效字符分为三段:
0×00 – 0×08
0x0b – 0x0c
0x0e – 0x1f
解决方法是:在解析之前先把字符串中的这些非法字符过滤掉:
string.replaceAll(“[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]“, “”)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于