Я использую apache CXF для демонстрации веб-сервиса. При чтении имени файла на китайском языке из восходящего потока (SOAP пользовательский интерфейс на локальном языке) невозможно прочитать точные китайские символы. Это дает имя файла как '° U' ° U123.pdf. Я пробовал со всеми кодировками, но не повезло. Для других англоязычных sh именных вложений проблем нет, их можно правильно читать.
Из soap ui я отправляю кодировку UTF-8, а при чтении java я использовал то же самое. byte [] b = имя_приложения.getBytes (StandardCharsets.UTF_8); Строка attachName = новая строка (b, StandardCharsets.UTF_8.name ());
`Ниже мой код перехватчика.
public void handleMessage(SoapMessage message) throws Fault {
logger.info("Handle Message for attachments ");
BindingOperationInfo bop = message.getExchange().getBindingOperationInfo();
if (bop == null) {
return;
}
logger.info("binding info "+bop.getBinding());
if (bop.isUnwrapped()) {
bop = bop.getWrappedOperation();
}
if (null == message.getAttachments() || message.getAttachments().isEmpty() ){
return;
}
Iterator<Attachment> iter = message.getAttachments().iterator();
Collection<Attachment> attchments = message.getAttachments();
logger.info("message get attachments size : "+attchments.size());
int attachmentCount=0;
Map<String, DataHandler> attachmentMap= AttachmentUtil.getDHMap(attchments);
logger.info("Map<String, DataHandler> "+attachmentMap.size());
try{
while (iter.hasNext()){
Attachment attachment = iter.next();
attachmentCount++;
}
}
}