2016-04-06 25 views
-1

Java'da JsonProvider.java'u RootlessJsonProvider.java olarak genişleten bir sınıf var, bu sınıfın root öğesi olmadan JSON ile çalışmasına izin veriyor.Sabitleme "aynı silme işlemine sahip değil ... ama aynı yöntemi geçersiz kılmıyor" ama aynı zamanda yeni bir uygulama imzası var mı?

Hala uygulayan sınıfın tamamen aynı yöntem imzası ile tanımlanır yöntemi readFrom geçersiz çalışılıyor:

@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); 
    } 

Ama bütün bu değişti uygulamasıdır, köksüz json kullanımına izin vermek . Onunla birlikte gelen

hatadır:

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 

o kullanım uygulaması kapalı olduğu için yöntem adı da çalışmıyor değiştirme.

yani

JsonProvider rootlessProvier = new RootlessJsonProvder(); 

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

Orada bir tip daha az bildik! Nasıl Bu yöntem kullanıldığında dayalı herhangi bir parametre değildir, bu nedenle nasıl bu hatayı çözebilirsiniz?

Düzenleme: cxf-jaxrs versiyonunun

JsonProvider.java 

bölüm 3.1.5

+2

bakıldığında [ 'JsonProvider'] (http://docs.oracle.com/javaee/7/api/javax/json/spi/JsonProvider.html), Geçersiz kılmak için "readFrom (...)" yöntemini göremiyorum. Hangi kütüphaneyi kullanıyorsunuz? – AJNeufeld

+0

CXF-JAXRS: paket org.apache.cxf.jaxrs.provider. Sürüm 3.1.5 –

+0

Sınıf için jenerik type parametresini saklamamanın bir nedeni var mı? İhtiyacınız yoksa, ilk parametre silme sorununu gidermek için "Class type" Sınıf tip 'olur. İhtiyaç duyarsanız, doğru şekilde eklemeniz de sorunu giderir ve düzeltmenin tercih edilen yoludur. –

cevap

1

işlev imzası düzgün sınıfını genişletmek gerekir

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

olduğunu.

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

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

Veya

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

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