Я могу полностью прочитать пост-запрос (заголовки + необработанное тело), используя com.sun.net.httpserver.HttpServer
с HttpHandler для него.
Но я не могу сделать то же самое, используя javax.xml.ws.WebServiceProvider
Я могу прочитать заголовки, но мне нужны необработанные данные тела в запросе, будь то простой текст, XML или байты данных.InputStreamReader будет в порядке.
@ServiceMode(value = javax.xml.ws.Service.Mode.MESSAGE)
@WebServiceProvider
@BindingType(value = HTTPBinding.HTTP_BINDING)
public class MyRestHandler
implements Provider<Source> {
@Resource
protected WebServiceContext wsContext; // injected
public Source invoke(Source source) {
/* source happens to be null except for text/xml BODY type
* in the incoming request.
* In this case, source is a SAXSource*/
}
}
Приложение (после наблюдения Питера Кнего)
В Java Web Services страницы 126-138, автор представляет пример веб-сервиса RESTfulгде используется JAX-WS:
@ServiceMode(value = javax.xml.ws.Service.Mode.MESSAGE)
@WebServiceProvider
@BindingType(value = HTTPBinding.HTTP_BINDING)
public class RestfulTeams
implements Provider<Source> { ... }
Даже на странице 136-137 он расширяет его для поддержки метода POST, получая доступ к телу запроса.Понятно, что он работает с классами библиотеки JAX-WS, потому что он использует xml в запросе тела.Теперь я понимаю ваше удивление, и почему source
всегда нулевой, но для текстовых / xml тел.Действительно, самым простым способом было использование библиотеки JAX-RS.