Как выбрать CXF на Metro на Glassfish - PullRequest
6 голосов
/ 14 января 2010

У меня следующая проблема (о которой там сообщил кто-то еще) при запуске моего корпоративного приложения под Glassfish. Под Jetty работает нормально.

javax / xml / ws / spi / Provider упоминает создание ресурса META-INF / services / javax.xml.ws.spi.Provider, но он уже поставляется с CXF и создает дополнительный ресурс файл не решает эту проблему под Glassfish.

Кто-нибудь знает, как обеспечить сбор CXF в GlassFish?
(Я использую мультимодульный проект Maven с зависимостью CXF 2.2.5)

Спасибо!
Тим


РЕДАКТИРОВАТЬ # 1

Пока пропускаем проблему и просто работаем с Metro, но мне бы очень хотелось узнать, как использовать CXF, если у кого-то есть указатели ... Если ничего не работает, мне, возможно, придется переключить контейнер веб-приложения (или заглянуть в Metro заполнить мои требования)


РЕДАКТИРОВАТЬ # 2

В некоторых решениях подробно описано решение войны, добавив <class-loader delegate="false"/> в файл sun-web.xml. Однако это не работает для невоенных приложений.

Ответы [ 3 ]

5 голосов
/ 09 декабря 2010

Добавьте sun-web.xml и установите делегат = false для загрузчика классов:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD 
Application Server 9.0 Servlet 2.5//EN' 
'http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd'> 
<sun-web-app> 
    <class-loader delegate="false"/> 
</sun-web-app> 
1 голос
/ 14 января 2010

Банки Metro (реализация JAX-WS от Glassfish), вероятно, включены в состав Glassfish, можете ли вы исключить их из пути к классам? Поскольку вы используете maven, вам следует проанализировать зависимости стеклянных рыб и использовать исключение для банок метро.


Похоже, что вам нужно иметь банки CXF на пути к классам приложений до Metro jar. Вы, вероятно, не можете изменить системный загрузчик классов / classpath, но вы можете изменить Thread.currentThread().getContextClassLoader() так, чтобы он сначала загружал CXF. Также в Glassfish вы можете изменить настройки classpath, которые вы можете изменить

Проверьте источник для javax.xml.ws.spi.FactoryFinder#find (), чтобы увидеть, как на самом деле загружается поставщик

0 голосов
/ 16 августа 2011

Решение, которое я придумал (и не удовлетворен), заключается в использовании JaxWsProxyFactoryBean. Вот пример [здесь]. 1 .

Это суть того, что вы должны сделать:

public static void main(String args[]) throws Exception {

    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

    // I didn't need these next 2 calls, but I doubt they hurt
    factory.getInInterceptors().add(new LoggingInInterceptor());
    factory.getOutInterceptors().add(new LoggingOutInterceptor());

    factory.setServiceClass(AuthService.class);
    factory.setAddress("http://localhost:7001/authManager/services/cxfAuth");

    // 'AuthService' is whatever your interface type is
    AuthService client = (AuthService) factory.create();

    Employee employee = client.getEmployee("0223938");
    System.out.println("Server said: " + employee.getLastName() + ", " + employee.getFirstName());
    System.exit(0);

}
...