Output Parameters in Java

Hello All,
I've been trying to find a way to pass parameters as output as I've done previously in C and in Pascal.
For example, in C, you can do the following declaration:
int someMethod(int& num);
which returns an integer but also outputs another integer called num, which is passed by reference.
In Pascal, you can do something similar:
Integer someMethod(out Integer num);
which does the same thing. Is there any way to do something like this in Java?
Thanks,
Anthony Frasso
[email protected]

To replicate an "output parameter," simply create a method that's signature is as follows:
void method(Object inputParameter1...n, Hashtable outputParameters)Use the Hashtable to store and retrieve any output parameters necessary. You must "know" the keys to look the corresponding values up in the Hashtable after executing the method, which may be a bit less than attractive, however.
An alternative solution is to write a class:
class OutputParameter {
  Object value;
  void setValue(Object value) {
    this.value = value;
  Object getValue() {
    return value;
}Then you simply pass an instance of OutputParameter for each output parameter, use setValue() within the method to alter the "return" value, and getValue() from the calling method to return the particular value. The only unattractive aspect of this, obviously, is that a type cast must be made when reading the value (unless dealing with an Object).

Similar Messages

  • Handling Multiple Output Parameters

    Howdy.
    What is the concensus approach for handling multiple output parameters in Java?
    We have a legacy C API that we are porting to Java. All API routines already return an error value as an int. i.e.:
    int foo(...);
    What if we wanted to return additional info, such as a length and binary (not text) data?
    int foo(...,int* len,char** data);
    We use a char** for data cause we don't know in advance how long the data will be and we don't want callers to have to allocate arbitrary-sized arrays. In other words, we allocate the output data buffer internally.
    How do you do this in Java? Obviously, we can use an Integer object to return the length, but passing in a byte[] for data will not return the internally allocated array to the caller:
    public int foo(...,Integer len,byte[] data); // can't allocate data internally
    We also thought about using ByteArrayOutputStream, but since the class does not provide direct access to the internal array, it requires an inefficient copy through the toByteArray() method in order to retrieve our data.
    Any ideas?
    Ricardo

    Yes, that is the approach that we are currently
    using. We have defined an Out class that incorporates
    all possible output types as data members:Huh? One class that is used for all possible output types? I'm not quite sure what you mean by that. Classes should be meaningful in and of themselves, not just to encapsulate a bunch of unrelated fields. Sounds non-OO.
    public class Out
    byte[] out_bytes;
    int      out_int;
    }I guess we feel this is somewhat inelegant...
    The only real problem is with the byte[] arguments.
    Any thoughts on that?
    Thanks,
    RicardoThere's nothing inherently wrong with a byte array - else there may not be such an animal in the language. Other than the comments above about maybe it being non-OO, the only other comment I could make on this without really seeing the whole context (how this class is really used, etc) would be that yes it looks like it is just encapsulating all possible output types. Not good. If a method is going to return a byte array, it should do so - not return a meaningless "Out" object which happens to contain that array. And another method returning an int should return the int, not this "Out" object containing the int. These don't appear to be related fields belonging to an object in an OO sense.

  • How to allow multiple output parameters in a user-defined service operation???

    I have creating a self-defined service operation “LDAPAddUser” to connect to LDAP server to create user accounts. I want to get 2 output parameters after executing the operation. One is the result (Boolean data type) and one is the error message (String data type). However, since Java only support one return value in a method, it seems that only one output parameter can be returned. May I have the suggestion so that multiple parameters can be supported in this case? Here is the extracted code
    In Java program,
    public Boolean addUser(String url, String aName)
    In file "component.xml",
         <operation name="addUser" method="addUser" orchestrateable="true" anonymous-access="true">
      <hint>Add a new user</hint>
         <input-parameter name="url" type="java.lang.String" required="true" title="LDAP URL">
         </input-parameter>
              <input-parameter name="aName" type="java.lang.String" required="true" title="Admin Login Name">
         </input-parameter>
              <output-parameter name="Result" title="Result" type="java.lang.Boolean">
              </output-parameter>
    Besides the boolean return value, I want to get another return value (string data type). Any suggestion ?

    I've returned multiple values to LiveCycle by using a complex object as an intermediatory.
    For example if I need to return two strings (firstName and lastName), I'll first build a single class (name) with two string attributes (private String firstName; private String LastName) and add getters and setters to my "name" class for each.  My service class method will return an object of type "name".
    for example  public name mymethod(String GUID, String username, String password).......
    Then in the component.xml you can return the two strings as long as you use the binding type "Bean":
    <output-parameter name="firstName" title="First Name" binding-type="Bean" property="firstName">
                        </output-parameter>
    <output-parameter name="lastName" title="Last Name" binding-type="Bean" property="lastName">
                         </output-parameter>

  • Output parameters for sqlj stored procs ?

    is it possible to store a sqlj proc in DB which can be translated to a pl/sql procs with OUTPUT parameters ?
    how is it possible ?
    if not, how can i bypass this problem ?
    thanks for answers..
    [email protected]

    When you write a Java stored procedure that is called with OUT or IN OUT parameteres from the PL/SQL signature, then the OUT or IN OUT arguments must have an array signature in Java.
    For example, if you want to pass a Java int IN OUT from a Java method, then the method accepts an int[]. The first element (at index 0) holds the input value, and the same element must be set for the returned output value.
    Is this what you were wondering about?

  • Can you get values back from a stored procedure via OUTPUT parameters?

    Can you get values back from calling a stored procedure via OUTPUT parameters/variables? I call the SP via a SQL statement from a script either in a WF or DF.
    I thought I read some reference that DI could not get the values from OUTPUT parameters but I could not find it again (don't know if it is in any of the documentation or referred to in a forum.
    I did try a couple of tests but it did not reutrn any values via OUTPUT. But before I give up I thought I'd see if you could and maybe I needed to change something.

    This isn't exactly an answer to your question, but I'll point out that, given that you're resorting to a SQL script in the first place, there's no reason you can't also turn the output parameters into a regular result or record set. (The following uses T-SQL, although I think it's pretty generic.)
    declare @param1 int, param2 varchar(100), @return int;
    exec @return = proc @param1 = @param1 output, @param2 = @param2 output;
    select @param1 as param1, @param2 as param2;
    That is, to get from output parameters to a "regular" output from the SQL script isn't much of a leap...
    Jeff Prenevost
    BI Consultant
    Ann Arbor, MI

  • How to reduce number of output parameters in case of determination engine API

    Hi
    We are using determination engine API to integrate with the third party (OBRM) . In that case all the base/top/intermediate attributes have been sent in xml as output.
    Is there any way to filter out the output parameters as I don't want to send all attributes in output XML.
    Thanks and Regards
    Vandana

    There are the following possible copies of an object that can be made in TopLink.
    - Session cache - copy of object stored in the Session cache, this instance is considered read-only and can be shared. In the case of a shared cache, this copy exists in the ServerSession cache, in the case of an isolated cache, this copy exists in the ClientSession cache.
    This copy can be created whenever a query is executed against a ClientSession, or non-isolated UnitOfWork. To avoid this copy for an update operation, you can query in a UnitOfWork, and set your descriptor's unitOfWorkCacheIsolationLevel to ISOLATE_CACHE_ALWAYS (added in 10.1.3).
    This copy can be created after a inserted object is committed as well. ISOLATE_CACHE_ALWAYS will also avoid this.
    - UnitOfWork working copy. Instance of the object that is modified in the UnitOfWork. This instance must exist as at least one instance is required, unless UpdateAll / DeleteAll / SQL queries are used.
    - UnitOfWork backup copy. This copy is used to track changes to the object. This copy can be avoided if attribute change tracking is used (added in 10.1.3, weaving added in 11g).
    So, it is possible to only have a single copy.
    You can also use a DatabaseSession which only maintains a single copy. You can use Insert and UpdateObjectQuery's, these will update everything and not give you the benefit of change tracking nor a shared cache, but may be useful in batch transactions such as yours.
    -- James : http://www.eclipselink.org

  • 1.4.2 - What is the correct way to format output in the java.io.PrintStream

    With Java 1.4.2:
    What is the correct way to format output in the java.io.PrintStream?
    The following is incorrect, even though it is still used in the The JavaTM Tutorial at: http://java.sun.com/docs/books/tutorial/essential/
    System.out.formatThis returns "cannot resolve the method 'format'"
    Any detailed suggestions or information is greatly appreciated.

    The following is incorrect, even though it is still
    used in the The JavaTM Tutorial at:
    http://java.sun.com/docs/books/tutorial/essential/
    The whole format thing has been introduced in 1.5. The tutorial also states it's been "updated to 1.5.".
    That's all I've got to say for I don't know how you can format a PrintWriter, let alone a PrintStream, prior to 1.5. I'm not really sure there is any way. Any "legacy way", that is. There almost certainly are third-party API which achieve similar results.

