2010-01-05 12 views
12

Jak usunąć atrybuty class class = "Something" w Xstream.Xstream: usuwanie atrybutu klasy

Używam Xstream z adnotacjami

+0

Gdzie otrzymujesz dokładnie class = "..."? Czy możesz opublikować wygenerowany kod XML? –

+1

http://markmail.org/message/t33x7hswlwsk766i – Cherian

Odpowiedz

13

Rzeczywiście problem nie jest tak jasno sformułowany, jak powinien. Domyślam się, że używasz niestandardowej kolekcji lub używasz pola typu interfejsu, dla którego XStream musi przechowywać aktualną klasę.

W drugim przypadku można po prostu użyć aliasu:

xstream.alias("field name", Interface.class, ActualClassToUse.class);

Zobacz http://markmail.org/message/gds63p3dnhpy3ef2 więcej szczegółów.

+0

Miałem podobny problem i okazało się, że jest to problem. Obawiałem się, że zamiast adnotacji będę musiał używać aliasu javacode, ale okazało się, że dobrze się uzupełniają, ponieważ mogę określić rzeczywistą klasę do użycia w czasie wykonywania. – Caoilte

+0

Czy jest dostępna alternatywa wiosennego oxm? – coffeMug

1

Czy możesz podać przykładowy wynik? Myślę, że zwykle dzieje się tak podczas korzystania z kolekcji. Nie widząc wyjścia, mój najlepszy przypuszczenie to, że trzeba zarejestrować aliasy:

xstream.alias("blog", Blog.class); 

Zobacz http://x-stream.github.io/alias-tutorial.html więcej pokrycia dogłębne. Ponownie wklej niektóre próbki wyjściowe.

2

użyć coś tego rodzaju, aby usunąć klasy atrybutu całkowicie zamiast aliasing ją na coś innego:

private String generateResponse(final XStream xStream) 
{ 
    StringWriter writer = new StringWriter(); 
    xStream.marshal(this, new PrettyPrintWriter(writer) { 
     @Override 
     public void addAttribute(final String key, final String value) 
     { 
      if (!key.equals("class")) 
      { 
       super.addAttribute(key, value); 
      } 
     } 
    }); 
    return writer.toString(); 
} 
18

czytam swój kod i znaleźć, jeśli klasa nie jest mapper.defaultImplementationOf(fieldType), doda atrybut domyślny klasy dla ciebie, chyba że nazwa atrybutu klasy ma wartość NULL;

Więc ustaw może usunąć class =”coś” atrybuty

xstream.aliasSystemAttribute(null, "class"); 
+0

Czy jest dostępna alternatywa wiosennego oxm? – coffeMug

1

Ten atrybut jest widoczny, przynajmniej, gdy nie jest to oczywiste, które stosuje się w klasie. Użytkowanie interfejsu jest przykładem. W takich sytuacjach możesz wypróbować:

xStream.addDefaultImplementation(YourDefaultImplementation.class, YourInterface.class); 

.

Powiązane problemy