CXF и Google Guice с использованием JAX-RS + JAX-WS - PullRequest
7 голосов
/ 07 июня 2011

Я хотел бы интегрировать CXF с Google Guice.Я уже использую Guice в своем проекте, и я хочу избежать добавления дополнительных зависимостей.

CXF был моим выбором, потому что одним из требований является предоставление интерфейса XML, JSON, JSONP и SOAP пользователямсервисы без дублирующего кода (сейчас у нас есть SOAP-специфичные классы, для XML мы используем Struts и для JSON мы написали свои собственные парсеры, я знаю, я тоже чувствую себя грязно).

В любом случае, afaik , CXF может выполнить это требование, поэтому мне кажется, что я застрял с CXF.

Любые идеи или указатели или советы о том, как интегрировать Guice сCXF?Я думал о расширении класса CXFNonSpringJaxrsServlet и взломал Guice, но мне почему-то кажется, что я буду делать то, что уже сделал кто-то другой.

Ответы [ 3 ]

4 голосов
/ 08 июня 2011

В CXF 2.4.x CXF больше не использует Spring для внутренней настройки.Таким образом, вы можете сделать что угодно без Spring.

Части конфигурации, безусловно, являются проблемой.Тем не менее, все весенние настройки - это просто тонкие обертки над CXF API.Таким образом, вы можете настроить практически все через API.Возможно, вам просто нужно еще немного покопаться.

Например, в CXF 2.4 мы начали поддерживать использование Blueprint вместо Spring в OSGi.Для поддержки чертежа не требуется ничего из Spring, но он смоделирован на основе этого.

3 голосов
/ 22 ноября 2011

Вот что я использовал (cxf-2.5.0).

@Singleton
public class WebServiceServlet extends CXFNonSpringServlet {
    private static final long serialVersionUID = 1L;
    private final SamaService samaService;

    @Inject
    public WebServiceServlet(SamaService samaService) {
        this.samaService = samaService;
    }

    @Override
    protected void loadBus(ServletConfig sc) {
        super.loadBus(sc);
        BusFactory.setDefaultBus(getBus());
        Endpoint.publish("/Data.asmx", samaService);
    }
}
1 голос
/ 07 июня 2011

У тебя проблема.CXF полностью зависит от Spring, поскольку он внутренне конфигурируется Spring и довольно широко использует его возможности.Поэтому я не думаю, что практично пытаться выиграть CXF из Spring, просто чтобы вместо этого вы могли использовать Guice;при минимуме вам придется реплицировать всю конфигурацию с настраиваемыми провайдерами Guice, и она все равно не будет работать (некоторые части CXF используют некоторые веб-слои Spring).

Вы можете попробоватьиспользуя вместо этого стиль JavaConfig Spring для вашего кода.Это в основном похоже на то, что делает Guice (насколько я вижу).Или я полагаю, что вы можете попробовать использовать две отдельные DI-фреймворки в одном приложении ... хотя мне кажется, что это была возможность для "веселого" сбоя.

...