Fast Infoset не работает для JAXWS Glassfish Metro
Мы создаем высокопроизводительную серверную систему, которая будет отправлять и извлекать байт различного размера [], службу кэширования. Привязки имеют решающее значение для этого проекта, поэтому мы тестировали SOAP, REST и Fast Infoset и использовали клиент Memcached в качестве базового уровня.
Наши тесты не выявили разницы между временем прохождения туда-обратно клиентов SOAP и FastInfoset. Мои сообщения не содержат информацию заголовка, указывающую на приложение /fastinfoset. Из того, что я вижу, Fast Infoset не включается, потому что клиент не отправляет правильную информацию, потому что методика в руководстве Metro неверна или я что-то упустил.
Я делаю что-то неправильно? Есть ли лучшее решение?
На этом сайте есть решение для той же проблемы на CXF, но я не могу его использовать, я использую Metro. Пожалуйста, не ссылайтесь на это решение для меня.
Вот руководство по метро о том, как это должно работать:
- Glassfish 3.1.2
- JDK 1,7
- Метро 2.2
Два клиента в моем тесте одинаково принимают одну строку кода.
((javax.xml.ws.BindingProvider) _port).getRequestContext().put(JAXWSProperties.CONTENT_NEGOTIATION_PROPERTY, "pessimistic");
Код клиента для клиента быстрого информационного набора выглядит следующим образом. (Просто вычтите вышеприведенную строку, и вы узнаете, как выглядит наш мыльный клиент.) Приведенное выше руководство указывает, что вышеуказанная строка - это все, что нам нужно, чтобы наш клиент JAXWS мог использовать FastInfoset.
public EpCacheFiClient(long period) {
try {
_service = new EpCacheService(new URL(WSDL_URL_KEY), QNAME);
_port = _service.getEpCachePort();
((javax.xml.ws.BindingProvider) _port).getRequestContext().put(JAXWSProperties.CONTENT_NEGOTIATION_PROPERTY, "pessimistic");
if (_port != null) {
System.out.println("Found service port!");
} else {
System.exit(128);
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
В ITU есть учебное пособие, посвященное деталям протокола на уровне сообщений. В нем есть пример того, как должны выглядеть мои заголовки.
POST /AlertPort HTTP/1.1
Content-Type: application/fastsoap; action="urn:alert"
Accepts: application/fastsoap, application/text+xml
Content-Length: ....
... sequence of octets …"
Учебное пособие с 2005 года, мы знаем, что поле HTTP-заголовка Content-Type изменилось, оно должно быть application/fastinfoset в соответствии с приведенной выше ссылкой на руководство по метро. Это свидетельствует о том, что я не испытываю ошибку, а скорее есть проблема с документацией. Надеюсь, я узнаю от добрых экспертов на этом форуме.
Вот как выглядят мои сообщения. Я отрубил бинарный файл. Обратите внимание на отсутствие каких-либо указаний службе о том, что для продолжения связи с этим клиентом следует использовать FastInfoset. Используя Wireshark, я могу однозначно сказать, что ни одно из сообщений, отправленных на мой сервер, не содержало информации заголовка, указывающей на FastInfoset.
POST /epcache/EpCacheService HTTP/1.1
Accept: text/xml, multipart/related
Content-Type: text/xml;charset=utf-8
SOAPAction: "urn:ProcessEpCacheSet"
User-Agent: JAX-WS RI 2.2.4-b01
Host: linux-xxxxx:8080
Connection: keep-alive
Я также хотел отметить, что я могу поместить все, что я хочу, в контекст запроса BindingProvider, и он будет отображаться в заголовке при каждом запросе, поэтому в моем тесте нет проблем с созданием _port.
1 ответ
В конце концов я обнаружил, что происходит, это были библиотеки. Рекомендуемые команды и техника сработали бы, если бы я использовал правильную строку. К сожалению, документация не различает внутренние и внешние библиотеки и использует устаревшее перечисление.
Короче говоря, если вы используете jax-ws, встроенные в JDK, используйте это свойство [1]; в противном случае попробуйте [2].
[1] com.sun.xml.internal.ws.client.ContentNegotiation [2] com.sun.xml.ws.client.ContentNegotiation
Все, что нужно, это знать магическое заклинание.
Пожалуйста, прочитайте следующее решение на форуме Glassfish, где я также разместил этот вопрос. http://home.java.net/forum/topic/glassfish/glassfish/fast-infoset-comparison-soap-not-faster