Re: use of refVerifyConstraints method

Bin Fu <[email protected]> Mon, 13 Oct 2003 13:34:37 +0200
Newsgroups gmane.comp.java.netbeans.modules.mdr.devel
Message-ID <[email protected]>
Hi, Martin,

I'm very appreciated for your answer.
java.util.Collection read(java.lang.String URI, RefPackage extent) 
returns the outermost objects of a source xml file in a Collection, and 
all what I need to deeply verify is this Collection (RefObject type), 
isn't it?
Today I tried to make some differences to verify the constraints. And 
unfortunately, when I set my Java file back to what it orginally was, 
the method read(String URL, RefPackage extent) seems not to work any 
more. it always shows following messages that earlier has never happened:

"
Log: 1 msg: Storage factory: 
org.netbeans.mdr.persistence.btreeimpl.btreestorage.BtreeFactory
Log: 16 msg: Property org.netbeans.mdr.persistence.btreeimpl.filename 
not specified. Using default value: mdr
Log: 1 msg: Storage file name: mdr
Log: 1 msg: DATABSE: mdr
Log: 1 msg: initializing...
Log: 1 msg: XMI reader started
Log: 1 msg: Instance of Model:Import cannot be created, parameters:
    (class java.lang.String) Data_Types
    (class java.lang.String)
    (class javax.jmi.model.VisibilityKindEnum) public_vis
    (class java.lang.Boolean) true
    reason: javax.jmi.reflect.TypeMismatchException
Log: 1 msg: Instance of Model:Import cannot be created, parameters:
    (class java.lang.String) Core
    (class java.lang.String)
    (class javax.jmi.model.VisibilityKindEnum) public_vis
    (class java.lang.Boolean) true
    reason: javax.jmi.reflect.TypeMismatchException
Log: 1 msg: Instance of Model:Import cannot be created, parameters:
    (class java.lang.String) Common_Behavior
    (class java.lang.String)
    (class javax.jmi.model.VisibilityKindEnum) public_vis
    (class java.lang.Boolean) true
    reason: javax.jmi.reflect.TypeMismatchException
Log: 1 msg: Instance of Model:Import cannot be created, parameters:
    (class java.lang.String) Use_Cases
    (class java.lang.String)
    (class javax.jmi.model.VisibilityKindEnum) public_vis
    (class java.lang.Boolean) true
    reason: javax.jmi.reflect.TypeMismatchException
Log: 1 msg: Instance of Model:Import cannot be created, parameters:
    (class java.lang.String) State_Machines
    (class java.lang.String)
    (class javax.jmi.model.VisibilityKindEnum) public_vis
    (class java.lang.Boolean) true
    reason: javax.jmi.reflect.TypeMismatchException
Log: 1 msg: Instance of Model:Import cannot be created, parameters:
    (class java.lang.String) Collaborations
    (class java.lang.String)
    (class javax.jmi.model.VisibilityKindEnum) public_vis
    (class java.lang.Boolean) true
    reason: javax.jmi.reflect.TypeMismatchException
Log: 1 msg: Instance of Model:Import cannot be created, parameters:
    (class java.lang.String) Activity_Graphs
    (class java.lang.String)
    (class javax.jmi.model.VisibilityKindEnum) public_vis
    (class java.lang.Boolean) true
    reason: javax.jmi.reflect.TypeMismatchException
Log: 1 msg: Instance of Model:Import cannot be created, parameters:
    (class java.lang.String) Model_Management
    (class java.lang.String)
    (class javax.jmi.model.VisibilityKindEnum) public_vis
    (class java.lang.Boolean) true
    reason: javax.jmi.reflect.TypeMismatchException
Log: 1 msg: Instance of Model:Package cannot be created, parameters:
    (class java.lang.String) UML
    (class java.lang.String)
    (class java.lang.Boolean) false
    (class java.lang.Boolean) false
    (class java.lang.Boolean) false
    (class javax.jmi.model.VisibilityKindEnum) public_vis
    reason: javax.jmi.reflect.TypeMismatchException
Log: 1 msg: Instance of Model:Tag cannot be created, parameters:
    (class java.lang.String) org.omg.mof.idl_prefix=org.omg.uml.Foundation
    (class java.lang.String)
    (class java.lang.String) org.omg.mof.idl_prefix
    (class java.util.LinkedList) [org.omg.uml.Foundation]
    reason: javax.jmi.reflect.TypeMismatchException
Log: 1 msg: Instance of Model:Tag cannot be created, parameters:
    (class java.lang.String) org.omg.xmi.namespace=UML
    (class java.lang.String)
    (class java.lang.String) org.omg.xmi.namespace
    (class java.util.LinkedList) [UML]
    reason: javax.jmi.reflect.TypeMismatchException
org.netbeans.mdr.persistence.StorageBadRequestException: No record 
exists with key 7AA40BF1-FB1A-11D7-89FE-56DDF88CAA77:0000000000026F54
        at 
org.netbeans.mdr.persistence.btreeimpl.btreestorage.BtreeDatabase.noSuchRecord(BtreeDatabase.java:958)
        at 
org.netbeans.mdr.persistence.btreeimpl.btreestorage.BtreeDatabase.get(BtreeDatabase.java:736)
        at 
org.netbeans.mdr.storagemodel.MdrStorage.resolve(MdrStorage.java:1581)
        at 
org.netbeans.mdr.persistence.btreeimpl.btreestorage.BtreeStorage.resolveObject(BtreeStorage.java:540)
        at 
org.netbeans.mdr.persistence.btreeimpl.btreeindex.MOFIDInfo.objectFromBuffer(MOFIDInfo.java:123)
        at 
org.netbeans.mdr.persistence.btreeimpl.btreeindex.BtreeListByKey$BtreeListByKeyIterator.getCurrentItem(BtreeListByKey.java:220)
        at 
org.netbeans.mdr.persistence.btreeimpl.btreeindex.BtreeListByKey$BtreeListByKeyIterator.next(BtreeListByKey.java:142)
        at 
org.netbeans.mdr.storagemodel.IndexImmutSet$IndexImmutIterator.next(IndexImmutSet.java:165)
        at 
org.netbeans.mdr.storagemodel.CompositeCollection$CompositeIterator.next(CompositeCollection.java:202)
        at 
org.netbeans.mdr.handlers.IndexSetWrapper$IndexIteratorWrapper.next(IndexSetWrapper.java:228)
        at 
org.netbeans.lib.jmi.xmi.XmiContext.substCorbaPrimitive(XmiContext.java:1275)
        at 
org.netbeans.lib.jmi.xmi.XmiContext.resolveCorbaPrimitive(XmiContext.java:1255)
        at 
org.netbeans.lib.jmi.xmi.XmiContext.resolveCorbaType(XmiContext.java:1152)
        at 
org.netbeans.lib.jmi.xmi.XmiElement$DataTypeElement.endElement(XmiElement.java:827)
        at 
org.netbeans.lib.jmi.xmi.XmiSAXReader.endElement(XmiSAXReader.java:240)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1683)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1926)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1654)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1926)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1654)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1926)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1654)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1926)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1654)
        at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:634)
        at org.apache.crimson.parser.Parser2.parse(Parser2.java:333)
        at 
org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
        at org.netbeans.lib.jmi.xmi.XmiSAXReader.read(XmiSAXReader.java:118)
        at org.netbeans.lib.jmi.xmi.XmiSAXReader.read(XmiSAXReader.java:99)
        at 
org.netbeans.lib.jmi.xmi.XMISaxReaderImpl.read(XMISaxReaderImpl.java:71)
        at 
org.netbeans.lib.jmi.xmi.XMISaxReaderImpl.read(XMISaxReaderImpl.java:52)
        at verification.Main.verify(Main.java:69)
        at verification.Main.main(Main.java:46)
java.lang.NullPointerException
        at 
org.netbeans.lib.jmi.xmi.XmiContext.substCorbaPrimitive(XmiContext.java:1276)
        at 
org.netbeans.lib.jmi.xmi.XmiContext.resolveCorbaPrimitive(XmiContext.java:1255)
        at 
org.netbeans.lib.jmi.xmi.XmiContext.resolveCorbaType(XmiContext.java:1152)
        at 
org.netbeans.lib.jmi.xmi.XmiElement$DataTypeElement.endElement(XmiElement.java:827)
        at 
org.netbeans.lib.jmi.xmi.XmiSAXReader.endElement(XmiSAXReader.java:240)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1683)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1926)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1654)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1926)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1654)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1926)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1654)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1926)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1654)
        at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:634)
        at org.apache.crimson.parser.Parser2.parse(Parser2.java:333)
        at 
org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
        at org.netbeans.lib.jmi.xmi.XmiSAXReader.read(XmiSAXReader.java:118)
        at org.netbeans.lib.jmi.xmi.XmiSAXReader.read(XmiSAXReader.java:99)
        at 
org.netbeans.lib.jmi.xmi.XMISaxReaderImpl.read(XMISaxReaderImpl.java:71)
        at 
