546 lines
14 KiB
Smali
546 lines
14 KiB
Smali
.class public Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;
|
|
.super Ljava/lang/Object;
|
|
.source "FastJsonProvider.java"
|
|
|
|
# interfaces
|
|
.implements Ljavax/ws/rs/ext/MessageBodyReader;
|
|
.implements Ljavax/ws/rs/ext/MessageBodyWriter;
|
|
|
|
|
|
# annotations
|
|
.annotation system Ldalvik/annotation/Signature;
|
|
value = {
|
|
"Ljava/lang/Object;",
|
|
"Ljavax/ws/rs/ext/MessageBodyReader<",
|
|
"Ljava/lang/Object;",
|
|
">;",
|
|
"Ljavax/ws/rs/ext/MessageBodyWriter<",
|
|
"Ljava/lang/Object;",
|
|
">;"
|
|
}
|
|
.end annotation
|
|
|
|
.annotation runtime Ljavax/ws/rs/ext/Provider;
|
|
.end annotation
|
|
|
|
|
|
# instance fields
|
|
.field private clazzes:[Ljava/lang/Class;
|
|
.annotation system Ldalvik/annotation/Signature;
|
|
value = {
|
|
"[",
|
|
"Ljava/lang/Class<",
|
|
"*>;"
|
|
}
|
|
.end annotation
|
|
.end field
|
|
|
|
.field public features:[Lcom/alibaba/fastjson/parser/Feature;
|
|
|
|
.field public parserConfig:Lcom/alibaba/fastjson/parser/ParserConfig;
|
|
|
|
.field public serializeConfig:Lcom/alibaba/fastjson/serializer/SerializeConfig;
|
|
|
|
.field public serializeFilters:Ljava/util/Map;
|
|
.annotation system Ldalvik/annotation/Signature;
|
|
value = {
|
|
"Ljava/util/Map<",
|
|
"Ljava/lang/Class<",
|
|
"*>;",
|
|
"Lcom/alibaba/fastjson/serializer/SerializeFilter;",
|
|
">;"
|
|
}
|
|
.end annotation
|
|
.end field
|
|
|
|
.field public serializerFeatures:[Lcom/alibaba/fastjson/serializer/SerializerFeature;
|
|
|
|
.field uriInfo:Ljavax/ws/rs/core/UriInfo;
|
|
.annotation runtime Ljavax/ws/rs/core/Context;
|
|
.end annotation
|
|
.end field
|
|
|
|
|
|
# direct methods
|
|
.method public constructor <init>()V
|
|
.locals 2
|
|
|
|
.line 51
|
|
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
|
|
|
const/4 v0, 0x0
|
|
|
|
.line 35
|
|
iput-object v0, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->clazzes:[Ljava/lang/Class;
|
|
|
|
.line 37
|
|
invoke-static {}, Lcom/alibaba/fastjson/serializer/SerializeConfig;->getGlobalInstance()Lcom/alibaba/fastjson/serializer/SerializeConfig;
|
|
|
|
move-result-object v0
|
|
|
|
iput-object v0, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->serializeConfig:Lcom/alibaba/fastjson/serializer/SerializeConfig;
|
|
|
|
.line 38
|
|
invoke-static {}, Lcom/alibaba/fastjson/parser/ParserConfig;->getGlobalInstance()Lcom/alibaba/fastjson/parser/ParserConfig;
|
|
|
|
move-result-object v0
|
|
|
|
iput-object v0, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->parserConfig:Lcom/alibaba/fastjson/parser/ParserConfig;
|
|
|
|
const/4 v0, 0x0
|
|
|
|
.line 39
|
|
new-array v1, v0, [Lcom/alibaba/fastjson/serializer/SerializerFeature;
|
|
|
|
iput-object v1, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->serializerFeatures:[Lcom/alibaba/fastjson/serializer/SerializerFeature;
|
|
|
|
.line 40
|
|
new-array v0, v0, [Lcom/alibaba/fastjson/parser/Feature;
|
|
|
|
iput-object v0, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->features:[Lcom/alibaba/fastjson/parser/Feature;
|
|
|
|
return-void
|
|
.end method
|
|
|
|
.method public constructor <init>([Ljava/lang/Class;)V
|
|
.locals 2
|
|
.annotation system Ldalvik/annotation/Signature;
|
|
value = {
|
|
"([",
|
|
"Ljava/lang/Class<",
|
|
"*>;)V"
|
|
}
|
|
.end annotation
|
|
|
|
.line 59
|
|
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
|
|
|
const/4 v0, 0x0
|
|
|
|
.line 35
|
|
iput-object v0, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->clazzes:[Ljava/lang/Class;
|
|
|
|
.line 37
|
|
invoke-static {}, Lcom/alibaba/fastjson/serializer/SerializeConfig;->getGlobalInstance()Lcom/alibaba/fastjson/serializer/SerializeConfig;
|
|
|
|
move-result-object v0
|
|
|
|
iput-object v0, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->serializeConfig:Lcom/alibaba/fastjson/serializer/SerializeConfig;
|
|
|
|
.line 38
|
|
invoke-static {}, Lcom/alibaba/fastjson/parser/ParserConfig;->getGlobalInstance()Lcom/alibaba/fastjson/parser/ParserConfig;
|
|
|
|
move-result-object v0
|
|
|
|
iput-object v0, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->parserConfig:Lcom/alibaba/fastjson/parser/ParserConfig;
|
|
|
|
const/4 v0, 0x0
|
|
|
|
.line 39
|
|
new-array v1, v0, [Lcom/alibaba/fastjson/serializer/SerializerFeature;
|
|
|
|
iput-object v1, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->serializerFeatures:[Lcom/alibaba/fastjson/serializer/SerializerFeature;
|
|
|
|
.line 40
|
|
new-array v0, v0, [Lcom/alibaba/fastjson/parser/Feature;
|
|
|
|
iput-object v0, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->features:[Lcom/alibaba/fastjson/parser/Feature;
|
|
|
|
.line 60
|
|
iput-object p1, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->clazzes:[Ljava/lang/Class;
|
|
|
|
return-void
|
|
.end method
|
|
|
|
|
|
# virtual methods
|
|
.method public getSize(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/reflect/Type;[Ljava/lang/annotation/Annotation;Ljavax/ws/rs/core/MediaType;)J
|
|
.locals 0
|
|
.annotation system Ldalvik/annotation/Signature;
|
|
value = {
|
|
"(",
|
|
"Ljava/lang/Object;",
|
|
"Ljava/lang/Class<",
|
|
"*>;",
|
|
"Ljava/lang/reflect/Type;",
|
|
"[",
|
|
"Ljava/lang/annotation/Annotation;",
|
|
"Ljavax/ws/rs/core/MediaType;",
|
|
")J"
|
|
}
|
|
.end annotation
|
|
|
|
const-wide/16 p1, -0x1
|
|
|
|
return-wide p1
|
|
.end method
|
|
|
|
.method protected hasMatchingMediaType(Ljavax/ws/rs/core/MediaType;)Z
|
|
.locals 2
|
|
|
|
const/4 v0, 0x1
|
|
|
|
if-eqz p1, :cond_2
|
|
|
|
.line 96
|
|
invoke-virtual {p1}, Ljavax/ws/rs/core/MediaType;->getSubtype()Ljava/lang/String;
|
|
|
|
move-result-object p1
|
|
|
|
const-string v1, "json"
|
|
|
|
.line 97
|
|
invoke-virtual {v1, p1}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z
|
|
|
|
move-result v1
|
|
|
|
if-nez v1, :cond_1
|
|
|
|
const-string v1, "+json"
|
|
|
|
invoke-virtual {p1, v1}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z
|
|
|
|
move-result v1
|
|
|
|
if-nez v1, :cond_1
|
|
|
|
const-string v1, "javascript"
|
|
|
|
invoke-virtual {v1, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
|
|
|
move-result v1
|
|
|
|
if-nez v1, :cond_1
|
|
|
|
const-string v1, "x-javascript"
|
|
|
|
invoke-virtual {v1, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
|
|
|
move-result p1
|
|
|
|
if-eqz p1, :cond_0
|
|
|
|
goto :goto_0
|
|
|
|
:cond_0
|
|
const/4 v0, 0x0
|
|
|
|
:cond_1
|
|
:goto_0
|
|
return v0
|
|
|
|
:cond_2
|
|
return v0
|
|
.end method
|
|
|
|
.method public isReadable(Ljava/lang/Class;Ljava/lang/reflect/Type;[Ljava/lang/annotation/Annotation;Ljavax/ws/rs/core/MediaType;)Z
|
|
.locals 0
|
|
.annotation system Ldalvik/annotation/Signature;
|
|
value = {
|
|
"(",
|
|
"Ljava/lang/Class<",
|
|
"*>;",
|
|
"Ljava/lang/reflect/Type;",
|
|
"[",
|
|
"Ljava/lang/annotation/Annotation;",
|
|
"Ljavax/ws/rs/core/MediaType;",
|
|
")Z"
|
|
}
|
|
.end annotation
|
|
|
|
.line 167
|
|
invoke-virtual {p0, p4}, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->hasMatchingMediaType(Ljavax/ws/rs/core/MediaType;)Z
|
|
|
|
move-result p2
|
|
|
|
if-nez p2, :cond_0
|
|
|
|
const/4 p1, 0x0
|
|
|
|
return p1
|
|
|
|
.line 171
|
|
:cond_0
|
|
invoke-virtual {p0, p1, p3}, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->isValidType(Ljava/lang/Class;[Ljava/lang/annotation/Annotation;)Z
|
|
|
|
move-result p1
|
|
|
|
return p1
|
|
.end method
|
|
|
|
.method protected isValidType(Ljava/lang/Class;[Ljava/lang/annotation/Annotation;)Z
|
|
.locals 5
|
|
.annotation system Ldalvik/annotation/Signature;
|
|
value = {
|
|
"(",
|
|
"Ljava/lang/Class<",
|
|
"*>;[",
|
|
"Ljava/lang/annotation/Annotation;",
|
|
")Z"
|
|
}
|
|
.end annotation
|
|
|
|
const/4 p2, 0x0
|
|
|
|
if-nez p1, :cond_0
|
|
|
|
return p2
|
|
|
|
.line 74
|
|
:cond_0
|
|
iget-object v0, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->clazzes:[Ljava/lang/Class;
|
|
|
|
const/4 v1, 0x1
|
|
|
|
if-eqz v0, :cond_3
|
|
|
|
.line 75
|
|
iget-object v0, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->clazzes:[Ljava/lang/Class;
|
|
|
|
array-length v2, v0
|
|
|
|
const/4 v3, 0x0
|
|
|
|
:goto_0
|
|
if-ge v3, v2, :cond_2
|
|
|
|
aget-object v4, v0, v3
|
|
|
|
if-ne v4, p1, :cond_1
|
|
|
|
return v1
|
|
|
|
:cond_1
|
|
add-int/lit8 v3, v3, 0x1
|
|
|
|
goto :goto_0
|
|
|
|
:cond_2
|
|
return p2
|
|
|
|
:cond_3
|
|
return v1
|
|
.end method
|
|
|
|
.method public isWriteable(Ljava/lang/Class;Ljava/lang/reflect/Type;[Ljava/lang/annotation/Annotation;Ljavax/ws/rs/core/MediaType;)Z
|
|
.locals 0
|
|
.annotation system Ldalvik/annotation/Signature;
|
|
value = {
|
|
"(",
|
|
"Ljava/lang/Class<",
|
|
"*>;",
|
|
"Ljava/lang/reflect/Type;",
|
|
"[",
|
|
"Ljava/lang/annotation/Annotation;",
|
|
"Ljavax/ws/rs/core/MediaType;",
|
|
")Z"
|
|
}
|
|
.end annotation
|
|
|
|
.line 113
|
|
invoke-virtual {p0, p4}, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->hasMatchingMediaType(Ljavax/ws/rs/core/MediaType;)Z
|
|
|
|
move-result p2
|
|
|
|
if-nez p2, :cond_0
|
|
|
|
const/4 p1, 0x0
|
|
|
|
return p1
|
|
|
|
.line 117
|
|
:cond_0
|
|
invoke-virtual {p0, p1, p3}, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->isValidType(Ljava/lang/Class;[Ljava/lang/annotation/Annotation;)Z
|
|
|
|
move-result p1
|
|
|
|
return p1
|
|
.end method
|
|
|
|
.method public readFrom(Ljava/lang/Class;Ljava/lang/reflect/Type;[Ljava/lang/annotation/Annotation;Ljavax/ws/rs/core/MediaType;Ljavax/ws/rs/core/MultivaluedMap;Ljava/io/InputStream;)Ljava/lang/Object;
|
|
.locals 0
|
|
.annotation system Ldalvik/annotation/Signature;
|
|
value = {
|
|
"(",
|
|
"Ljava/lang/Class<",
|
|
"Ljava/lang/Object;",
|
|
">;",
|
|
"Ljava/lang/reflect/Type;",
|
|
"[",
|
|
"Ljava/lang/annotation/Annotation;",
|
|
"Ljavax/ws/rs/core/MediaType;",
|
|
"Ljavax/ws/rs/core/MultivaluedMap<",
|
|
"Ljava/lang/String;",
|
|
"Ljava/lang/String;",
|
|
">;",
|
|
"Ljava/io/InputStream;",
|
|
")",
|
|
"Ljava/lang/Object;"
|
|
}
|
|
.end annotation
|
|
|
|
.annotation system Ldalvik/annotation/Throws;
|
|
value = {
|
|
Ljava/io/IOException;,
|
|
Ljavax/ws/rs/WebApplicationException;
|
|
}
|
|
.end annotation
|
|
|
|
const/4 p2, 0x0
|
|
|
|
.line 181
|
|
:try_start_0
|
|
invoke-static {p6}, Lcom/alibaba/fastjson/util/IOUtils;->toString(Ljava/io/InputStream;)Ljava/lang/String;
|
|
|
|
move-result-object p3
|
|
:try_end_0
|
|
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
|
|
|
|
goto :goto_0
|
|
|
|
:catch_0
|
|
move-object p3, p2
|
|
|
|
:goto_0
|
|
if-nez p3, :cond_0
|
|
|
|
return-object p2
|
|
|
|
.line 190
|
|
:cond_0
|
|
iget-object p2, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->parserConfig:Lcom/alibaba/fastjson/parser/ParserConfig;
|
|
|
|
sget p4, Lcom/alibaba/fastjson/JSON;->DEFAULT_PARSER_FEATURE:I
|
|
|
|
iget-object p5, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->features:[Lcom/alibaba/fastjson/parser/Feature;
|
|
|
|
invoke-static {p3, p1, p2, p4, p5}, Lcom/alibaba/fastjson/JSON;->parseObject(Ljava/lang/String;Ljava/lang/reflect/Type;Lcom/alibaba/fastjson/parser/ParserConfig;I[Lcom/alibaba/fastjson/parser/Feature;)Ljava/lang/Object;
|
|
|
|
move-result-object p1
|
|
|
|
return-object p1
|
|
.end method
|
|
|
|
.method public writeTo(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/reflect/Type;[Ljava/lang/annotation/Annotation;Ljavax/ws/rs/core/MediaType;Ljavax/ws/rs/core/MultivaluedMap;Ljava/io/OutputStream;)V
|
|
.locals 0
|
|
.annotation system Ldalvik/annotation/Signature;
|
|
value = {
|
|
"(",
|
|
"Ljava/lang/Object;",
|
|
"Ljava/lang/Class<",
|
|
"*>;",
|
|
"Ljava/lang/reflect/Type;",
|
|
"[",
|
|
"Ljava/lang/annotation/Annotation;",
|
|
"Ljavax/ws/rs/core/MediaType;",
|
|
"Ljavax/ws/rs/core/MultivaluedMap<",
|
|
"Ljava/lang/String;",
|
|
"Ljava/lang/Object;",
|
|
">;",
|
|
"Ljava/io/OutputStream;",
|
|
")V"
|
|
}
|
|
.end annotation
|
|
|
|
.annotation system Ldalvik/annotation/Throws;
|
|
value = {
|
|
Ljava/io/IOException;,
|
|
Ljavax/ws/rs/WebApplicationException;
|
|
}
|
|
.end annotation
|
|
|
|
.line 135
|
|
iget-object p3, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->serializerFeatures:[Lcom/alibaba/fastjson/serializer/SerializerFeature;
|
|
|
|
.line 136
|
|
iget-object p4, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->uriInfo:Ljavax/ws/rs/core/UriInfo;
|
|
|
|
if-eqz p4, :cond_1
|
|
|
|
iget-object p4, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->uriInfo:Ljavax/ws/rs/core/UriInfo;
|
|
|
|
invoke-interface {p4}, Ljavax/ws/rs/core/UriInfo;->getQueryParameters()Ljavax/ws/rs/core/MultivaluedMap;
|
|
|
|
move-result-object p4
|
|
|
|
const-string p5, "pretty"
|
|
|
|
invoke-interface {p4, p5}, Ljavax/ws/rs/core/MultivaluedMap;->containsKey(Ljava/lang/Object;)Z
|
|
|
|
move-result p4
|
|
|
|
if-eqz p4, :cond_1
|
|
|
|
if-nez p3, :cond_0
|
|
|
|
const/4 p3, 0x1
|
|
|
|
.line 138
|
|
new-array p3, p3, [Lcom/alibaba/fastjson/serializer/SerializerFeature;
|
|
|
|
const/4 p4, 0x0
|
|
|
|
sget-object p5, Lcom/alibaba/fastjson/serializer/SerializerFeature;->PrettyFormat:Lcom/alibaba/fastjson/serializer/SerializerFeature;
|
|
|
|
aput-object p5, p3, p4
|
|
|
|
goto :goto_0
|
|
|
|
.line 140
|
|
:cond_0
|
|
invoke-static {p3}, Ljava/util/Arrays;->asList([Ljava/lang/Object;)Ljava/util/List;
|
|
|
|
move-result-object p4
|
|
|
|
.line 141
|
|
sget-object p5, Lcom/alibaba/fastjson/serializer/SerializerFeature;->PrettyFormat:Lcom/alibaba/fastjson/serializer/SerializerFeature;
|
|
|
|
invoke-interface {p4, p5}, Ljava/util/List;->add(Ljava/lang/Object;)Z
|
|
|
|
.line 142
|
|
invoke-interface {p4, p3}, Ljava/util/List;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
|
|
|
|
move-result-object p3
|
|
|
|
check-cast p3, [Lcom/alibaba/fastjson/serializer/SerializerFeature;
|
|
|
|
.line 146
|
|
:cond_1
|
|
:goto_0
|
|
iget-object p4, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->serializeFilters:Ljava/util/Map;
|
|
|
|
if-eqz p4, :cond_2
|
|
|
|
.line 147
|
|
iget-object p4, p0, Lcom/alibaba/fastjson/support/jaxrs/FastJsonProvider;->serializeFilters:Ljava/util/Map;
|
|
|
|
invoke-interface {p4, p2}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
|
|
|
|
move-result-object p2
|
|
|
|
check-cast p2, Lcom/alibaba/fastjson/serializer/SerializeFilter;
|
|
|
|
goto :goto_1
|
|
|
|
:cond_2
|
|
const/4 p2, 0x0
|
|
|
|
.line 150
|
|
:goto_1
|
|
invoke-static {p1, p2, p3}, Lcom/alibaba/fastjson/JSON;->toJSONString(Ljava/lang/Object;Lcom/alibaba/fastjson/serializer/SerializeFilter;[Lcom/alibaba/fastjson/serializer/SerializerFeature;)Ljava/lang/String;
|
|
|
|
move-result-object p1
|
|
|
|
if-eqz p1, :cond_3
|
|
|
|
.line 152
|
|
invoke-virtual {p1}, Ljava/lang/String;->getBytes()[B
|
|
|
|
move-result-object p1
|
|
|
|
invoke-virtual {p7, p1}, Ljava/io/OutputStream;->write([B)V
|
|
|
|
:cond_3
|
|
return-void
|
|
.end method
|