2014-12-05 8 views
8

Я получаю ниже исключения, когда мой REST код клиента делает вызов службы REST, используя код ниже: Код: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"); 
    } 

Exception :

: 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 

Моя служба REST развернута на Tomcat 8 сервера и клиента код развертывается на JBoss 7.2. Клиентское приложение - это приложение SIP-Servlets, которое также связывает клиент REST.

Когда я тестирую клиент как автономное приложение Java, он работает, но при развертывании на JBoss он дает ошибку. Мой файл 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> 

Я также пытаюсь сделать, как это предлагается по этой ссылке https://github.com/gondor/openstack4j/issues/30 Это говорит отключить JAX-RS от JBOSS конфигурации standalone.xml. Я использую standalone-sip.xml при запуске сервера, поэтому я только изменил это. Удалены эти две линии:

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

Это также не работает. Я не знаю, как отключить, просто искал JAX-RS и удалил те строки, где я их нашел.

В одном сообщении SO было предложено использовать javax.ws.rs.core.Response respone вместо Response response, попробовал также и не повезло.

Дополнительная информация: сам вызов REST успешно, что я могу видеть на сервере tomcat.

Пожалуйста, предложите, что еще можно сделать.

Благодаря

ответ

3

Вы можете взглянуть на каталог библиотек вашего экземпляра JBoss и удалить все реализации JAX-WS? Мне кажется, что они конфликтуют с Джерси, которую вы связываете в своем WAR-файле.

Edit:

На самом деле я думаю, вы должны решить JAX-WS версии конфликт между сервером и веб-приложения. Метод familyOf Вы отсутствуете в Response.Status.Family было введено в Java 7, но отсутствует в Java EE 6. Поэтому найдите версию Java EE 6, совместимую с Джерси, или обновите сервер.

И если позже Maven вызовет проблемы, то для реального удара, есть также

mvn dependency:tree 

и

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

Если я удалю банку, JBoss не запустится. – user3275095

6

Я недавно столкнулся с этой проблемой. Это было вызвано библиотекой, обеспечивающей старую реализацию javax.ws.rs.core.Я зафиксировал его следующим образом:

<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

Спасибо, это решило мою проблему. – Rinat

+0

Какую версию jsr следует использовать вместо этого, на случай, если я должен ее использовать? –

0

Я столкнулся с аналогичной ошибкой. "Java.lang.NoSuchMethodError: javax/WS/RS/ClientErrorException.validate (Ljavax/WS/RS/ядро ​​/ Response, Ljavax/WS/RS/ядро ​​/ Response $ Статус $ Family;"

первопричины: веб тестер службы производительности вызывается веб-службой, используя скрипт, не передавая правильное тело запроса. Отсутствует «/» в URL-адресе маршрута вызова веб-службы.

Смежные вопросы