最近偶尔在外部订单导入的时候会报
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]“, “”)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于