2009-11-15 9 views
35

Sto provando a distribuire alcuni servizi Web in un'applicazione WAR su JBoss 5.1.0.setProperty deve essere sovrascritto da tutte le sottoclassi di SOAPMessage

Ho creato i file di origine da un wsdl esistente utilizzando lo strumento JAX-WS wsgen. Ciò ha creato i file di servizio e le clase annotate @XmlType che fungono da wrapper di richiesta e risposta.

Questa classe ha funzionato bene su JBoss 4.2.3, ma quando si passa a JBoss 5.1.0, ottengo questa eccezione.

java.lang.UnsupportedOperationException: setProperty deve essere ignorata da tutte le sottoclassi di SOAPMessage

La mia configurazione:

  • Windows XP SP3 (ma ottenere lo stesso su Vista, così come su Linux)
  • Sun JDK 1.6.0_17
  • JBoss 5.1.0 GA per JDK6

Grazie in anticipo!

risposta

32

Ci sono alcune cose che potrebbero andare storte, quindi ti dirò che cosa mi ha aiutato nel mio caso (analogo al tuo, stavo usando JDK 1.6.0_13).

Il problema si trova nella mancata corrispondenza JAR. Prima di tutto assicurati che JBoss stia usando JDK 1.6 per controllare il tuo JAVA_HOME env. variabile. In secondo luogo, assicurati che le tue classi siano compilate usando JDK 1.6. Se esegui il tuo progetto da Eclipse assicurati che Eclipse stia usando JDK corretto, lo stesso se esegui JBoss da Eclipse.

Immagino che tu abbia ragione, quindi arriva un po 'di magia. Il client corrente non utilizza utilizza librerie da $ JBOSS_HOME/client, ma usa solo quelle fornite in $ JBOSS_HOME/lib/endorsed. Ovviamente, se si utilizzano altre API non correlate a JAX-WS come JPA o EJB o Servlet, è possibile aggiungerle al classpath, ma usare solo JAR JAX-WS lib/endorsed.

ha aiutato nella mia situazione particolare in caso di JBoss 5.1, nelle versioni precedenti di JBoss alcuni altri trucchi hanno lavorato, per esempio cercare di aggiungere l'opzione java -Dsun.lang.ClassLoader.allowArraySyntax = true o/e -Djava .endorsed.dirs = $ JBOSS_HOME/lib/approvato all'avvio del client e di JBoss.

+2

Grazie Piotr! Dopo tutto, il problema era che stavo avviando JBoss da eclipse, con la sua configurazione di avvio automatica ... che non supera il parametro -Djava.endorsed.dirs = $ JBOSS_HOME/lib/endorsed. Dopo aver aggiunto questo (oltre a eseguire JBoss dallo script run.bat) ha funzionato bene. Grazie ancora! (ti meriti più di un voto da me :)) –

+0

Provato sia "-Dsun.lang.ClassLoader.allowArraySyntax = true" e "-Djava.endorsed.dirs = $ JBOSS_HOME/lib/endorsed", non ha funzionato 4.2.3.GA. –

+0

Penso che questo tipo di soluzione alternativa sia piuttosto negativa, in quanto potrebbe avere un impatto su altre applicazioni distribuite e rendere più difficile il processo di industrializzazione. L'ambito dovrebbe essere limitato al pacchetto dell'applicazione (come config/filtri del programma di caricamento classi). – Donatello

23

Ho avuto lo stesso problema con un aggiornamento da JBoss 4.2.2 e trovato la risposta nella JBoss 5.1.0 Release Notes:

JBossAS 5.0.0.GA può essere compilato sia con Java5 & java6. Il binario compilato Java5 è la nostra distribuzione binaria primaria/consigliata. È stato sottoposto a test rigorosi e può essere eseguito sia con Java 5 sia con Java 6 runtime. Durante l'esecuzione in Java 6 è necessario copiare manualmente le seguenti librerie dalla directory JBOSS_HOME/cliente alla directory JBOSS_HOME/lib/approvato, in modo che le API JAX-WS 2.0 supportati da JBossWS vengono utilizzati:

  • jbossws- native-saaj.jar
  • jbossws-native-jaxrpc.jar
  • jbossws-native-jaxws.jar
  • JBossWS-nativo-jaxws-ext.jar

