Should this method throw an exception

Hi,
I have a method in a Database interface implementation class.
updateField( String fieldname, String value ) throws InvalidFieldException { 
   if ( ! is_Valid ( fieldname, value  ) {
     throw  new InvalidFieldException();
}This will check the value does not exceed a certain length and it's format is correct, else it won't apply the update and should let the user know to correct the format of the value string.
is it good practice to have the method throw an InvalidFieldException() to return control to the calling method or how would you deal with an invalid field.
I know/ have heard that exceptions are for "Unexpected" things and a user entering data in the wrong format would not be classed as "unexpected" so by this definition using Exceptions is not the way to go.
Any ideas?

This will check the value does not exceed a certain
length and it's format is correct, else it won't
apply the update and should let the user know to
correct the format of the value string.
is it good practice to have the method throw an
InvalidFieldException() to return control to the
calling method or how would you deal with an invalid
field.There are two strategies, both work. Just don't mix them:
- using contracts: clearly state that your method requires a certain range of values as an argument, and that everything outside this range will probably cause a problem. It's putting the responsibility of checking the argument's correctness to the caller, who anyway should know best how to provide the values and how to deal with wrong ones.
- defensive programming: take everything they give you and check yourself - throwing an IllegalArgumentException. Might be more secure, but far more work. I advise only to use this way on public methods, especially if you're going to distribute your classes as a library for others to use.
I know/ have heard that exceptions are for
"Unexpected" things and a user entering data in the
wrong format would not be classed as "unexpected" so
by this definition using Exceptions is not the way to
go.You're right, but there's a limit to what your method can do to fix the problem. If it can't do that by itself you need an escalation mechanism. Hence you can use an exception.

Similar Messages

  • PrintWriter methods throw NO exceptions!

    Hi,
    According to the PrintWriter javadoc:
    "Methods in this class never throw I/O exceptions. The client may inquire as to whether any errors have occurred by invoking checkError()."
    I think this sounds strange in Java language, since it has the Exceptions mechanism...does any one know the reason why it is like this?
    Regards

    With unchecked exception, it will still terminate my function mid-way!
    Here is a concrete example:
    public void method1() {
       try {
          ... open database then read 1 entry ...
          file.println("Entry is "+x);
          method2();
          ... close the DB connection properly.
       } catch(DBException ex) {
          ... deal with the DB failure accordingly
    public void method2() {
       try {
          ... open a webconnection then read 1 webpage ...
          file.println("Webpage is" + y);
          ... now close the web connection
       } catch(webException ex) {
          ... deal with the Web failure in a web-specific way
    }If println throws exception (checked or unchecked), then I must wrap method1 AND method2
    in yet another try/catch block. Otherwise, the function will die halfway, and my database or web connection
    will be in a funky state.
    By not throwing any exception (unless OutOfMemory or other dire situation),
    I can write method1 and method2 without worrying about it.
    And then at the end, I just check to see if all the writes succeeded or not.

  • One method throw many exception

    7. Create three new types of exceptions. Write a class with a method that throws all three. In main( ), call the method but only use a single catch clause that will catch all three types of exceptions.
    Ok, I am learning java language from bruce eckel book. That is the exercise. I m having dificulties.
    How can one method throw more than one exception?
    class Satu extends Exception
       Satu() { }
    class Dua extends Exception
       Dua() { }
    class Tiga extends Exception
       Tiga() { }
    class ThisIsIt
       public void f() throws Satu, Dua, Tiga
          throw new Satu();
          throw new Dua();
          throw new Tiga();
    public class Enam
       public static void main( String[] args )
          try
          ThisIsIt a = new ThisIsIt();
          a.f();
          catch( Exception d )
          System.out.println( "Doing something here" );
    }That code won't even compile because :
    Enam.java:21: unreachable statement
    throw new Dua();
    ^
    Enam.java:22: unreachable statement
    throw new Tiga();
    Do I interpret that question wrong????

    The problem you have is that when the code comes to the first 'throw' command it will throw the exception and exit the method (like a return does) so the code after will never be reached. In order to test your code you need to put some 'if's around the throws or give it a parameter from the console. eg.class ThisIsIt
        public void f(int errorType) throws Satu, Dua, Tiga
            if (errorType ==1)
                throw new Satu();
            if (errorType ==1)
                throw new Tiga();
            if (errorType ==1)
                throw new Dua();
    }Ted.

  • Catching or Methods Throwing Exceptions

    Hi,
    I'm just wondering whats the difference between catching an exception and a method throwing an exception?
    I'm a bit confused on their purpose dealing with exceptions.
    catching an exception
    void p1()
              try{
                   p2();
              }catch(IOException ex){
         }method throwing an exception
    void p1() throws IOException
              p2();
         }

    one more stuff i need to add is that:
    When we declare a particular code within a try catch
    statement it means that that particular code is very
    much prone to an exception , i mean the programeer
    knows that code will throw a exception and hence we
    mention in try catch block.
    But in other case when we suffixed that particular
    method with throws clause it means the programmer is
    not sure ,that code might throw an exception,hence we
    put in throws clause.Not quite, the programmer always knows if a checked exception is being thrown, since the compiler requires it to be caught or having a throws clause. Unchecked (runtime) exceptions don't require a throws clause and the programmer must/can catch it if he wants to.

  • ADT command line errors (java throws an exception)

    I'll spare you the frustration of these past 24 hours, needless to say I've read most (if not all) of the threads related to compiling a swf into a ipa.  As it is, I'm very close and can't seem to get it to compile.
    On a Mac: the CMD line I am running is this:
    ./adt -package -target ipa-test -storetype pkcs12 -keystore  Certificates.p12 -storepass *P*A*S*S*W*O*R*D*  -provisioning-profile Team_Provisioning_Profile_.mobileprovision APPNAME.ipa  APPNAME-app.xml -C /Applications/Adobe\ AIR\ SDK\ 2.6/bin/ APPNAME.swf -C /Applications/Adobe\ AIR\ SDK\ 2.6/bin/AppIconsForPublish/ . -C /Applications/Adobe\ AIR\ SDK\ 2.6/bin/ Default.png
    The APPNAME-app.xml file is as follows:
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <application xmlns="http://ns.adobe.com/air/application/2.0">
        <id>APPNAME</id>
        <version>1.0</version>
        <filename>APPNAME</filename>
        <description>test build of the app</description>
        <!-- To localize the description, use the following format for the description element.
        <description>
            <text xml:lang="en">English App description goes here</text>
            <text xml:lang="fr">French App description goes here</text>
            <text xml:lang="ja">Japanese App description goes here</text>
        </description>
        -->
        <name>APPNAME</name>
        <!-- To localize the name, use the following format for the name element.
        <name>
            <text xml:lang="en">English App name goes here</text>
            <text xml:lang="fr">French App name goes here</text>
            <text xml:lang="ja">Japanese App name goes here</text>
        </name>
        -->
        <copyright></copyright>
        <initialWindow>
            <content>APPNAME.swf</content>
            <systemChrome>standard</systemChrome>
            <transparent>false</transparent>
            <visible>true</visible>
            <fullScreen>false</fullScreen>
            <autoOrients>false</autoOrients>
            <aspectRatio>portrait</aspectRatio>
            <renderMode>auto</renderMode>
        </initialWindow>
        <customUpdateUI>false</customUpdateUI>
        <allowBrowserInvocation>false</allowBrowserInvocation>
        <icon>
            <image512x512>AIRApp_512.png</image512x512>
            <image48x48>AIRApp_48.png</image48x48>
            <image57x57>AIRApp_57.png</image57x57>
            <image72x72>AIRApp_72.png</image72x72>   
        </icon>
    <iPhone><InfoAdditions><![CDATA[<key>UIDeviceFamily</key><array><string>1</string></array> ]]></InfoAdditions></iPhone></application>
    The java OS error it is throwing (on my Mac OS X 10.7.6):
    Exception in thread "main" java.lang.Error: Unable to find named traits: spark.components::Application
        at adobe.abc.Domain.resolveTypeName(Domain.java:225)
        at adobe.abc.Domain.resolveTypeName(Domain.java:142)
        at adobe.abc.GlobalOptimizer$InputAbc.resolveTypeName(GlobalOptimizer.java:272)
        at adobe.abc.GlobalOptimizer$InputAbc.readInstance(GlobalOptimizer.java:936)
        at adobe.abc.GlobalOptimizer$InputAbc.readAbc(GlobalOptimizer.java:390)
        at adobe.abc.GlobalOptimizer$InputAbc.readAbc(GlobalOptimizer.java:278)
        at adobe.abc.LLVMEmitter.generateBitcode(LLVMEmitter.java:194)
        at com.adobe.air.ipa.AOTCompiler.convertAbcToLlvmBitcode(AOTCompiler.java:350)
        at com.adobe.air.ipa.AOTCompiler.GenerateMacBinary(AOTCompiler.java:680)
        at com.adobe.air.ipa.IPAOutputStream.compileRootSwf(IPAOutputStream.java:216)
        at com.adobe.air.ipa.IPAOutputStream.finalizeSig(IPAOutputStream.java:411)
        at com.adobe.air.ApplicationPackager.createPackage(ApplicationPackager.java:87)
        at com.adobe.air.ipa.IPAPackager.createPackage(IPAPackager.java:163)
        at com.adobe.air.ADT.parseArgsAndGo(ADT.java:504)
        at com.adobe.air.ADT.run(ADT.java:361)
        at com.adobe.air.ADT.main(ADT.java:411)
    The version of Java that I'm running is:
    java version "1.6.0_24"
    Java(TM) SE Runtime Environment (build 1.6.0_24-b07-334-10M3326)
    Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02-334, mixed mode)
    For the life of me, I can't figure out what / why this is throwing an exception.  Having battled through the missing icon 303 errors and getting to what I think is the final issue, please... can anyone debug why the SWF is not compiling?

    Tried a variation of the above CMD line:
    ./adt -package -target ipa-test -storetype pkcs12 -keystore  Certificates.p12 -storepass PASSWORD  -provisioning-profile Team_Provisioning_Profile_.mobileprovision APPNAME.ipa  APPNAME-app.xml -C /Applications/Adobe\ AIR\ SDK\ 2.6/bin/ APPNAME.swf Default.png AppIconsForPublish
    Still threw an error:
    Exception in thread "main" java.lang.Error: Unable to find named traits: spark.components::Application
        at adobe.abc.Domain.resolveTypeName(Domain.java:225)
        at adobe.abc.Domain.resolveTypeName(Domain.java:142)
        at adobe.abc.GlobalOptimizer$InputAbc.resolveTypeName(GlobalOptimizer.java:272)
        at adobe.abc.GlobalOptimizer$InputAbc.readInstance(GlobalOptimizer.java:936)
        at adobe.abc.GlobalOptimizer$InputAbc.readAbc(GlobalOptimizer.java:390)
        at adobe.abc.GlobalOptimizer$InputAbc.readAbc(GlobalOptimizer.java:278)
        at adobe.abc.LLVMEmitter.generateBitcode(LLVMEmitter.java:194)
        at com.adobe.air.ipa.AOTCompiler.convertAbcToLlvmBitcode(AOTCompiler.java:350)
        at com.adobe.air.ipa.AOTCompiler.GenerateMacBinary(AOTCompiler.java:680)
        at com.adobe.air.ipa.IPAOutputStream.compileRootSwf(IPAOutputStream.java:216)
        at com.adobe.air.ipa.IPAOutputStream.finalizeSig(IPAOutputStream.java:411)
        at com.adobe.air.ApplicationPackager.createPackage(ApplicationPackager.java:87)
        at com.adobe.air.ipa.IPAPackager.createPackage(IPAPackager.java:163)
        at com.adobe.air.ADT.parseArgsAndGo(ADT.java:504)
        at com.adobe.air.ADT.run(ADT.java:361)
        at com.adobe.air.ADT.main(ADT.java:411)
    Different, but the same... no success

  • This method should not be called anymore. The client was already released i

    Hi,
    while configuring Business Packager for Projects 50.3 fo, we made few changes in R/3 side as per the documentation. after that we are getting following error in portal
    "This method should not be called anymore. The client was already released into the pool or the pool entry was deleted"
    all the chages were reverted in R/3 system still we are getting the same error.
    Can any one help on this issue....
    Thanks in advance and for early responce higher marks would be awarded!!!..     
    Regards
    Ravi Sankar Karri

    Hi,
    Well there were errors in how stop works:
    "Stopping a thread with Thread.stop causes it to
    unlock all of the monitors that it has locked (as a
    natural consequence of the unchecked ThreadDeath
    exception propagating up the stack). If any of the
    objects previously protected by these monitors were in
    an inconsistent state, the damaged objects become
    visible to other threads, potentially resulting in
    arbitrary behavior. "
    I do understand that you want to have something like
    killTheTreadIDontCareAboutConcequences-method, but
    it's better to let all your methods that you want to
    be able to terminate take a timeout argument, and deal
    with the termination in the method. (Close the
    sockets/streams etc that you are blocking on).
    /KajThe point is, it is not always possible to make those blocking methods stop, via some magic "timeout" thingamabob. The bottom line is still that the blocking methods were written incorrectly to begin with (to possibly block indefinitely), so one cannot come up with an across-the-board solution, other than getting the root cause fixed in the first place. However, one is not always in control of fixing the root cause.

  • Limit the time of lookup and make the method to throw an Exception

    When I connect from
    Client
    Remote Desktop Client
    Server:
    SUN JAVA SYSTEM APPLICATION SERVER 9.0
    Initial Context object is initialized as per below coding,
    System.setProperty("org.omg.CORBA.ORBInitialHost", prop.getProperty("hostName"));
    System.setProperty("org.omg.CORBA.ORBInitialPort", prop.getProperty("portNumber"));
    InitialContext ctx = new InitialContext();
    while .lookup("globalJndiNameForSessionBean") method is invoked on the InitialContext object and if the server is not available, it is throwing non stop error.
    Please tell me wether I have to add any other Properties to limit the time of lookup and make the method to throw an Exception after two or three second, if the server is not available.

    What do you mean by 'non-stop error'? This can only happen if your code goes into a non-stop loop.
    The default TCP connect timeout is about 75 seconds, which in some circumstances is too long, but two or three seconds definitely isn't long enough. Ten to twenty would be more like it.
    I'm not aware of any system properties that limit the ORB connect timeout but then I'm not aware where the existing J2SE ORB system properties are documented. If anybody has ever found this please let us know.

  • Exceptions - documentation on which methods throw exceptions ?

    Hi, does anyone know where I can find full documentation on iphone SDK methods
    The iphone SDK documentation seems to be incomplete.
    For instance, the discussion section of the SDK documentation for NSMutableArray addObject method doesn't mention anything about exceptions.
    However, the method could throw an exception (and this is mentioned in http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMu tableArray_Class/Reference/Reference.html)
    I'm assuming that alloc will not throw exceptions and that it will just return nil if no memory is available. However, I haven't found any documentation that states this.
    Does anyone have a pointer to Apple documentation for methods (that includes information on any (and all) exceptions thrown by the method and also includes information on possible return values for the method) ?

    There is this
    http://java.sun.com/products/jdbc/driverdevs.html
    I am pretty sure that there is little in the meta data stuff that has to be supported.

  • Is it possible to throw an exception from run method of a thread?

    Is it possible to throw an exception from "run method of a thread"(implemented as runnable implementation)?
    Is it advisable to do so?

    Is it possible to throw an exception from "run method
    of a thread"(implemented as runnable
    implementation)?Yes, an unchecked one. Runtime exceptions.
    Is it advisable to do so?If you mess up it happens automatically. But basically: no.

  • Exception: java.lang.RuntimeException: Caller doesn't have enough permission to call this method.

    Hi All,
        I am getting the exception "Exception: java.lang.RuntimeException: Caller doesn't have enough permission to call this method.", when i try to execute the code  "Composite MFTComposite = (Composite)locator.lookupComposite(compositeNameRevision); ".Below mentioned the sample code , i am using this code for getting the running instances.
    try{   
              String componentInstanceID = new Long(getInstanceId()).toString();   
              addAuditTrailEntry("Component Instance ID is "+componentInstanceID);   
              Locator locator = LocatorFactory.createLocator();   
              addAuditTrailEntry("Created locator..");   
             String compositeRevision = (String)getVariableData("compositeRevision"); 
    addAuditTrailEntry("compositeRevision..1111"+compositeRevision);   
              String compositeNameRevision = "ManagedFileTransfer/MFT!" + compositeRevision;
              Composite MFTComposite = (Composite)locator.lookupComposite(compositeNameRevision);  
              addAuditTrailEntry("MFT Composite lookup complete..setting filter");   
              CompositeInstanceFilter filter = new CompositeInstanceFilter();   
              filter.setState(CompositeInstance.STATE_RUNNING);  
              filter.setTitle((String) getVariableData("transferName"));  
              List<CompositeInstance> instances = MFTComposite.getInstances(filter);   
              StringBuffer message = new StringBuffer();  
              if ((instances != null) && (instances.size() > 1)) {   
                  addAuditTrailEntry("currently running MFT Instances..");   
                  for (CompositeInstance instance : instances) {   
                    message.append("Instance: " + instance.getId() + " Creation date: " + instance.getCreationDate() + ",");        
                    addAuditTrailEntry("Instance: " + instance.getId() +   
                                 " creation-date: " + instance.getCreationDate());  
              setVariableData("runningInstance", message.toString());    
            } catch (Exception ex) {   
                setVariableData("runningInstance", ex.getMessage());  
                addAuditTrailEntry("Exception: " + ex);   
    Appreaciate your quick response.
    Thank You,
    Vamsi.P

    Hi Vamsi.P,
    Try something like below... Using weblogic admin credentials...
    Hashtable props = new Hashtable();
    props.put(Context.SECURITY_PRINCIPAL,   "fred");
    props.put(Context.SECURITY_CREDENTIALS, "seafood");
    Locator locator = LocatorFactory.createLocator(props);  
    Cheers,
    Vlad

  • Why Overridden method do not throw Broder exception

    Why Overridden method of derived class do not throw Broder exception than the method that is in base class

    Why Overridden method of derived class do not throw
    Broder exception than the method that is in base classWhat is a Broder Exception?
    I don't understand your question?
    You are asking something about overriding a method:
    http://java.sun.com/docs/books/tutorial/java/IandI/override.html

  • Adding an updateProduct method which this method should call

    i would like to add an updateProduct method which this method should call the updateProduct method of the ProductDAO object to update the product.
    import java.util.Scanner;
    public class ProductMaintApp
    // declare two class variables
    private static ProductDAO productDAO = null;
    private static Scanner sc = null;
    public static void main(String args[])
    System.out.println("Welcome to the Product Maintenance application modified by Royce\n");
    // set the class variables
    productDAO = DAOFactory.getProductDAO();
    sc = new Scanner(System.in);
    // display the command menu
    displayMenu();
    // perform 1 or more actions
    String action = "";
    while (!action.equalsIgnoreCase("exit"))
    // get the input from the user
    action = Validator.getString(sc,
    "Enter a command: ");
    System.out.println();
    if (action.equalsIgnoreCase("list"))
    displayAllProducts();
    else if (action.equalsIgnoreCase("add"))
    addProduct();
    else if (action.equalsIgnoreCase("update"))
         updateProduct();
    else if (action.equalsIgnoreCase("del") ||
    action.equalsIgnoreCase("delete"))
    deleteProduct();
    else if (action.equalsIgnoreCase("help") ||
    action.equalsIgnoreCase("menu"))
    displayMenu();
    else if (action.equalsIgnoreCase("exit"))
    System.out.println("Bye.\n");
    else
    System.out.println("Error! Not a valid command.\n");
         public static void displayMenu()
    System.out.println("COMMAND MENU");
    System.out.println("list - List all products");
    System.out.println("add - Add a product");
    System.out.println("update - Update a product");
    System.out.println("del - Delete a product");
    System.out.println("help - Show this menu");
    System.out.println("exit - Exit this application\n");
    public static void displayAllProducts()
    System.out.println("PRODUCT LIST");
    System.out.println(productDAO.getProductsString());
    public static void addProduct()
    String code = Validator.getString(
    sc, "Enter product code: ");
    String description = Validator.getLine(
    sc, "Enter product description: ");
    double price = Validator.getDouble(
    sc, "Enter price: ");
    Product product = new Product();
    product.setCode(code);
    product.setDescription(description);
    product.setPrice(price);
    productDAO.addProduct(product);
    System.out.println();
    System.out.println(description
    + " has been added.\n");
    public static void deleteProduct()
    String code = Validator.getString(sc,
    "Enter product code to delete: ");
    Product p = productDAO.getProduct(code);
    System.out.println();
    if (p != null)
    productDAO.deleteProduct(p);
    System.out.println(p.getDescription()
    + " has been deleted.\n");
    else
    System.out.println("No product matches that product code.\n");

    i would like to add an updateProduct method which this method should call the updateProduct method of the ProductDAO object to update the product. Permission granted.

  • Class.forName() throws null exception in servlet

    Hi, just wondering if anyone having this similar problem:
    when i try to load a class using Class.forName() method inside a servlet, it throws null exception.
    1) The exception thrown is neither ClassNotFoundException nor any other Error, it's "null" exception.
    2) There's nothing wrong with the code, in fact, the same code has been testing in swing before, works perfectly.
    3) I have include all necessary jars/classes into the path, even if i haven't, it should throw ClassNotFoundException instead, not "null" exception.

    I have tried to detect any possible nullable variable, and it is able to run until line 15. The exception thrown is actually null only... not NullPointerException... which is why i have confused...
    the message i received is "PlugInException: null".
    The code is at follow:
    * Load plugin
    * @return ArrayList of plugins
    * @exception PlugInException PlugInException
    01 public ArrayList loadPlugin()
    02 throws PlugInException
    03 {
    04 PlugIn plugin;
    05 ArrayList plugins = new ArrayList();
    06
    07 for (int i = 0; i < configLoader.getPluginTotal(); i++)
    08 {
    09 try
    10 {
    11 if (debugger > 0)
    12 {
    13 System.out.print("Loading " configLoader.getPluginClass(i) "...");
    14 }
    15 if (Class.forName(configLoader.getPluginClass(i)) == null)
    16 {
    17 if (debugger > 0)
    18 {
    19 System.out.print(" not found");
    20 }
    21 }
    22 else
    23 {
    24 if (debugger > 0)
    25 {
    26 System.out.println(" done");
    27 }
    28 plugin = (PlugIn)(Class.forName(configLoader.getPluginClass(i)).newInstance());
    29 plugin.setContainer(container);
    30 plugins.add(plugin);
    31 }
    32 }
    33 catch (Exception e)
    34 {
    35 throw new PlugInException("PlugIn Exception: " + e.toString());
    36 }
    37 }
    38
    39 return plugins;
    40 }

  • FM used in background job throws an Exception-NO_BATCH

    Hi,
    I have one normal ABAP report with selection screen, where selection parameters are file names and they are used for uploading data from excel to internal table and then internal table to excel respectively.
    Now I want to put this as a background job. So I saved the variant and now while running the job there is an exception.
    Reason for the same as I could find out is:
    while uploading function module (KCD_EXCEL_OLE_TO_INT_CONVERT or ALSM_EXCEL_TO_INTERNAL_TABLE) is called, it has some front-end  services called.
    That is in case of first function module, it is CLPB_IMPORT which in turn calls WS_QUERY where GUI_EXIST is checked and there it throws an exception.
    And in the later case it is cl_gui_frontend_services class and its some method is called.
    So basically, frontend services are called in any case and I still want this as a background job.
    Can Anyone clear it conceptually?

    Hello Krupa,
    The rule is pretty much simple: <i>Anything that you do in batch / background, cannot have anything to do with the front-end / desktop.</i>
    The Excel sheet you use is an application that runs on the Frontend, right? So you cannot do it in batch. The reason, to put it crudely, is that a background job is run by a different workprocess altogether and that work process is not capable of accessing the front-end. Ideally, a background job should be run-able even without a GUI!!
    SO what you can do in a background job, is to operate on the files present on the application server (that is where the job runs).
    Hope that is clear. If not, get back.
    Regards,
    Anand Mandalika.
    Regards,
    Anand Mandalika.

  • NCo throws an Exception calling BAPI_MATERIAL_SAVEDATA?

    I've been successful in calling BAPIs from NCo (BAPI_CHARACT_CREATE, BAPI_CLASS_CREATE, BAPI_VENDOR_FIND, BAPI_VENDOR_GETDETAIL)....
    However when calling BAPI_MATERIAL_SAVEDATA, I always get the following Exception being thrown:
    Index was outside the bounds of the array.
       at SAP.Connector.Rfc.RfcStructureUtil.ToRfcStructure(Object obj, Byte[] dest, Type t, Encoding encoding, Boolean isUnicode, PropertyInfo[] propinfos, RfcStructInfo structInfo)
       at SAP.Connector.Rfc.RfcStructureUtil.GetITabFromList(SAPConnection conn, Object list, Type t, RfcStructInfo structInfo, Int32 itab)
       at SAP.Connector.Rfc.RfcClient.PrepareClientParameters(Type classType, MethodInfo m, Boolean isTQRfc, Object[] MethodParamsIn, RFC_PARAMETER[]& paramsIn, RFC_PARAMETER[]& paramsOut, RFC_TABLE[]& tables, ParameterMap[]& paramMaps)
       at SAP.Connector.Rfc.RfcClient.RfcInvoke(SAPClient proxy, String method, Object[] methodParamsIn)
       at SAP.Connector.SAPClient.SAPInvoke(String method, Object[] methodParamsIn)
       at SAP_MM_Test.SAPProxy1.Bapi_Material_Savedata(BAPI_MARA Clientdata, BAPI_MARAX Clientdatax, String Flag_Cad_Call, String Flag_Online, BAPI_MPOP Forecastparameters, BAPI_MPOPX Forecastparametersx, BAPIMATHEAD Headdata, String No_Dequeue, String No_Rollback_Work, BAPI_MPGD Planningdata, BAPI_MPGDX Planningdatax, BAPI_MARC Plantdata, BAPI_MARCX Plantdatax, BAPI_MVKE Salesdata, BAPI_MVKEX Salesdatax, BAPI_MARD Storagelocationdata, BAPI_MARDX Storagelocationdatax, BAPI_MLGT Storagetypedata, BAPI_MLGTX Storagetypedatax, BAPI_MBEW Valuationdata, BAPI_MBEWX Valuationdatax, BAPI_MLGN Warehousenumberdata, BAPI_MLGNX Warehousenumberdatax, BAPIRET2& Return0, BAPIPAREXTable& Extensionin, BAPIPAREXXTable& Extensioninx, BAPI_MEANTable& Internationalartnos, BAPI_MAKTTable& Materialdescription, BAPI_MLTXTable& Materiallongtext, BAPI_MFHMTable& Prtdata, BAPI_MFHMXTable& Prtdatax, BAPI_MATRETURN2Table& Returnmessages, BAPI_MLANTable& Taxclassifications, BAPI_MARMTable& Unitsofmeasure, BAPI_MARMXTable& Unitsofmeasurex) in C:\Dev\SAP_MM_Test\SAPProxy1.vb:line 220
       at SAP_MM_Test.Form1.Button1_Click(Object sender, EventArgs e) in C:\Dev\SAP_MM_Test\Form1.vb:line 114"     String
    I even tried calling the Method with all parameters set to Nothing and also get the same error.  I tested some of the other BAPI I listed will all Nothing parameters and it does not throw any exceptions.  Almost seems as if the Proxy generated classes did not get created properly or something?
    Has anyone else successfully called BAPI_MATERIAL_SAVEDATA from NCo 2.0?
    PS...I was successful in calling the BAPI from SE37 with the exact same data, therefore I know I have all the mandatory parameters specified (HeadData, ClientData, ClientDatax...etc)
    Anything obvious in the following code?:
    =======================================
         ' Connection String
         Dim cs As String = "ASHOST=10.83.180.239 SYSNR=10 CLIENT=110 USER=CMCHUG2 PASSWD=********"
         ' construct the proxy with connection string
         Dim proxy As New SAPProxy1(cs)
         ' Header Data
         Dim HeadData As New BAPIMATHEAD
         HeadData.Material = "000000000000000754"            ' Material NUmber (PAD to 18)
         HeadData.Ind_Sector = "U"                           ' Industry Sector
         HeadData.Matl_Type = "ERSA"                         ' Material Type (ERSA=Space Parts / HERS=Manufacturer Part)
         HeadData.Basic_View = "X"                           ' Need at least 1 view
         ' Client Data
         Dim ClientData As New BAPI_MARA
         ClientData.Matl_Group = "01"                        ' Material Group
         ClientData.Base_Uom = "EA"                          ' Base Unit of Measure
         ' Set the ClientData Indicator Table
         Dim ClientDataX As New BAPI_MARAX
         ClientDataX.Matl_Group = "X"
         ClientDataX.Base_Uom = "X"
         ' Short Description (TABLE)
         Dim ShortDesc As New BAPI_MAKTTable
         Dim sDescr As New BAPI_MAKT
         sDescr.Langu = "E"                                  ' Language
         sDescr.Matl_Desc = "Short Desc Test"               ' Short Description (Max 40)
         ShortDesc.Add(sDescr)
         Dim tblRet As New BAPIRET2
         Dim tblRetMsg As New BAPI_MATRETURN2Table
         proxy.Bapi_Material_Savedata(ClientData, ClientDataX, Nothing, Nothing, Nothing, Nothing, HeadData, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, tblRet, Nothing, Nothing, Nothing, ShortDesc, Nothing, Nothing, Nothing, tblRetMsg, Nothing, Nothing, Nothing)
    Exception Thrown Here!!!

    Reiner,
    Tried what you suggested, still get the same results.  This the 3rd development system I try this from. In all cases I generated proxies via drop and drop of the SaveData Method under StandardMaterial (BOR).  Since it was just generated the MetaData should be up to date?, good suggestion thought, I could see where that might be a problem going against different backends.
    My lastest attempt (I am quickly running out of ideas), was to generate a Standalone Proxy containing the SaveData method.  Same Results :{ 
    I was able to create Standalone Proxies for the other Business Objects I'm using (Characteristics, Class..etc) without a hitch. (Except for "Class", complaining about the Class name generated (Public Class Class...so I renamed to sapClass).  Using the Standalone Proxy Class I might try from Visual Studio 2005 to see if I get the same results.
    Also encountered another problem when trying to Add the whole BOR object StandardMaterial to the Proxy (so I would have access to a few of the Methods....this failed with some Java out of memory error....I would have to attempt this again to capture the exact error....when I get time I'll put that in another post).

Maybe you are looking for