2 * Copyright 2016 Huawei Technologies Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.openo.nfvo.jujuvnfmadapter.common;
19 import java.io.IOException;
20 import java.io.InputStream;
21 import java.text.SimpleDateFormat;
22 import java.util.ArrayList;
23 import java.util.Date;
24 import java.util.List;
26 import javax.servlet.http.HttpServletRequest;
28 import org.apache.commons.io.IOUtils;
29 import org.codehaus.jackson.map.ObjectMapper;
30 import org.codehaus.jackson.type.TypeReference;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
34 import net.sf.ezmorph.object.DateMorpher;
35 import net.sf.json.JSON;
36 import net.sf.json.JSONArray;
37 import net.sf.json.JSONException;
38 import net.sf.json.JSONObject;
39 import net.sf.json.JsonConfig;
40 import net.sf.json.processors.JsonValueProcessor;
41 import net.sf.json.util.CycleDetectionStrategy;
42 import net.sf.json.util.JSONTokener;
43 import net.sf.json.util.JSONUtils;
47 * Virtual Network Function Json Utility class.<br>
52 * @version NFVO 0.5 Sep 10, 2016
54 public final class VNFJsonUtil {
56 private static final Logger LOG = LoggerFactory.getLogger(VNFJsonUtil.class);
58 private static final ObjectMapper VNFMAPPER = new ObjectMapper();
60 private static final String ERROR = "error";
62 VNFMAPPER.setDeserializationConfig(VNFMAPPER.getDeserializationConfig()
63 .without(org.codehaus.jackson.map.DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES));
66 private VNFJsonUtil() {
71 * UnMarshal method.<br>
79 public static <T> T unMarshal(String vnfJsonstr, Class<T> type) throws IOException {
80 return VNFMAPPER.readValue(vnfJsonstr, type);
85 * UnMarshal method.<br>
93 public static <T> T unMarshal(String vnfJsonstr, TypeReference<T> type) throws IOException {
94 return VNFMAPPER.readValue(vnfJsonstr, type);
103 * @throws IOException
106 public static String marshal(Object srcObj) throws IOException {
107 if(srcObj instanceof JSON) {
108 return srcObj.toString();
110 return VNFMAPPER.writeValueAsString(srcObj);
113 public static ObjectMapper getMapper() {
119 * Get Json field string.<br>
126 public static String getJsonFieldStr(JSONObject vnfJsonObj, String fieldName) {
127 if(null == vnfJsonObj || null == vnfJsonObj.get(fieldName) || "null".equals(vnfJsonObj.getString(fieldName))) {
128 LOG.warn("getJsonFieldStr: VNFJson object field(" + fieldName + ") is null.");
132 return vnfJsonObj.getString(fieldName);
137 * Get Json field integer.<br>
144 public static Integer getJsonFieldInt(JSONObject vnfJsonObj, String fieldName) {
145 if(null == vnfJsonObj || null == vnfJsonObj.get(fieldName)) {
146 LOG.warn("getJsonFieldInt: VNFJson object field(" + fieldName + ") is Null");
149 return vnfJsonObj.getInt(fieldName);
154 * Get Json field long.<br>
161 public static Long getJsonFieldLong(JSONObject vnfJsonObj, String fieldName) {
162 if(null == vnfJsonObj || null == vnfJsonObj.get(fieldName)) {
163 LOG.warn("getJsonFieldLong: VNFJson object field(" + fieldName + ") is null");
166 return vnfJsonObj.getLong(fieldName);
171 * Parse error information.<br>
177 public static String parseErrorInfo(String errorInfo) {
178 if((errorInfo != null) && (!errorInfo.isEmpty())) {
179 JSONObject errorInfoJst = JSONObject.fromObject(errorInfo);
180 if(errorInfoJst.has(ERROR) && errorInfoJst.getJSONObject(ERROR).has("message")) {
181 return errorInfoJst.getJSONObject(ERROR).getString("message");
184 return "System Error!";
188 VNFMAPPER.setDeserializationConfig(VNFMAPPER.getDeserializationConfig()
189 .without(org.codehaus.jackson.map.DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES));
194 * Convert VNF Json to objects.<br>
196 * @param vnfJsonString
201 @SuppressWarnings("unchecked")
202 public static <T> T vnfJsonToObjects(String vnfJsonString, Class<T> pojoCalss) {
203 JSONObject vnfJsonObject = JSONObject.fromObject(vnfJsonString);
204 return (T)JSONObject.toBean(vnfJsonObject, pojoCalss);
209 * Convert VNF Json to objects.<br>
211 * @param vnfJsonString
212 * @param vnfJsonConfig
216 @SuppressWarnings("unchecked")
217 public static <T> T vnfJsonToObjects(String vnfJsonString, JsonConfig vnfJsonConfig) {
218 JSONObject vnfJsonObject = JSONObject.fromObject(vnfJsonString);
219 return (T)JSONObject.toBean(vnfJsonObject, vnfJsonConfig);
224 * Convert VNF Json to lists.<br>
226 * @param vnfJsonString
231 @SuppressWarnings("unchecked")
232 public static <T> List<T> vnfJsonToLists(String vnfJsonString, Class<T> pojoClass) {
233 JSONArray vnfJsonVNFArray = JSONArray.fromObject(vnfJsonString);
234 JSONObject vnfJsonObject;
235 List<T> list = new ArrayList<>(20);
236 for(int i = 0; i < vnfJsonVNFArray.size(); i++) {
237 vnfJsonObject = vnfJsonVNFArray.getJSONObject(i);
238 list.add((T)JSONObject.toBean(vnfJsonObject, pojoClass));
245 * Convert VNF Json to list.<br>
247 * @param vnfJsonString
253 @SuppressWarnings("unchecked")
254 public static <T> List<T> vnfJsonToList(String vnfJsonString, Class<T> pojoClass, String dataFormat) {
255 JsonConfig vnfJsonConfig = configJson(dataFormat);
256 JSONArray vnfJsonVNFArray = JSONArray.fromObject(vnfJsonString, vnfJsonConfig);
257 JSONObject vnfJsonObject;
258 List<T> list = new ArrayList<>(20);
259 for(int i = 0; i < vnfJsonVNFArray.size(); i++) {
260 vnfJsonObject = vnfJsonVNFArray.getJSONObject(i);
261 list.add((T)JSONObject.toBean(vnfJsonObject, pojoClass));
268 * Object to json string.<br>
274 public static String objectToJsonStr(Object javaObj) {
275 JSONObject vnfJson = JSONObject.fromObject(javaObj);
276 return vnfJson.toString();
281 * object to json.<br>
287 public static JSONObject objectToJson(Object javaObj) {
288 return JSONObject.fromObject(javaObj);
293 * Object to json.<br>
296 * @param vnfJsonConfig
300 public static String objectToJson(Object javaObj, JsonConfig vnfJsonConfig) {
301 JSONObject vnfJson = JSONObject.fromObject(javaObj, vnfJsonConfig);
302 return vnfJson.toString();
307 * Object to json.<br>
314 public static String objectToJson(Object javaObj, String dataFormat) {
315 JsonConfig vnfJsonConfig = configJson(dataFormat);
316 JSONObject vnfJson = JSONObject.fromObject(javaObj, vnfJsonConfig);
317 return vnfJson.toString();
329 public static <T> String listToJson(List<T> list) {
330 JSONArray vnfJson = JSONArray.fromObject(list);
331 return vnfJson.toString();
343 public static <T> String listToJson(List<T> list, String dataFormat) {
344 JsonConfig vnfJsonConfig = configJson(dataFormat);
345 JSONArray vnfJson = JSONArray.fromObject(list, vnfJsonConfig);
346 return vnfJson.toString();
357 public static JsonConfig configJson(final String datePattern) {
359 JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {datePattern}));
361 JsonConfig vnfJsonConfig = new JsonConfig();
362 vnfJsonConfig.setIgnoreDefaultExcludes(false);
363 vnfJsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
364 vnfJsonConfig.registerJsonValueProcessor(Date.class, new JsonValueProcessor() {
366 public Object processObjectValue(String key, Object value, JsonConfig vnfJsonConfig) {
367 if(value instanceof Date) {
368 return new SimpleDateFormat(datePattern).format((Date)value);
370 return value == null ? null : value.toString();
373 public Object processArrayValue(Object value, JsonConfig vnfJsonConfig) {
374 String[] vnfObj = {};
375 SimpleDateFormat vnfSf = new SimpleDateFormat(datePattern);
376 if(value instanceof Date[]) {
377 Date[] dates = (Date[])value;
378 vnfObj = new String[dates.length];
379 for(int i = 0; i < dates.length; i++) {
380 vnfObj[i] = vnfSf.format(dates[i]);
386 return vnfJsonConfig;
390 * @param context the HttpContext
391 * @param <T> JSONObject or JSONArray
394 @SuppressWarnings("unchecked")
395 public static <T> T getJsonFromContext(HttpServletRequest context) {
397 InputStream input = context.getInputStream();
398 String vnfJsonStr = IOUtils.toString(input);
399 JSONTokener vnfVnfJsonTokener = new JSONTokener(vnfJsonStr);
402 if(vnfVnfJsonTokener.nextClean() == Character.codePointAt("{", 0)) {
403 return (T)JSONObject.fromObject(vnfJsonStr);
406 vnfVnfJsonTokener.back();
409 if(vnfVnfJsonTokener.nextClean() == Character.codePointAt("[", 0)) {
410 return (T)JSONArray.fromObject(vnfJsonStr);
412 } catch(IOException e) {
413 LOG.error("function=getJsonFromContext,msg= IOException occurs. exception=" + e);
414 } catch(JSONException e) {
415 LOG.error("function=getJsonFromContext,msg= JSONException occurs, exception=" + e);