2012-12-17 20 views
6

Hizmet/Dağıtım mekanizmasını kullanarak bir JAX-RS kaynağını POST yapmaya çalışıyorum. Sorun, giden isteğin Content-Type öğesinin text/xml olarak kilitlenmesidir. Bunu başka türde bir türe çevirmenin bir yolunu göremiyorum, örneğin application/xml. RESTFull web servisi yalnızca application/xml ve application/json'u tüketir. Bu kullandığım kodudur:JAX-WS Gönderme İsteği ayarı Content-Type

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)); 
} 

Accept başlık foo başlık değerine bar ilave edilir, zoo şekilde modifiye edilir, ancak Content-Type değişmeden kalır. Sanırım bir filtre kullanabilir ve Content-Type'u bazı koşullara veya hatta foo üstbilgisine bağlı olarak değiştirebilirim ama bu sezgisel bir yaklaşım gibi gözüküyor. Herhangi bir yardım takdir

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 

: Burada

isteğin tüm başlıkları bulunmaktadır.

cevap

1

Tüm iletiyi özelleştirmek isterseniz Service.Mode.PAYLOAD yerine Service.Mode.MESSAGE adresini kullanmanız gerekir.

İçerik-Tipi bir iletiyle ilişkili bir özelliktir.