2013-05-29 15 views
5

Ho creato un servizio Web con apache-cxf-2.7.4. Ho inserito le classi prodotte nel mio progetto. le librerie che ho nel mio progetto sono:Servizio in classe javax.xml.ws.Service non può essere applicato a determinati tipi

  • math3-commons-3.2.jar
  • XStream-1.4.4.jar
  • jaxws-api-2.2.5.jar

ho il seguente errore:

constructor Service in class javax.xml.ws.Service cannot be applied to given types; 
    required: java.net.URL,javax.xml.namespace.QName 
    found: java.net.URL,javax.xml.namespace.QName,javax.xml.ws.WebServiceFeature[] 
    reason: actual and formal argument lists differ in length 

risposta

10

il problema è la versione di JAX-WS API. Il classloader dell'applicazione ha prima caricato la versione inclusa in Java SE o Java EE.

Per Java SE 6 o Java EE 5, API JAX-WS 2.1. I costruttori in javax.xml.ws.Service:

javax.xml.ws.Service.Service(URL, QName) 

per Java SE 7 o Java EE 6, JAX-WS API 2.2. I costruttori in javax.xml.ws.Service:

javax.xml.ws.Service.Service(URL, QName) 
javax.xml.ws.Service.Service(URL, QName, WebServiceFeature...) // You need this! 

Ci sono tre possibili soluzioni (dipende dal fatto che si tratta di un'applicazione web o applicazione stand-alone):

  1. Usa Java SE 7 o Java EE 6.

  2. Eseguire nuovamente con l'argomento -frontend jaxws21 per generare invece il codice compatibile JAX-WS 2.1.

  3. Modificare il classloader per caricare prima le classi incluse nell'applicazione.

2

Se si utilizza Maven per costruire si dovrebbe aggiungere questo per la configurazione di esecuzione

<defaultOptions> 
    <extraargs> 
     <extraarg>-frontend</extraarg> 
     <extraarg>jaxws21</extraarg> 
    </extraargs> 
</defaultOptions> 

(grazie a Paul Vargas per avermi nella giusta direzione).

Problemi correlati