2015-03-09 2 views
0

У меня есть поле POJO, аннотированное @XStreamOmitField, однако, когда я смотрю, что ответ ServerResource, поле есть.@XStreamOmitField для Restlet GAE не работает

Вот код, который я (упрощенно):

@Override 
public ItemDTO getStuff() { 
    return stuff.getItem(); 
} 

Вот POM конфигурации у меня есть:

 <dependency> 
      <groupId>org.restlet.gae</groupId> 
      <artifactId>org.restlet</artifactId> 
      <version>${version.restlet}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.restlet.gae</groupId> 
      <artifactId>org.restlet.ext.servlet</artifactId> 
      <version>${version.restlet}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.restlet.gae</groupId> 
      <artifactId>org.restlet.ext.xstream</artifactId> 
      <version>${version.restlet}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.restlet.gae</groupId> 
      <artifactId>org.restlet.ext.json</artifactId> 
      <version>${version.restlet}</version> 
     </dependency> 

версия, <version.restlet>2.3.1</version.restlet>

Что могли здесь проблема? Это должно быть автоматически?

Update:

Моя идея это вызывается библиотекой APISpark, используемой в мое приложение вызывает XStream быть не используемым в пользу Джексона:

<dependency> 
     <groupId>org.restlet.gae</groupId> 
     <artifactId>org.restlet.ext.apispark</artifactId> 
     <version>${version.restlet}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>com.fasterxml.jackson.core</groupId> 
       <artifactId>jackson-databind</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.5.1</version> 
    </dependency> 

ответ

1

Поскольку расширение org.restlet.ext.apispark использования расширение org.restlet.ext.jackson, последнее автоматически регистрирует преобразователь в дополнение к ним из расширений org.restlet.ext.xstream и org.restlet.ext.json.

Следующий метод позволяет увидеть, какие являются зарегистрированными конвертеры:

private void configureConverters() { 
    List<ConverterHelper> converters = Engine.getInstance() 
      .getRegisteredConverters(); 
    for (ConverterHelper converterHelper : converters) { 
     System.out.println(converterHelper.getClass()); 
    } 
} 

@Override 
public Restlet createInboundRoot() { 
    configureConverters(); 
    (...) 
} 

Registeration зависит от того, в пути к классам, так что я предполагаю, что джексон один зарегистрирован первый. Это означает, что это тот, который используется для преобразования данных ответа вашего запроса.

Чтобы иметь возможность использовать расширение отстрелить вам необходимо вручную удалить зарегистрированный конвертер Джексона, как описано ниже:

private void configureConverters() { 
    List<ConverterHelper> converters = Engine.getInstance() 
      .getRegisteredConverters(); 
    JacksonConverter jacksonConverter = null; 
    for (ConverterHelper converterHelper : converters) { 
     System.err.println(converterHelper.getClass()); 
     if (converterHelper instanceof JacksonConverter) { 
      jacksonConverter = (JacksonConverter) converterHelper; 
      break; 
     } 
    } 

    if (jacksonConverter != null) { 
     Engine.getInstance() 
       .getRegisteredConverters().remove(jacksonConverter); 
    } 
} 

Надеется, что это помогает вам, Тьерри

+0

Да, действительно он работал. большое спасибо – xybrek