J'essaie de déployer des services Web dans une application WAR sur JBoss 5.1.0.
J'ai créé les fichiers source à partir d'un fichier WSDL existant à l'aide de l'outil JAX-WS wsgen
. Cela a créé les fichiers de service et les classements annotés @XmlType qui agiraient en tant que wrappers de demandes et de réponses.
Ces classes fonctionnaient bien sur JBoss 4.2.3, mais lors de la migration vers JBoss 5.1.0, je reçois cette exception.
Java.lang.UnsupportedOperationException: setProperty doit être remplacé par toutes les sous-classes de SOAPMessage
Ma configuration:
Merci d'avance!
Il y a quelques problèmes qui risquent de mal tourner, je vais donc vous dire ce qui m'a aidé dans mon cas (par analogie avec le vôtre, j'utilisais JDK 1.6.0_13).
Le problème réside dans l'inadéquation des JAR. Tout d’abord, assurez-vous que JBoss utilise JDK 1.6 et vérifiez votre env. Java_HOME. variable. Deuxièmement, assurez-vous que vos classes sont compilées avec JDK 1.6. Si vous exécutez votre projet à partir d'Eclipse, assurez-vous qu'Eclipse utilise le bon JDK, comme si vous exécutiez JBoss à partir d'Eclipse.
Je suppose que vous avez raison, alors il y a de la magie. Le client en cours d'exécution non utilise les bibliothèques de $ JBOSS_HOME/client, mais n'utilise que celles fournies dans $ JBOSS_HOME/lib/endossées. Évidemment, si vous utilisez une autre API non liée à JAX-WS, telle que JPA, EJB ou Servlets, vous pouvez les ajouter au chemin de classe, mais utilisez les JAR uniquement lib/endossés.
Dans ma situation particulière, dans le cas de JBoss 5.1, dans les versions précédentes de JBoss, quelques astuces fonctionnaient, par exemple, essayez d'ajouter une option Java - Dsun.lang.ClassLoader.allowArraySyntax = true ou/et -Djava.endorsed .dirs = $ JBOSS_HOME/lib/endossé lors du démarrage de votre client et de JBoss.
J'ai eu le même problème avec une mise à jour de JBoss 4.2.2 et j'ai trouvé la réponse dans les Notes de publication de JBoss 5.1.0 :
JBossAS 5.0.0.GA peut être compilé avec Java5 et Java6. Le binaire compilé Java5 est notre distribution binaire principale/recommandée. Il a été soumis à des tests rigoureux et peut s'exécuter à la fois sous Java 5 et Java 6 Runtime. Sous Java 6, vous devez copier manuellement les bibliothèques suivantes du répertoire JBOSS_HOME/client vers le répertoire JBOSS_HOME/lib/endossé, afin que les apis JAX-WS 2.0 pris en charge par JBossWS soient utilisés:
- jbossws-native-saaj.jar
- jbossws-native-jaxrpc.jar
- jbossws-native-jaxws.jar
- jbossws-native-jaxws-ext.jar
J'utilisais la distribution de JBoss 5.1.0 build avec Java 5 (s'exécutant sur JDK 1.6.0_20) et bien sûr, le fait de copier ces fichiers JAR dans le répertoire approuvé a résolu le problème. Nous n'utilisons pas la version compilée pour Java 6 à cause de la remarque suivante:
Il convient toutefois de noter que la distribution de JBoss AS 5 compilée par Java 6 en est encore au stade expérimental.
Cela pourrait être dû à un problème de conflit avec SAAJ
jar. Copiez le fichier Jboss
's Saaj
de {Jboss_HOME}/LIB
dans {JBOSS_HOME}/lib/endorsed
. J'espère que cela aiderait à résoudre le problème,
Assurez-vous de lancer JBoss
avec les options jvm
pointant vers les bibliothèques approuvées . Ce n'est pas configuré par défaut si vous lancez JBoss
à partir d'Eclipse, à l'aide de WTP
, bien que vous lanciez JBoss
à partir de la ligne de commande.
Vous pouvez ajouter ce qui suit aux arguments VM de la configuration de lancement:
-Djava.endorsed.dirs="${JBOSS_HOME}\jboss-as\lib\endorsed"
essayez de suivre les fichiers jars dans votre dossier jboss/lib/endossed
jbossws-native-jaxws.jar
jbossws-native-jaxrpc.jar
jbossws-native-saaj.jar
jbossws-native-saaj.jar
Mon projet était simplement basé sur:
Ce qui a fonctionné pour moi a été simplement d’ajouter ces dépendances maven, à côté de CXF:
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
</dependency>
<dependency>
<groupId>com.Sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
</dependency>
<dependency>
<groupId>com.Sun.xml.ws</groupId>
<artifactId>jaxws-tools</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.woodstox</groupId>
<artifactId>woodstox-core-asl</artifactId>
</dependency>
<dependency>
<groupId>com.Sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
</dependency>
J'espère que ça va aider!
Voici le lien vers ce numéro: https://issues.jboss.org/browse/JBWS-2418
J'utilise Jboss AS 4.3 . Dans mon cas, j'ai supprimé du dossier "deploy" le "jbossws.sar".
Voir ce numéro: https://issues.jboss.org/browse/JBWS-2821
Si vous rencontrez cette erreur dans le client lors de l'exécution d'une application client, vous devez suivre des étapes similaires à celles décrites dans cette réponse answer :
Déterminez quelle instance de la machine virtuelle Java exécute l'application. Dans mon cas, j'avais des applications autonomes utilisant le JDK et des applets utilisant le JRE. Ce sera quelque part comme /path/jre/bin/
Ajoutez les pots de cette answer à path/jre/lib/endorsed
. Je devais créer le répertoire endorsed
.
Ceci indique à la VM de charger les implémentations spécifiques à jboss avant les valeurs par défaut du langage Java. Cela se produit dans le chargeur de classes d'amorçage, bien avant que les fichiers JAR du classpath soient chargés.
L'ajout de saaj-impl au dossier lib de mon application Web a corrigé cette erreur. J'utilise JBoss 4.2.3 et CXF 2.4.10.
J'ai copié le lib nécessaire (saaj-impl dans mon cas) dans ma distribution war de cxf et activé l'isolation de classloader jboss avec le fichier /WEB-INF/jboss-classloader.xml du contenu suivant:
<classloading xmlns="urn:jboss:classloading:1.0"
domain="MyDomain"
export-all="NON_EMPTY"
import-all="true">
</classloading>
J'espère que cette aide à quelqu'un.
La configuration de mon serveur est Jboss AS 4.2.1 GA et comme ci-dessous, cela fonctionne;
Les bibliothèques que j'ai utilisées à lib\endossées;