У меня есть простой Java-интерфейс / реализация, которую я представляю через CXF. У меня есть элемент jaxws в моем конфигурационном файле Spring, например:
<jaxws:endpoint id="managementServiceJaxws"
implementor="#managementService" address="/jaxws/ManagementService" >
</jaxws:endpoint>
Он генерирует WSDL из моего аннотированного интерфейса и предоставляет сервис. Затем, когда я нажимаю http://myhostname/cxf/jaxws/ManagementService?wsdl, я получаю прекрасный WSDL. Внизу в элементе wsdl: service я посмотрю
<soap:address location="http://myhostname/cxf/jaxws/ManagementService"/>
Однако, через некоторое время или около того, без перезапуска приложения, нажатие на тот же самый URL приводит к:
<soap:address location="http://localhost/cxf/jaxws/ManagementService"/>
Это вызывает ряд проблем, но я действительно хочу это исправить. Прямо сейчас есть определенный клиент для веб-сервиса, который устанавливает конечную точку в localhost; потому что он работает на той же машине. Возможно ли, что wsdl регенерируется и кэшируется, а затем выставляет версию 'localhost'? Частично я не знаю точный механизм, с помощью которого можно перейти от запроса? Wsdl в CXF к ответу. Кажется почти уверенным, что он извлекает какую-то кэшированную версию, учитывая, что он должен определять адрес, задавая сервлет-контейнер (Jetty).
Для справки: я знаю, что решение с ограничением по времени использует имя хоста на клиенте и следит за тем, чтобы псевдоним был на месте, чтобы он проходил через петлю.
EDIT:
Для справки, я подтвердил, что если я запускаю свое приложение и сначала нажимаю на него через localhost, то при запросе wsdl через имя хоста адрес отображается как localhost. И наоборот, первое попадание по имени хоста заставляет запросы localhost показывать имя хоста. Очевидно, что здесь что-то кешируется.
EDIT2:
Я думаю, что проблема может быть в OsgiServletController, так как есть метод:
private synchronized void updateDests(HttpServletRequest request) {
if (disableAddressUpdates) {
return;
} //snip
Но я не вижу способа подтвердить, что проблема в том, что это логическое значение установлено в true или как я мог бы его обновить!