Мы хотим реализовать REST-Service на Jetty, который получает Heartbeat от нескольких клиентов, и эти Heartbeats хранятся в Hashmap для работы с ними в следующих функциональных единицах.Джерси: Включение общего объекта, не работающего с Jetty
Вот как выглядит код на данный момент:
Класс, который должен быть введен.
public class SharedMemory {
private SharedMemory sharedMemory = null;
private HashMap<String, HeartbeatModel> memory = null;
private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
private final Lock readLock = lock.readLock();
private final Lock writeLock = lock.writeLock();
public SharedMemory(){
memory = new HashMap<String, HeartbeatModel>();
}
...
}
Класс Связующее:
public class SharedMemoryBinder extends AbstractBinder{
@Override
protected void configure() {
bind(new SharedMemory()).to(SharedMemory.class);
}
}
Функция Класс:
public class SharedMemoryFeature implements Feature{
@Override
public boolean configure(FeatureContext context) {
context.register(new SharedMemoryBinder());
return true;
}
}
Сервис класс класс
@Path("/HeartbeatService")
public class GCEHeartbeatService {
@Inject
private SharedMemory sharedMemory;
@POST
@Path("/postHeartbeat")
@Consumes(MediaType.APPLICATION_JSON)
public Response postHeartbeat(Heartbeat heartbeat){
sharedMemory.storeToMemory(heartbeat);
return Response.ok().build();
}
...
}
Применение:
@ApplicationPath("/")
public class Application extends javax.ws.rs.core.Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<>();
classes.add(GCEHeartbeatService.class);
classes.add(SharedMemoryFeature.class);
return classes;
}
}
Это используются зависимости:
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.4.1</version>
</dependency>
<dependency>
<groupId>de.hszg</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.bundles</groupId>
<artifactId>jaxrs-ri</artifactId>
<version>2.13</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.5.3</version>
</dependency>
</dependencies>
Так что с этой конфигурацией, я всегда получает исключение типа в 415 неподдерживаемых СМИ, когда я отправляю сердцебиение к службе postHeartbeat, даже с другим типом носителя.
Спасибо за хороший ответ, отсутствующий класс для jacksonprovider была проблема в данном случае. Я не знал о влиянии переопределенной функции getClass. Так что теперь все отлично. Я проверю ваши предложения. – AKR