001/** 002 * Copyright (C) 2006-2024 Talend Inc. - www.talend.com 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.talend.sdk.component.runtime.manager.service; 017 018import java.io.InputStream; 019import java.io.ObjectStreamException; 020import java.io.OutputStream; 021import java.io.Reader; 022import java.io.Serializable; 023import java.io.Writer; 024import java.lang.reflect.Type; 025import java.util.Objects; 026import java.util.stream.Stream; 027 028import javax.json.bind.Jsonb; 029import javax.json.bind.JsonbException; 030 031import org.talend.sdk.component.runtime.record.json.PojoJsonbProvider; 032import org.talend.sdk.component.runtime.serialization.SerializableService; 033 034import lombok.Getter; 035import lombok.RequiredArgsConstructor; 036import lombok.extern.slf4j.Slf4j; 037 038@Slf4j 039@RequiredArgsConstructor 040public class GenericOrPojoJsonb implements Jsonb, PojoJsonbProvider, Serializable { 041 042 private final String plugin; 043 044 private final Jsonb jsonb; 045 046 @Getter 047 private final Jsonb pojoMapper; 048 049 @Override 050 public Jsonb get() { 051 return pojoMapper; 052 } 053 054 @Override 055 public void close() { 056 Stream.of(jsonb, pojoMapper).filter(Objects::nonNull).forEach(it -> { 057 try { 058 it.close(); 059 } catch (final Exception e) { 060 log.warn(e.getMessage(), e); 061 } 062 }); 063 } 064 065 @Override 066 public <T> T fromJson(final String str, final Class<T> type) throws JsonbException { 067 return jsonb.fromJson(str, type); 068 } 069 070 @Override 071 public <T> T fromJson(final String str, final Type runtimeType) throws JsonbException { 072 return jsonb.fromJson(str, runtimeType); 073 } 074 075 @Override 076 public <T> T fromJson(final Reader reader, final Class<T> type) throws JsonbException { 077 return jsonb.fromJson(reader, type); 078 } 079 080 @Override 081 public <T> T fromJson(final Reader reader, final Type runtimeType) throws JsonbException { 082 return jsonb.fromJson(reader, runtimeType); 083 } 084 085 @Override 086 public <T> T fromJson(final InputStream stream, final Class<T> type) throws JsonbException { 087 return jsonb.fromJson(stream, type); 088 } 089 090 @Override 091 public <T> T fromJson(final InputStream stream, final Type runtimeType) throws JsonbException { 092 return jsonb.fromJson(stream, runtimeType); 093 } 094 095 @Override 096 public String toJson(final Object object) throws JsonbException { 097 return jsonb.toJson(object); 098 } 099 100 @Override 101 public String toJson(final Object object, final Type runtimeType) throws JsonbException { 102 return jsonb.toJson(object, runtimeType); 103 } 104 105 @Override 106 public void toJson(final Object object, final Writer writer) throws JsonbException { 107 jsonb.toJson(object, writer); 108 } 109 110 @Override 111 public void toJson(final Object object, final Type runtimeType, final Writer writer) throws JsonbException { 112 jsonb.toJson(object, runtimeType, writer); 113 } 114 115 @Override 116 public void toJson(final Object object, final OutputStream stream) throws JsonbException { 117 jsonb.toJson(object, stream); 118 } 119 120 @Override 121 public void toJson(final Object object, final Type runtimeType, final OutputStream stream) throws JsonbException { 122 jsonb.toJson(object, runtimeType, stream); 123 } 124 125 Object writeReplace() throws ObjectStreamException { 126 return new SerializableService(plugin, Jsonb.class.getName()); 127 } 128}