在使用Apache Camel CXF组件时,如果Web服务的请求或响应中出现了非法字符,就会抛出“Invalid character”的异常,导致无法正常调用Web服务。可以通过使用正则表达式来解决这个问题。示例代码如下:
from("cxf:/order?serviceClass=com.example.OrderService")
.process(exchange -> {
String requestXml = exchange.getIn().getBody(String.class);
// 使用正则表达式替换非法字符
String newRequestXml = requestXml.replaceAll("[^\\x09\\x0A\\x0D\\x20-\\uD7FF\\uE000-\\uFFFD\\u10000-u10FFFF]", "");
exchange.getIn().setBody(newRequestXml);
}).to("cxf:/order?serviceClass=com.example.OrderService");
在这段代码中,我们使用了Java中的String的replaceAll方法,将不在指定Unicode编码范围内的字符全部替换成空字符串。这个正则表达式的解释如下: