Archived

This forum has been archived. Please start a new discussion on GitHub.

Helper Classes not Generated

Hi, I'm trying to follow the streaming example to use streaming in my application. However, the helper class needed to perform this operation - KodkodModelHelper.write(out, c)) is not generated.
#ifndef INVOKE_ICE
#define INVOKE_ICE

module OpenRec2 {
	exception PrintFailure	{
	    string reason;
	};
	class KodkodModel {
		void solve();
	};

#endif

The generated classes are:
KodkodModel, KodkodModelHolder, KodkodModelPrx, KodkodModelPrxHelper and KodkodModelPrxHolder but there is no KodkodModelHelper.

Is there something I missed in the SLICE descriptor?

Here is the code for KodkodModel.java:
// **********************************************************************
//
// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************

// Ice version 3.1.1

package OpenRec2;

public abstract class KodkodModel extends Ice.ObjectImpl
				  implements _KodkodModelOperations,
					     _KodkodModelOperationsNC
{
    public static final String[] __ids =
    {
	"::Ice::Object",
	"::OpenRec2::KodkodModel"
    };

    public boolean
    ice_isA(String s)
    {
	return java.util.Arrays.binarySearch(__ids, s) >= 0;
    }

    public boolean
    ice_isA(String s, Ice.Current __current)
    {
	return java.util.Arrays.binarySearch(__ids, s) >= 0;
    }

    public String[]
    ice_ids()
    {
	return __ids;
    }

    public String[]
    ice_ids(Ice.Current __current)
    {
	return __ids;
    }

    public String
    ice_id()
    {
	return __ids[1];
    }

    public String
    ice_id(Ice.Current __current)
    {
	return __ids[1];
    }

    public static String
    ice_staticId()
    {
	return __ids[1];
    }

    public final void
    solve()
    {
	solve(null);
    }

    public static IceInternal.DispatchStatus
    ___solve(KodkodModel __obj, IceInternal.Incoming __inS, Ice.Current __current)
    {
	__checkMode(Ice.OperationMode.Normal, __current.mode);
	__obj.solve(__current);
	return IceInternal.DispatchStatus.DispatchOK;
    }

    private final static String[] __all =
    {
	"ice_id",
	"ice_ids",
	"ice_isA",
	"ice_ping",
	"solve"
    };

    public IceInternal.DispatchStatus
    __dispatch(IceInternal.Incoming in, Ice.Current __current)
    {
	int pos = java.util.Arrays.binarySearch(__all, __current.operation);
	if(pos < 0)
	{
	    return IceInternal.DispatchStatus.DispatchOperationNotExist;
	}

	switch(pos)
	{
	    case 0:
	    {
		return ___ice_id(this, in, __current);
	    }
	    case 1:
	    {
		return ___ice_ids(this, in, __current);
	    }
	    case 2:
	    {
		return ___ice_isA(this, in, __current);
	    }
	    case 3:
	    {
		return ___ice_ping(this, in, __current);
	    }
	    case 4:
	    {
		return ___solve(this, in, __current);
	    }
	}

	assert(false);
	return IceInternal.DispatchStatus.DispatchOperationNotExist;
    }

    public void
    __write(IceInternal.BasicStream __os)
    {
	__os.writeTypeId(ice_staticId());
	__os.startWriteSlice();
	__os.endWriteSlice();
	super.__write(__os);
    }

    public void
    __read(IceInternal.BasicStream __is, boolean __rid)
    {
	if(__rid)
	{
	    __is.readTypeId();
	}
	__is.startReadSlice();
	__is.endReadSlice();
	super.__read(__is, true);
    }

    public void
    __write(Ice.OutputStream __outS)
    {
	Ice.MarshalException ex = new Ice.MarshalException();
	ex.reason = "type OpenRec2::KodkodModel was not generated with stream support";
	throw ex;
    }

    public void
    __read(Ice.InputStream __inS, boolean __rid)
    {
	Ice.MarshalException ex = new Ice.MarshalException();
	ex.reason = "type OpenRec2::KodkodModel was not generated with stream support";
	throw ex;
    }
}

Comments

  • mes
    mes California
    Hi,

    An instance of a Slice class is marshaled using OutputStream.writeObject.

    Take care,
    - Mark
  • How do I demarshall it from the stream if I don't want to use in.readObject() as I prefer not to use callback objects. It's just a simple object that needs to be passed across the stream.
  • There is no other way to unmarshal class instances. The reason is the way classes are marshaled. (See the Ice Protocol chapter in the doc for details.)

    Cheers,

    Michi.
  • Thanks. Perhaps you can tell me how the following CHelper class was generated as with the bundled Printer example?

    From PrinterI.java:
    Demo.CHolder c = new Demo.CHolder();
                Demo.CHelper.read(in, c);
                in.readPendingObjects();
                in.destroy();
                System.out.println("Printing class: s.name=" + c.value.s.name + ", s.value=" + c.value.s.value);
    

    This is exactly what I want to do.
  • matthew
    matthew NL, Canada
    Pass --stream to the slice2java compiler. See 35.2.2 in the Ice manual.