[
https://issues.apache.org/jira/browse/JOHNZON-213?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16863921#comment-16863921
]
Romain Manni-Bucau commented on JOHNZON-213:
--------------------------------------------
Hi [~jinahya], didn't you forget to set the adapter on the setter? This test
passes for me:
{code}
@Test
public void jira_JOHNZON213() throws Exception {
try (final Jsonb jsonb = JsonbBuilder.create()) {
final Child child = new Child();
child.options = new SomeOptions("ok");
final String json = jsonb.toJson(child);
assertEquals("{\"options\":\"ok\"}", json);
final Child deserialized = jsonb.fromJson(json, Child.class);
assertNotNull(deserialized.options);
assertEquals("ok", deserialized.options.value);
}
}
public static class Base {
}
public static class SomeOptions extends Base {
private final String value;
public SomeOptions(final String value) {
this.value = value;
}
@Override
public String toString() {
return value;
}
}
public static class Parent<T extends Base> {
protected T options;
}
public static class Child extends Parent<SomeOptions> {
@JsonbTypeAdapter(SomeOptionsTypeAdapter.class)
public SomeOptions getOptions() {
return options;
}
@JsonbTypeAdapter(SomeOptionsTypeAdapter.class)
public void setOptions(final SomeOptions options) {
this.options = options;
}
}
public static class SomeOptionsTypeAdapter implements
JsonbAdapter<SomeOptions, String> {
@Override
public String adaptToJson(final SomeOptions obj) {
return obj.toString();
}
@Override
public SomeOptions adaptFromJson(final String obj) {
return new SomeOptions(obj);
}
}
{code}
> Make @JsonbTypeAdapter works with accessors
> -------------------------------------------
>
> Key: JOHNZON-213
> URL: https://issues.apache.org/jira/browse/JOHNZON-213
> Project: Johnzon
> Issue Type: Bug
> Components: JSON-B
> Affects Versions: 1.1.12
> Reporter: Jin Kwon
> Priority: Major
>
> For some reasons, I need to annotate an overridden method with an
> {{@JsonbTypeAdapter}}.
> {code:java}
> class Parent<T extends ...> {
> T options;
> }
> class Child extends Parent<SomeOptions> {
> @JsonbTypeAdapter(value = SomeOptionsTypeAdapter.class)
> public SomeOptions getOptions() {
> return super.getOptions();
> }
> }
> {code}
> Now Johnzon complains.
> {code}
> javax.json.bind.JsonbException: Missing a Converter for type class
> ...Params$Options to convert the JSON String '{"..."}' . Please register a
> custom converter for it.
> Caused by: org.apache.johnzon.mapper.MapperException: Missing a Converter for
> type class ...Params$Options to convert the JSON String '{"..."}' . Please
> register a custom converter for it.
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)