8
votes

Comment choisir CXF sur Metro sur Glassfish

J'ai Le problème suivant (rapporté par quelqu'un d'autre) lors de la gestion de mon application d'entreprise sous Glassfish. Sous la jetée ça marche bien.

Javax / XML / WS / WS / SPI / Fournisseur mentionne la création d'une ressource méta-inf / services / javax.xml.ws.spi.Provider, mais celle-ci est déjà fournie avec CXF et la création d'un fichier de ressources supplémentaire ne résout pas ce problème sous Glassfish.

Est-ce que quelqu'un sait-on comment s'assurer que CXF est ramassé sous Glassfish?
(J'utilise un projet multi-modules Maven avec une dépendance CXF 2.2.5)

Merci!
Tim


edit # 1

Sautant le problème pour le moment et je ne fais que travailler avec métro, mais j'aimerais vraiment savoir comment utiliser CXF à la place si quelqu'un a des pointeurs. Si rien ne fonctionne, je devrais devoir changer de conteneur d'applications Web (ou regarder dans Metro pour remplir mes exigences)


Edit # 2

Certaines solutions détaillent la solution pour la guerre en ajoutant au fichier Sun-web.xml. Cependant, cela ne fonctionne pas pour les applications non-guerre EE.


3 commentaires

Je trouve le même problème qu'avec un EJB emballé dans une oreille. J'ai ouvert une prime comme j'aimerais vraiment entendre de bonnes réponses à cela sans avoir à dupliquer la question, d'où mes modifications.


+1: Il s'agit d'une mauvaise caractéristique des poissons de verre que je suis actuellement confronté à JSF : Glassfish a créé des bibliothèques JSF et ceux-ci génèrent des conflits sur un code ayant JSF. Vraiment agaçant et la solution vaut la prime ouverte! Je veux absolument savoir aussi la solution!


Aussi Cet article est en train de dire comment les choses ne fonctionnent que dans une version de Glassfish et dans certains ne pas.


3 Réponses :


1
votes

Le METRO (Mise en œuvre JAX-WS de Glassfish) Les pots sont probablement inclus avec Glassfish, pouvez-vous les exclure de la classe de classe? Puisque vous utilisez Maven, vous devriez analyser les dépendances de gluge et utiliser une exclusion pour les pots de métro.


Il semble que vous ayez besoin d'avoir les pots CXF sur les applications de classe de classe avant les pots de métro. Vous ne pouvez probablement pas modifier le téléchargeur de système / classe de classe, mais vous pouvez modifier le fichier thread.currentThread (). GetContextClassloader () tel qu'il charge d'abord CXF. Il se peut également un paramètre de classe de classe dans Glassfish, vous pouvez modifier

Consultez la source pour javax.xml.ws.spi.FactoryFinder # Rechercher () pour voir comment le fournisseur est effectivement chargé


4 commentaires

Cela pourrait très bien être le cas, mais je ne suis pas sûr de savoir comment remédier à cela .. C'est une compilée .war que je téléchargeez sur Glassfish, de sorte que Maven exclut encore d'avoir un effet après la compilation? (C.-à-d. Celles-ci exclut-elles être transmises à la guerre et utilisées sur le serveur?)


Donc, sa prise en charge du fournisseur de métro lorsque votre demande est déployée dans Glassfish, pas pendant le développement?


J'ai mal compris votre situation, désolé. J'ai mis à jour ma publication


HMM, le lien ci-dessus FactoryFinder est utile pour comprendre le problème, mais je suis encore incapable de résoudre mon problème à l'aide de l'une des méthodes décrites ..Les fichiers et fichiers de systèmes et de systèmes de système)



6
votes

Ajouter un Sun-web.xml et définir le délégué = FALSE au chargeur de classe:

<?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 commentaires

Ajout de ce fichier au répertoire Web-INF de guerre a fonctionné pour moi. Merci!



0
votes

La solution que j'ai proposée (et je suis insatisfaite) est d'utiliser jaxwsproxyfactorybean code>. Il y a un exemple [ici]. 1 .

C'est la jistoire de ce que vous devez faire: P>

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);

}


1 commentaires

Pourriez-vous copier sur les parties pertinentes de la solution? Les liens externes ont tendance à briser au fil du temps.