2012-12-17 20 views
6

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/xmlapplication/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.

Trả lời

1

Bạn phải sử dụng Service.Mode.MESSAGE thay vì Service.Mode.PAYLOAD nếu bạn muốn tùy chỉnh toàn bộ thư.

Loại nội dung là thuộc tính liên quan đến thông báo.

Các vấn đề liên quan