stavo usando la distribuzione di JBoss 5.1.0 Build con Java 5 (in esecuzione su JDK 1.6.0_20) ed abbastanza sicuro la copia di questi vasi in la directory approvata ha risolto il problema. Non stiamo usando la versione compilata per Java 6 a causa della nota:

Si noti tuttavia che la distribuzione compilata Java 6 di JBoss AS 5 è ancora in fase sperimentale.

7

Potrebbe essere dovuto a un conflitto con il vaso SAAJ. Copia 's jar Saaj da {Jboss_HOME}/LIB a {JBOSS_HOME}/lib/endorsed. Spero che ciò possa essere di aiuto nella risoluzione del problema,

+4

Copiare jboss-saaj.jar dalla directory jboss/server//lib su jboss/lib/endorsed ha funzionato per me su jboss-4.2.3.GA –

4

Assicurati di avviare JBoss con le opzioni jvm che puntano alle librerie approvate. Questo non è configurato per impostazione predefinita se si avvia JBoss da Eclipse, utilizzando WTP, sebbene lo sia se si avvia JBoss dalla riga di comando.

È possibile aggiungere il seguente agli argomenti VM della Configurazione di avvio:

-Djava.endorsed.dirs="${JBOSS_HOME}\jboss-as\lib\endorsed" 
+0

Bene notare che eclipse non espanderà $ JBOSS_HOME in le opzioni di jvm di un obiettivo di corsa. –

+0

Wow, sono tornato qui ancora oggi e non ricordo nemmeno la prima volta! –

0

ho copiato necessario lib (SAAJ-impl nel mio caso) per la mia guerra dalla distribuzione CXF e accesi JBoss isolamento classloader con il file /WEB-INF/jboss-classloader.xml del seguente contenuto:


<classloading xmlns="urn:jboss:classloading:1.0" 
    domain="MyDomain" 
    export-all="NON_EMPTY" 
    import-all="true"> 
</classloading> 

Spero che questo aiuto a qualcuno.

0

Se si verifica questo errore nel client durante l'esecuzione di un'applicazione client è necessario seguire una procedura simile in aggiunta a quelle del presente answer:

  1. Determinare quale istanza della JVM è in esecuzione l'applicazione. Nel mio caso ho avuto applicazioni standalone usando il JDK e le applet che usano JRE. Questo sarà da qualche parte come /path/jre/bin/

  2. Aggiungere i vasi da questo answer a path/jre/lib/endorsed. Ho dovuto creare la directory endorsed.

Questo indica alla VM di caricare le implementazioni specifiche di jboss prima dei valori predefiniti del linguaggio java. Questo accade nel caricatore di classi bootstrap, molto prima che i jar del classpath vengano caricati.

2

prova a seguire vasetti al vostro JBoss/lib/cartella approvato

jbossws-native-jaxws.jar 
jbossws-native-jaxrpc.jar 
jbossws-native-saaj.jar 
jbossws-native-saaj.jar 
1

Il mio progetto era semplicemente basata su:

  • CXF 2.5 .0 (Soap WebService Consumer)
  • assemblaggio GUERRA (senza EAR)
  • senza jboss-web
  • no/approvato jboss-classloading
  • cambiamenti nella JBoss/lib (solo xalan, serializzatore, xercesImpl)
  • esecuzione su jboss-4.2.1.GA + JDK 1,6

cosa ha funzionato per me era semplicemente aggiungere thoses dipendenze Maven, accanto al 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> 

Spero che possa essere d'aiuto!

0

La configurazione del mio server è Jboss AS 4.2.1 GA e come di seguito, funziona;

Librerie che ho usato in lib \ endorsed;

  • JAXWS2.1.1_20070501
  • JBossWS-native-JAXRPC
  • JBossWS-nativo-jaxws
  • JBossWS-nativo-jaxws-ext
  • JBossWS-native-SAAJ
  • serializzatore
  • xalan
  • xercesImpl
0

Aggiunta SAAJ-impl nella cartella lib mio web app fisso questo errore. Sto usando JBoss 4.2.3 e CXF 2.4.10.