Package io.s4.client

Source Code of io.s4.client.GenericJsonClientStub

/*
* Copyright (c) 2010 Yahoo! Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*           http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific
* language governing permissions and limitations under the
* License. See accompanying LICENSE file.
*/
package io.s4.client;

import io.s4.client.util.ObjectBuilder;
import io.s4.collector.EventWrapper;
import io.s4.util.GsonUtil;

import java.nio.charset.Charset;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class GenericJsonClientStub extends ClientStub {

    // private static final ObjectBuilder builder = new ObjectBuilder();
    // private static final Gson builder = new Gson();

    private static final Info protocolInfo = new Info("generic-json", 1, 0);

    @Override
    public Info getProtocolInfo() {
        return protocolInfo;
    }

    @Override
    public EventWrapper eventWrapperFromBytes(byte[] v) {
        try {
            // interpret v as a JSON string
            String s = new String(v, Charset.forName("UTF8"));
            JSONObject json = new JSONObject(s);

            String streamName = json.getString("stream");
            String className = json.getString("class");

            Class<?> clazz;
            try {
                clazz = Class.forName(className);
            } catch (ClassNotFoundException e) {
                throw new ObjectBuilder.Exception("bad class name for json-encoded object: "
                                                          + className,
                                                  e);
            }

            String[] keyNames = null;
            JSONArray keyArray = json.optJSONArray("keys");
            if (keyArray != null) {
                keyNames = new String[keyArray.length()];
                for (int i = 0; i < keyNames.length; ++i) {
                    keyNames[i] = keyArray.optString(i);
                }
            }

            String jevent = json.getString("object");

            Object obj = GsonUtil.get().fromJson(jevent, clazz);

            return new EventWrapper(streamName, keyNames, obj);

        } catch (JSONException e) {
            logger.error("problem with event JSON", e);
        } catch (ObjectBuilder.Exception e) {
            logger.error("failed to build object from JSON", e);
        }

        return null;
    }

    @Override
    public byte[] bytesFromEventWrapper(EventWrapper ew) {
        JSONObject jevent = new JSONObject();

        Object obj = ew.getEvent();

        try {
            jevent.put("stream", ew.getStreamName());
            jevent.put("class", obj.getClass().getName());
            jevent.put("object", GsonUtil.get().toJson(obj));

            return jevent.toString().getBytes(Charset.forName("UTF8"));

        } catch (JSONException e) {
            logger.error("exception while converting event wrapper to bytes.",
                         e);
            return null;
        }
    }
}
TOP

Related Classes of io.s4.client.GenericJsonClientStub

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.