Tôi muốn định cấu hình ứng dụng khách JAX-WS của mình để gửi tin nhắn trong ISO-8859-1. Hiện tại UTF-8 được sử dụng.Làm cách nào để thiết lập ứng dụng khách JAX-WS sử dụng ISO-8859-1 thay vì UTF-8?
Dưới đây là những gì khách hàng cố gắng để làm:
Map<String, Object> reqContext = ((BindingProvider) service).getRequestContext();
Map httpHeaders = new HashMap();
httpHeaders.put("Content-type",Collections.singletonList("text/xml;charset=ISO-8859-1"));
reqContext.put(MessageContext.HTTP_REQUEST_HEADERS, httpHeaders);
Nhưng thiết lập này được bỏ qua và tcpmon cho thấy sau được nhận bởi máy chủ:
POST /service/helloWorld?WSDL HTTP/1.1
Content-type: text/xml;charset="utf-8"
Soapaction: "helloWorld"
Accept: text/xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
User-Agent: Oracle JAX-WS 2.1.5
Host: 1.1.1.1:8001
Connection: keep-alive
Content-Length: 4135
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelopexmlns:S="http://schemas.xmlsoap.org/soap/envelope/">...
Vì vậy, các thiết lập được overriden và UTF-8 được sử dụng, cả trong tiêu đề HTTP và trong thông báo XML. Dịch vụ được định nghĩa bởi WSDL được mã hóa bằng UTF-8.
Q: Tôi có nên xác định lại dịch vụ WSDL được mã hóa theo ISO-8899-1 và sau đó tạo lại ứng dụng khách không? Hoặc, là nó mà tôi chỉ không thiết lập các tiêu đề HTTP đúng cách?
Khách hàng/phiên bản JDK nào khách hàng sử dụng? Tôi có thể nhớ một lỗi trong một triển khai JAX-WS cũ (1.6.0.1 hoặc hơn) ... – home
Máy khách đang chạy Java 1.6.0_29, thư viện JAX-WS được sử dụng là Weblogic "Oracle JAX-WS 2.1.5". Tôi vừa thử nghiệm JAXWS đi kèm với JDK 6, "JAX-WS RI 2.1.6" và kết quả là giống nhau –