2016-04-06 4 views
-1

Я использую файлы jar вместо maven, потому что у меня нет интернета.json conversion используя джерси

проблема: я использую джерси-исполнение jax-rs. Мне нужно преобразовать Java в JSON, но он дает следующую ошибку

java.lang.NoSuchMethodError: org.glassfish.jersey.internal.util.PropertiesHelper.getValue(Ljava/util/Map;Ljavax/ws/rs/RuntimeType;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object; 
at org.glassfish.jersey.moxy.json.MoxyJsonFeature.configure(MoxyJsonFeature.java:67) 
at org.glassfish.jersey.model.internal.CommonConfig.configureFeatures(CommonConfig.java:730) 
at org.glassfish.jersey.model.internal.CommonConfig.configureMetaProviders(CommonConfig.java:648) 
at org.glassfish.jersey.server.ResourceConfig.configureMetaProviders(ResourceConfig.java:829) 
at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:453) 
at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:184) 
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:350) 
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:347) 
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.processWithException(Errors.java:255) 
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:347) 
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:392) 
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177) 
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369) 
at javax.servlet.GenericServlet.init(GenericServlet.java:158) 
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1236) 
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1149) 
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1041) 
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4910) 
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5192) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1387) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1377) 
at java.util.concurrent.FutureTask.run(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

код я использую это:

package mypack; 

import javax.websocket.server.PathParam; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

import org.glassfish.jersey.server.BackgroundScheduler; 

import entity.Res; 

@Path("/s") 
public class webapi { 

    @GET 
    @Path("q/{name}") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Res method(@PathParam("name") String name){ 
     try{ 
      Res r = new Res(); 
      r.setId(5); 
      r.setName(name); 
      return r; 
     }catch(Exception e){ 
      System.out.println(e.getMessage()); 
      return null; 
     } 
    } 

} 

класс разрешения выглядит следующим образом:

package entity; 

import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
public class Res { 

    @XmlElement int id; 
    @XmlElement String name; 
    public Res() { 
    } 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

которые я использую:

image of jar files i have embedded

web.xml файл:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 

<servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>mypack</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

что является причиной ошибки?

+1

Эта ошибка обычно возникает из-за несоответствия версии. Пожалуйста, проверьте, используете ли вы баночки из той же версии –

+1

. Ваш 'jersey-media-moxy-2.3.jar' может быть связан с вашей ошибкой. Попробуйте удалить его. –

ответ

1

Думаю, может быть проблема с версией jar. Потому что банка, которую вы использовали для своего проекта, - Older. Обновите свой lib, чтобы обновить зависимость jersey, когда я вижу и прогнозирую ошибку.

Я хотел бы предложить вам добавить jars по крайней мере в версии 2.7 вместо 2.2 или 2.3, как ваша зависимость говорит.

Обновите свою lib Папка затем очистите свой проект.

Сформируйте свой проект еще раз. После обновления lib с новыми jar файлами.

Thank You

+0

Хотя вы можете быть прав насчет проблем с версией, в самом начале вопросов говорится, что он не использует maven. – andrepnh

+0

@andrepnh Спасибо, я обновил свой ответ в соответствии с структурой пользовательского проекта. Еще раз спасибо. –

+0

Спасибо всем! Но я думаю, что для средств массовой информации Джерси это последняя версия. я. е. 2,3. Пожалуйста, предоставьте мне ссылку последней версии, если я ошибаюсь – Sarvesh