/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.web.server.conversion; import java.io.IOException; import java.io.StringWriter; import org.eclipse.jetty.util.ajax.JSON; import org.fudgemsg.FudgeContext; import org.fudgemsg.FudgeMsgEnvelope; import org.fudgemsg.wire.FudgeStreamWriter; import org.fudgemsg.wire.json.FudgeJSONStreamWriter; /** * A fall-back for complex types for which no custom converter has been registered. * The function result must be serializable somehow as a Fudge message, * and from this we can generate a JSON string. */ public class FudgeBasedJsonGenerator implements JSON.Generator { private final FudgeContext _fudgeContext; private final Object _value; public FudgeBasedJsonGenerator(FudgeContext fudgeContext, Object value) { _fudgeContext = fudgeContext; _value = value; } @Override public void addJSON(Appendable buffer) { StringWriter stringWriter = new StringWriter(); FudgeStreamWriter fudgeWriter = new FudgeJSONStreamWriter(_fudgeContext, stringWriter); FudgeMsgEnvelope msg = _fudgeContext.toFudgeMsg(_value); fudgeWriter.writeFields(msg.getMessage()); fudgeWriter.flush(); fudgeWriter.close(); try { buffer.append(stringWriter.toString()); } catch (IOException ex) { throw new RuntimeException(ex); } } }