2016-04-06 4 views
-1

In Java habe ich eine Klasse, die JsonProvider.java als RootlessJsonProvider.java erweitert, die die Klasse mit JSON ohne ein Root-Element arbeiten können.Behebung "hat das gleiche Löschen wie..aber überschreibt nicht" für die Unterklasse w/selbe Methodensignatur aber neue Implementierung?

Ich bin versucht, die Methode readFrom außer Kraft zu setzen, die noch mit der exakt gleichen Methode Signatur wie die Klasse definiert ist, die es implementiert:

@Override 
    public Object readFrom(final Class<Object> type, final Type genericType, 
      final Annotation[] anns, final MediaType mtype, 
      final MultivaluedMap<String, String> headers, 
      final InputStream inputStream) { 

     InputStream inputStreamNew = null; 

     if (type != null) { 
      final XmlRootElement rootElement = type 
        .getAnnotation(XmlRootElement.class); 
      if (rootElement != null) { 
       inputStreamNew = transformStreamForDropRootElement(rootElement, 
         inputStream); 
      } 
     } 

     return super.readFrom(type, genericType, anns, mtype, 
       headers, inputStreamNew); 
    } 

Aber alles, was sich geändert hat ist die Implementierung, wurzellos json Nutzung zu ermöglichen, .

Der Fehler, der mit ihm kommt, ist:

The method readFrom(Class<Object>, Type, Annotation[], MediaType, MultivaluedMap<String,String>, InputStream) of type RootlessJsonProvider has the same erasure as readFrom(Class, Type, Annotation[], MediaType, MultivaluedMap, InputStream) of type MessageBodyReader but does not override it 

Ändern der Methodenname nicht funktioniert auch, weil es Nutzung ist von der Umsetzung ist.

heißt

JsonProvider rootlessProvier = new RootlessJsonProvder(); 

rootlessProvider.rootlessReadFrom(....); //ERROR <---- this method doesn't exist as it's not defined in JsonProvider.java 

Es gibt keine Parameter auf, wie dieses Verfahren verwendet wird, das ist weniger Generikum eines Typs, so wie kann ich diesen Fehler beheben?

Edit:

JsonProvider.java 

Teil cxf-jaxrs Version 3.1.5

+2

bei der Suche [ 'JsonProvider'] (http://docs.oracle.com/javaee/7/api/javax/json/spi/JsonProvider.html), Ich sehe keine 'readFrom (...)' Methode zum Überschreiben. Welche Bibliothek benutzt du? – AJNeufeld

+0

CXF-JAXRS: Paket org.apache.cxf.jaxrs.provider. Version 3.1.5 –

+0

Haben Sie den generischen Typparameter für die Klasse nicht beibehalten? Ich glaube, wenn Sie es nicht brauchen, dann wird der erste Parameter 'Class type' nicht' Class type', um das Löschproblem zu beheben. Wenn Sie es brauchen, dann wird es auch das Problem beheben und es ist die bevorzugte Art, es zu beheben. –

Antwort

1

Die Funktion Signatur ist

class JsonProvider<T> { 
    T readFrom(Class<T> ...) { 
    } 
} 

Sie müssen richtig die Klasse erweitern.

class RootlessJsonProvider extends JsonProvider<SomeClassOfOurs> { 
    @Override 
    SomeClassOfOurs readFrom(Class<SomeClassOfOurs> ...) { 
    } 
} 

JsonProvider<SomeClassOfOurs> rootlessProvider = new RootlessJsonProvider(...); 

Oder

class RootlessJsonProvider<T> extends JsonProvider<T> { 
    @Override 
    T readFrom(Class<T> ...) { 
    } 
} 

JsonProvider<SomeClassOfOurs> rootlessProvider = new RootlessJsonProvider<>(...); 
Verwandte Themen