2013-05-29 5 views
5

Ich habe einen Webservice mit apache-cxf-2.7.4 erstellt. Ich ging in die Klassen, die in meinem Projekt produziert wurden. die Bibliotheken, die ich in meinem Projekt haben, sind:Konstruktor Service in der Klasse javax.xml.ws.Service kann nicht auf bestimmte Typen angewendet werden

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

ich habe folgende Fehlermeldung:

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 

Antwort

10

das Problem ist die Version von JAX-WS-API. Der Klassenlader für Ihre Anwendung hat zuerst die in Java SE oder Java EE enthaltene Version geladen.

Für Java SE 6 oder Java EE 5, JAX-WS API 2.1. Die Konstruktoren in javax.xml.ws.Service:

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

Für Java SE 7 oder Java EE 6, JAX-WS-API 2.2. Die Konstrukteure in javax.xml.ws.Service:

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

Es gibt drei mögliche Lösungen (hängt davon ab, ob es sich um eine Web-Anwendung oder Standalone-Anwendung):

  1. Verwenden Java SE 7 oder Java EE 6.

  2. Wiederholen Sie mit dem Argument -frontend jaxws21, um JAX-WS 2.1-konformen Code zu generieren.

  3. Ändern Sie den Klassenlader zum Laden zuerst die in der Anwendung enthaltenen Klassen.

2

Wenn Maven verwenden Sie zu bauen diese

zur Ausführung Konfiguration hinzufügen sollte
<defaultOptions> 
    <extraargs> 
     <extraarg>-frontend</extraarg> 
     <extraarg>jaxws21</extraarg> 
    </extraargs> 
</defaultOptions> 

(dank Paul Vargas für mich in die richtige Richtung).

Verwandte Themen