org.netbeans.lib.jmi.xmi.XMISaxReaderImpl.read(XMISaxReaderImpl.java:52)
        at verification.Main.verify(Main.java:69)
        at verification.Main.main(Main.java:46)
javax.jmi.xmi.MalformedXMIException: java.lang.NullPointerException
        at 
org.netbeans.lib.jmi.xmi.XMISaxReaderImpl.read(XMISaxReaderImpl.java:77)
        at 
org.netbeans.lib.jmi.xmi.XMISaxReaderImpl.read(XMISaxReaderImpl.java:52)
        at verification.Main.verify(Main.java:69)
        at verification.Main.main(Main.java:46)"


earlier, it showed somehow like

Log: 1 msg: Storage factory: 
org.netbeans.mdr.persistence.btreeimpl.btreestorage.BtreeFactory
Log: 16 msg: Property org.netbeans.mdr.persistence.btreeimpl.filename 
not specified. Using default value: mdr
Log: 1 msg: Storage file name: mdr
Log: 1 msg: DATABSE: mdr
Log: 1 msg: initializing...
Log: 1 msg: XMI reader started
Log: 1 msg: 25878 instances initialized ..
..............
..............


I think my java file should be same (no significant change) as the 
earlier one, but method "read" does not work properly any more. I append 
my java file at the end of this email, and hope you could point me the 
right way again.


Thank a lot

Bin Fu


Java Source File for Constaint Verfication:

package verification;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Iterator;
import javax.jmi.model.ModelPackage;
import javax.jmi.xmi.XmiReader;
import javax.jmi.xmi.XmiWriter;
import org.netbeans.api.mdr.MDRManager;
import org.netbeans.api.mdr.MDRepository;
import org.openide.ErrorManager;
import org.openide.util.Lookup;
import java.util.List;
import java.util.ArrayList;
import javax.jmi.reflect.*;

/**
 *
 *
 */
public class Main {
    private static final String MOF_INSTANCE = "MOFInstance";
    //private static String inputFile = 
"/extgw/home/binf/temp/data/ExecuteQuery.xml";
    private static String inputFile = "/extgw/home/binf/temp/01-02-15.xml";
   
    public static MDRepository rep;
    public static ModelPackage mof;
    public static XmiReader reader;
   
    /** Creates a new instance of Main */
    public Main()
    {
    }
 
    public static void main(String arg[])
    {
        try
        {
            rep = MDRManager.getDefault().getDefaultRepository();
            String uri = new File(inputFile).toURL().toString();
            reader = (XmiReader) 
Lookup.getDefault().lookup(XmiReader.class);
           
            try
            {
                init();
                verify(uri, rep);
            }
            finally
            {
                MDRManager.getDefault().shutdownAll();
            }
           
        } catch (Exception e)
        {
            ErrorManager.getDefault().notify(ErrorManager.ERROR, e);
        }
    }
   
    private static void init() throws Exception {
        mof = (ModelPackage) rep.getExtent(MOF_INSTANCE);
        if (mof == null) {
            mof = (ModelPackage) rep.createExtent(MOF_INSTANCE);
        }
    }
   
    private static void verify(String uri, MDRepository rep) throws 
java.io.IOException, javax.jmi.xmi.MalformedXMIException, 
IndexOutOfBoundsException
    {
        RefPackage extent = rep.getExtent(MOF_INSTANCE);
        List l = new ArrayList(reader.read(uri, extent)); //it doesn't 
work any more???  
       
        for (int i=0; i<l.size(); i++)
        {
            RefObject object = (RefObject)l.get(i);
            printConstraintsVerification(object);
        }
    }
   
    private static void printConstraintsVerification(RefObject object)
    {
       
        if (object == null)
            System.out.println("RefObject is null");
        else if (object.refVerifyConstraints(true) == null)
            System.out.println("refVerifyConstraints is null");
        else
            System.out.println("value is " + 
object.refVerifyConstraints(true));
       
       
        String exception[] = (String 
[])object.refVerifyConstraints(true).toArray();
       
        int length = exception.length;
        System.out.println("Length of exception is " + length);
       
        for (int i=0; i<length; i++)
        {
            System.out.println(exception[i]);
        }
    }
}




Martin Matula wrote:

> Hi,
> the exception looks like there is an attribute in your metamodel that 
> does not have a type set. Maybe you could file a request for 
> enhancement (issue) requesting making the JMIMapper more user friendly 
> when reporting errors.
> I am not sure why the refVerifyConstraints does not work for you. It 
> is a fact that we have not implemented checking of all constraints, 
> but at least the multiplicity constraint should be checked. Are you 
> sure your program invokes refVerifyConstraints on each model element?
> Martin
>