Как вы отлаживаете публикацию конечных точек CXF?

Учитывая пример «cxf-osgi» из источника предохранителей apache-servicemix-4.4.1-fuse-00-08, созданный с помощью maven 3.0.3, при развертывании его на apache karaf 2.2.4 и CXF 2.4.3 веб-служба никогда не публиковался и никогда не был виден сервлету CXF (http://localhost:8181/cxf/). В журнале karaf ошибок нет. Как можно отладить такое поведение?


person chugadie    schedule 08.11.2011    source источник
comment
Обновление: публикация пакетов с помощью Blueprint XML вместо Spring XML обеспечивает правильную работу CXF. Я почти уверен, что это не проблема 127.0.0.0 и 0.0.0.0 из-за этого. Увеличу логирование и обновлю до cxf 2.4.4   -  person chugadie    schedule 09.11.2011


Ответы (3)


Стоит поднять уровень (уровни) журнала — вы можете сделать это постоянно в etc/org.ops4j.pax.logging.cfg или в консоли с помощью log:set TRACE org.apache.cxf — IIRC покажет некоторую полезную информацию.

Также убедитесь, что он действительно опубликован на localhost/127.0.0.1 — он вполне может быть опубликован на другом интерфейсе, IP-адресе локальной сети, но не на локальном хосте. Попробуйте использовать 0.0.0.0 в качестве адреса, таким образом он будет привязан ко всем доступным интерфейсам.

Поскольку вы используете maven, вы можете загрузить исходный код CXF (легко в Eclipse) и подключить удаленный отладчик к экземпляру Karaf, с некоторыми стратегически расположенными точками останова, которые вы сможете понять, что происходит.

person earcam    schedule 09.11.2011
comment
К сожалению, у меня нет IDE для пошаговой отладки, а логирование не дало никакой полезной информации. - person chugadie; 24.02.2012

Попробуйте перейти на Equinox вместо установленного по умолчанию Felix. В версии 2.4.3 есть ошибка, заключающаяся в том, что она плохо работает с Феликсом. В качестве альтернативы теперь доступен CXF 2.4.4, который также должен это исправить.

person Daniel Kulp    schedule 09.11.2011

Взгляните на эту проблему, которую я зарегистрировал на этой неделе: https://issues.apache.org/jira/browse/CXF-4058

Я обнаружил, что если мой файл beans.xml загружается перед файлом jar пакета cxf, то конечные точки регистрируются с помощью CXF, но не с помощью http-сервиса OSGi. Таким образом, в журналах все выглядит хорошо, но конечные точки никогда не доступны. Это состояние гонки.

Я сделал два обходных пути: 1) в краткосрочной перспективе просто переместите свои собственные jar-файлы позже в порядке загрузки (я использую функции Karaf), чтобы Spring и CXF были полностью загружены до того, как мой beans.xml будет прочитан, и 2) отказаться от Spring и свернуть мой собственный код привязки, основанный на этом подходе: http://eclipsesource.com/blogs/2012/01/23/an-osgi-jax-rs-connector-part-1-publishing-rest-services/

Я только вчера применил решение № 2, и я уже очень доволен им. Это решило все мои проблемы с загрузчиком классов (до того, как мне пришлось вручную добавлять много строк Import-Package, потому что BND не видит ссылок beans.xml) и устранило мое состояние гонки при загрузке.

person Chris Dolan    schedule 28.01.2012