Учитывая пример «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 ошибок нет. Как можно отладить такое поведение?
Как вы отлаживаете публикацию конечных точек CXF?
Ответы (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, с некоторыми стратегически расположенными точками останова, которые вы сможете понять, что происходит.
Попробуйте перейти на Equinox вместо установленного по умолчанию Felix. В версии 2.4.3 есть ошибка, заключающаяся в том, что она плохо работает с Феликсом. В качестве альтернативы теперь доступен CXF 2.4.4, который также должен это исправить.
Взгляните на эту проблему, которую я зарегистрировал на этой неделе: 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) и устранило мое состояние гонки при загрузке.