Tôi đang cố đăng một tài nguyên JAX-RS bằng cách sử dụng cơ chế Dịch vụ/Công văn. Vấn đề là loại nội dung của yêu cầu gửi bị khóa đến text/xml
. Tôi không thể thấy cách thay đổi điều này thành một loại loại khác, ví dụ: application/xml
.Cài đặt Yêu cầu Công văn JAX-WS Loại Nội dung
Dịch vụ web RESTfull chỉ tiêu thụ application/xml
và application/json
. Đây là mã tôi sử dụng:
public static void main(String[] args) {
QName qName = new QName("GREETINGS");
Service service = Service.create(qName);
service.addPort(qName, HTTPBinding.HTTP_BINDING, "http://localhost:8081/gf-ws-1/resources/greetings");
// change headers of the outgoing request
Map<String, Object> headers = new HashMap<String, Object>();
headers.put("Content-Type", Arrays.asList(new String[] {"application/xml"}));
headers.put("Accept", Arrays.asList(new String[] {"zoo"}));
headers.put("foo", Arrays.asList(new String[] {"bar"}));
Dispatch<Source> dispatch = service.createDispatch(qName, Source.class, Service.Mode.PAYLOAD);
dispatch.getRequestContext().put(MessageContext.HTTP_REQUEST_METHOD, "POST");
dispatch.getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS, headers);
dispatch.invokeOneWay(new StreamSource(new StringReader("<?xml version='1.0' encoding='UTF-8'?><greeting><value>Hello World!</value></greeting>")));
// get the response code: [HTTP/1.1 415 Unsupported Media Type] because of content type
System.out.println(((Map<String, Object>) dispatch.getResponseContext().get(MessageContext.HTTP_RESPONSE_HEADERS)).get(null));
}
Tiêu đề Accept
được sửa đổi để zoo
, foo
tiêu đề được thêm với giá trị bar
, nhưng Content-Type
vẫn không thay đổi. Tôi nghĩ rằng tôi có thể sử dụng một bộ lọc và sửa đổi các Content-Type
dựa trên một số điều kiện, hoặc thậm chí dựa trên tiêu đề foo nhưng điều này có vẻ truy cập trực quan.
Dưới đây là tất cả các tiêu đề của các yêu cầu:
POST /gf-ws-1/resources/greetings HTTP/1.1
Accept: zoo
Content-Type: text/xml
foo: bar
User-Agent: Metro/2.2.0-1 (tags/2.2.0u1-7139; 2012-06-02T10:55:19+0000) JAXWS-RI/2.2.6-2 JAXWS/2.2 svn-revision#unknown
Host: localhost:8080
Connection: keep-alive
Content-Length: 86
Any help is appreciated.