  • Report painter -output parameters,Data source,Extract parameter, report

    Hi expert,
    1)What report painter -output parameters,Data source,Extract parameter, report mean for and what are the difference?
    2)I have create new report painter and transport to  Test server using T-code:GCTR and I find that the T-code always point to old report. As I had check the SE93 the D_SREPOVARI-REPORT is point to report group.Why this happen?
    3) Does creation of new report or modification of the report always need to select the extraction option so that it will able to display the relected changes? Because, I have done modification on the report but it is not reflected the changes even i save until i have to create the extraction is able to display the report but every time i run the report need to select the extraction with option to choose new extract or old. Kindly advice how to save and create the report painter and save will display reflected result .
    Please help

    Hi BR Christian,
    Thank you for the prompt reply.
    I have few querys as below:
    1)Do we every time create new report by copying the existing report painter need to select output parameter, data source and extract parameter in order to be able to display the new report?
    2)when modify existing report painter and save it do we need to select output parameter, data source and extract parameter in order to be able to display the modify report correctly?
    3) What are the different between right click copy the report inreport painter compare with create report painter with copy GRR1?
    4) What are the T-code for modify the report group?
    5) When I create a new report with the right click copy in GRR1 and modify the report painter column only and everything remain the same just the report name different why when execute the report it always appear in the selection screen with report button which have option button to select the 2 version  of report which one is the destination report that I copy from and one is the new report? How to set the report when execute will only display the new report only without need to select the option with just new report only?
    6)For transferring reports you can use GR37 (export) and GR38 (import) can be use to transport from one client to another client? What is difference between GR37 compare with  GCTR?
    7) If I use GR37 and GR38 it is mean no need to create the transport request which as usual we create transport se10?
    we can directly import to another client ussing GR38?
    8)When we create a new report with copy with the existing report with just modify the report colunm and the report name difference only what are the setting example: report,report group need to be selected to be include to export/transport to another client?
    9) What are the difference between library and report group?
    10) Can we set Se93 to execute only report not report group? How?
    11) when using GR37 to transport it is also include the report group,library and the particular report?
    12) Can I include the variable in the column header to display fiscal year which I have selected from the selection screen?
    How and which variable should i use?
    please help.
    many thanks
    Edited by: KH on Jun 18, 2011 6:52 AM
    Edited by: KH on Jun 18, 2011 6:55 AM
    Edited by: KH on Jun 18, 2011 7:06 AM

  • How to view multiple output parameters from web services

    I have used the Labview tool to create a .NET assembly from a WSDL file.
    In the WSDL file the service has been defined to return 2 output parameters.
    In Labview, when I invoke the method for this service the first output parameter ends up as the return value of the method.  I can create an indicator for this and it gets updated properly when I run the VIS to use the web service..  The indicator is an integer value but recognizes the type defined within the WSDL file. 
    The second output parameter shows up as an output value.  When I right click on it and create an indicator for it I get a .NET icon on the front panel rather than an integer value. 
    How can I view the value for this second output parameter after running the web service?
    Is there a difference in how multiple output parameters handled in newer versions of Labview (I am using verison 7.1)?

    scrooge wrote:
    You can try this link .
    the link is dead... or i dont have access..

  • How to pass the report parameters through java not by using URL

    Hello...
    I have an oracle App. Server 10g with report service
    I can the report using the URL :
    http://host:Port/rwservlet/report=....
    and passing the report parameters ...
    But is there any way to call the report by pdf format and passing the parameters from java without using the url ???

    thank you shahcsanjay for your reply
    but I think that web.showDocument can not be used by ordinary java web application ..
    I think it can be used only with with "oracle forms" Am I right ?
    If no can you please tell me where can I find a useful document about how to use web.showDocument ...
    thanks again
    Saleem

  • How to call a (catalog) stored procedure directly in a xsodata file with in/output parameters

    I am new to XS but i managed to enable a table through xsodata:
    service namespace "sap.hana.democontent.epm" { 
      "AA465342"."TMP_HENK" as "TMP_HENK"; 
    But now i am looking for code that can call a stored procedure that has 2 input- and 3 output parameters.... who can help me out with this?

    Hi Vivek, thanks for the quick response!
    I already found that blog, but it does not completely answer my question. i am struggling to get my content procedure working. call the R (catalog) stored procedure:
    the code
    /********* Begin Procedure Script ************/
    BEGIN
        call "AA465342"."MO_PP_SENTIMENT"(SP_IN,SP_OUT) with overview;
    END;
    /********* End Procedure Script ************/
    where it goes wrong:
    : Only table variable is allowed in input parameter in a nested call
    I have defined SP_IN and SP_OUT....
    Can someone give me a clue what i have to change?

  • Mapping display only item to three output parameters from a procedure?

    Hi all
    I have a procedure with three output parameters, which I would like to map the three output parameters to three display only items on the page.
    there is a page process called the procedure, which output statement1,statement2,statement3 parameters.
    I have three items on the page which I would like to map them to the three parameters respectively,
    how can I achieve this?
    thanks

    Rajesh,
    please check if this following proposal could serve you.
    Define the Query with mode FixedQueryWithOutput. In the package define a ref cursor as IN OUT parameter. To get your 3 values back, open the cursor in your procedure like "Select val1, val2, val3 from dual". Then the values should get into your query.
    Here is an example how this could be defined.
    Package:
    type return_cur IS ref CURSOR;
    Procedure:
    PROCEDURE myProc(myReturnCur IN OUT return_cur) ...
    OPEN myReturnCur FOR SELECT val1, val2, val3  FROM dual;
    Query:
    DECLARE
      MYRETURNCUR myPackage.return_cur;
    BEGIN
      myPackage.myProc(
        MYRETURNCUR => ?
    END;
    Good luck.
    Michael

  • Calling a stored procedures and using its output parameters in a report

    Hi,,
    I have a procedure defined in a package on the database. This procedure returns a number of output parameters. How do I call this procedure and use the output parameters in my report ?
    Thanks, Mark

    Depends on the level at which the procedure has to be called. If its at report-level, call the Form in the BEFORE-REPORT-trigger (or AFTER-PARAMFORM) and store the out-values in Placeholder-columns. These you can use anywhere in your report.

  • Passing parameters from Java to an Oracle proc

    I am passing 3 parameters from Java method to an Oracle function.
    The Java method is called getStatic(String szparams) which invokes oracle function
    getStatic("GB1000");
    Oracle procedure
    SELECT XMLELEMENT("Underlying",
           XMLELEMENT("Code",a.code))
    FROM underlying a
    WHERE xml.extractval(a.xml,'/tables:underlying/tables:isin/text()',xml.getns('NS_TABLES'))=':arg1:' Passing 1 parameter works fine.
    2)Now I need to pass 3 parameters to the same function
    getStatic("GB1000\i\common");
    Oracle procedure
    SELECT
    XMLELEMENT(":arg2::Underlying", XMLATTRIBUTES(a.code "value", ':arg3:' as "xmlns::arg2:", 'http://www.AAA.com/common' as "xmlns:common"),
    XMLELEMENT("common:Code", a.code),
    FROM
      table a
    WHERE
      a.code = ':arg1:'Passing 3 params doesnt work.
    I tried using this way also:
    getStatic("GB1000\\i\\common"); -- still doesnt work.
    Is there a specific format where you can pass 3 parameters to the same method in Java?
    No offence meant,as this may sound silly.
    Thanks,

    Hi Nitin,
    yes, it is possible to pass parameters as URL parameters to the WDA applivcation. In WDA, for the handler method of your windows default Inplug (in standard the method is named HANDLEDEFAULT) define the parameters that you like to receive thru URL. When defining the WDA application, you can also set default parameters to avoid a dump, when parameters are not provided via URL.
    I just tried it out, it works.
    Kind regards
    Andreas

  • Function module to list out a report's input/output parameters

    Hi experts,
    I'd like to know if there is a function module which can list out all the input and output parameters (variables, tables, etc.) by giving the report name as input.
    If not, please suggest a way to find out the input/output parameters.
    Regards,
    Ancy

    Well, they're not input/output parameters, and really you shouldn't refer to them as such.  A variable is simple what it says - a variable.  You could, I suppose, refer to data sources.  But then, the report could be getting data from a set of function modules.
    So my assumption is correct, you are talking about a where-used list.
    >Check out tables like CROSS. To find other useful tables, put an SQL trace on, do the where used, and see what tables are hit.
    matt

Maybe you are looking for