2014-12-05 34 views
8

io sono sempre al di sotto di eccezione ogni volta che il mio codice cliente REST effettua una chiamata al servizio REST utilizzando il codice qui sotto: Codice:REST JAX-RS javax.ws.rs.ProcessingException:

public void putWatcher(Watcher watcher) 
    { 
     System.out.println("In REST Client putWatcher.***********"); 

     target = target.path(RESOURCE_WATCHERS).path(watcher.getWatcheruri()); 
     System.out.println(target.getUri()); 
     Invocation.Builder builder = target.request(); 
     builder.put(Entity.json(watcher)); 
//  Response response = target.request().put(Entity.json(watcher)); 
     System.out.println("Returned from REST Call"); 
    } 

Eccezione :

: javax.ws.rs.ProcessingException: javax.ws.rs.core.Response$Status$Family.familyOf(I)Ljavax/ws/rs/core/Response$Status$Family; 
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:255) 
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:667) 
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:664) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:664) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:424) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.put(JerseyInvocation.java:318) 

Caused by: java.lang.NoSuchMethodError: javax.ws.rs.core.Response$Status$Family.familyOf(I)Ljavax/ws/rs/core/Response$Status$Family; 
    at org.glassfish.jersey.message.internal.Statuses$StatusImpl.<init>(Statuses.java:63) 
    at org.glassfish.jersey.message.internal.Statuses$StatusImpl.<init>(Statuses.java:54) 
    at org.glassfish.jersey.message.internal.Statuses.from(Statuses.java:93) 
    at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.java:323) 
    at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:227) 
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:246) 
    ... 29 more 

mio servizio REST è distribuito su Tomcat 8 server e il client il codice è distribuito su JBoss 7.2. L'applicazione client è l'applicazione SIP-Servlet che include anche il client REST.

Quando eseguo il test del client come applicazione Java autonoma, esso funziona ma quando viene distribuito su JBoss restituisce l'errore. Il mio file POM è:

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>3.8.1</version> 
    <scope>test</scope> 
</dependency> 
<!-- logging dependency --> 
<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.14</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>commons-logging</groupId> 
    <artifactId>commons-logging-api</artifactId> 
    <version>1.0.4</version> 
    <scope>provided</scope> 
</dependency> 
<!-- web j2ee dependencies --> 
<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>2.5</version> 
    <scope>provided</scope> 
</dependency> 
<!-- sip dependencies --> 
<dependency> 
    <groupId>org.mobicents.servlet.sip</groupId> 
    <artifactId>sip-servlets-spec</artifactId> 
    <version>1.7.0.FINAL</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.core</groupId> 
    <artifactId>jersey-client</artifactId> 
    <version>2.13</version> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.core</groupId> 
    <artifactId>jersey-common</artifactId> 
    <version>2.13</version> 
</dependency> 
<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId> 
    <version>1.9.13</version> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>2.13</version> 
</dependency> 

anche io cerco di fare come suggerito su questo link https://github.com/gondor/openstack4j/issues/30 Dice di disabilitare JAX-RS da JBOSS config standalone.xml. Sto usando standalone-sip.xml mentre avvio il server, quindi ho modificato solo quello. Rimosse queste due righe:

<subsystem xmlns="urn:jboss:domain:jaxrs:1.0"/> 
<extension module="org.jboss.as.jaxrs"/> 

Anche questo non funziona. Non so come disabilitare, ho appena cercato JAX-RS e cancellato quelle linee dove ho trovato quelle.

In un post SO c'era un suggerimento di usare javax.ws.rs.core.Response respone invece di Response response provato anche questo ma senza fortuna.

Un'altra informazione: la chiamata REST ha esito positivo, che è possibile vedere sul server Tomcat.

Si prega di suggerire che altro si può fare.

Grazie

risposta

3

Riesci a dare un'occhiata al catalogo biblioteche dell'istanza di JBoss e rimuovere tutte le implementazioni di JAX-WS? A me sembra che siano in conflitto con la Jersey che impacchetta nel tuo file WAR.

Edit:

In realtà io immagino è necessario risolvere JAX-WS versione conflitto tra il server e applicazioni web. Metodo familyDi mancante in Response.Status.Family è stato introdotto in Java 7 ma manca da Java EE 6. Quindi trova Java versione compatibile con Java EE 6 o aggiorna il server.

E se poi Maven causerà problemi, poi per il calcio vero, c'è anche

mvn dependency:tree 

e

<dependency> 
... 
     <exclusions> 
      <exclusion>...</exclusion> 
+0

Se elimino il barattolo poi JBoss non si avvia. – user3275095

6

Recentemente mi sono imbattuto in questo problema. È stato causato da una libreria che fornisce una vecchia implementazione di javax.ws.rs.core.L'ho risolto come segue:

<dependency> 
     <groupId>org.apache.axis2</groupId> 
     <artifactId>axis2-jaxws</artifactId> 
     <version>1.6.2</version> 
     <scope>runtime</scope> 
     <exclusions> 
      <!-- Causes java.lang.NoSuchMethodError: javax.ws.rs.core.Response$Status$Family.familyOf(I)Ljavax/ws/rs/core/Response$Status$Family; --> 
      <exclusion> 
       <groupId>javax.ws.rs</groupId> 
       <artifactId>jsr311-api</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
+0

Grazie, questo ha risolto il mio problema: – Rinat

+0

Quale versione di jsr dovrei usare invece, nel caso in cui dovessi mantenerla? –

0

Ho riscontrato un errore simile. "Java.lang.NoSuchMethodError: javax/ws/RS/ClientErrorException.validate (Ljavax/ws/RS/core/Response; Ljavax/ws/RS/core/Response $ Stato $ Famiglia;"

Causa principale: web tester di prestazioni del servizio invoca il servizio web utilizzando lo script senza passare nel corpo della richiesta corretta. manca un "/" nell'URL percorso di chiamata di servizio web è un altro caso.