Friday, November 26, 2010

extraer modelReference de un SAWSDL con EasyWSDL

EasyWSDL es una herramienta para extraer información de los ficheros WSDL. Estos ficheros pueden estar en formato  WSDL 1.1 y WSDL 2.0. Si quieres extraer la información semantica de los WSDL es decir WSDL anotados semanticamente se usa la librería http://easywsdl.ow2.org/extensions-sawsdl.html

para extraer los interfaces, servicio operaciones y binding no hay problema, es trivial con la api que te da la libreria, pero para extraer la informacion de los tipos de datos compuestos es bastante dificultoso, ya que hay que realizar varias conversiones a tipos de clases propias de la api de la libreria.

como entender esta libreria me ha costado mucho os dejo este trozo de código.

  for(org.ow2.easywsdl.extensions.sawsdl.api.schema.Schema mischema: schemaSwdl){
            System.out.println("********** of mischema in \"" + mischema.getTargetNamespace() + "\" operation (previous adding): " + mischema.getModelReference().size());
            for(org.ow2.easywsdl.extensions.sawsdl.api.schema.Element schemaElement :mischema.getElements()){
                if (schemaElement instanceof org.ow2.easywsdl.extensions.sawsdl.impl.schema.ElementImpl ){
                    System.out.println("----Model??--"+((org.ow2.easywsdl.extensions.sawsdl.impl.schema.ElementImpl)schemaElement).getModel());
                    org.ow2.easywsdl.schema.org.w3._2001.xmlschema.TopLevelElement modelReference =(org.ow2.easywsdl.schema.org.w3._2001.xmlschema.TopLevelElement)
                        ((org.ow2.easywsdl.extensions.sawsdl.impl.schema.ElementImpl)schemaElement).getModel();

                    System.out.println("-----******------in \"" + modelReference+" -***-" +modelReference.getComplexType());
                    //lista d objetos XML que luego hay que transformarlos a cada uno de sus tipos de datos para sacar las referencias.
                    List <Object> objetos =modelReference.getComplexType().getSequence().getParticle();
                     for( Object datosVarios : objetos){
                         //si son de JABX que tiene que ser de este tipo de datos todos los objetos que me devuelven.
                         if(datosVarios instanceof JAXBElement) {
                                 //System.out.print("que objeto hay"+((JAXBElement) datosVarios).getValue().getClass());
                             //vuelvo a comprobar si su valor es de tipo de datos estandar del W3C
                                if (((JAXBElement) datosVarios).getValue() instanceof org.ow2.easywsdl.schema.org.w3._2001.xmlschema.Element) {
                                    //lo transformo a un tipo de dato XML
                                    org.ow2.easywsdl.schema.org.w3._2001.xmlschema.Element nodeXML =
                                        (org.ow2.easywsdl.schema.org.w3._2001.xmlschema.Element) ((JAXBElement) datosVarios).getValue();
                                   
                                    System.out.println("que objeto hay->>>>>>>>>>>>>>>>>>>>>>>>>"+nodeXML);//+"->"+element2.getName());
                                    //forma de transformar de un dato XML a un objeto abstracto que debe implementar el objeto SchemaElement necesario para construir SAWSLD,
                                    final AbsItfElement elementSemantic = new org.ow2.easywsdl.schema.impl.ElementImpl(
                                            nodeXML,
                                            ((org.ow2.easywsdl.schema.api.abstractElmt.AbstractSchemaElementImpl) schemaElement
                                                    ).getParent());
                                   
                                    if(elementSemantic instanceof SchemaElement){
                                        SAWSDLElementImpl sawsdlElement=  new org.ow2.easywsdl.extensions.sawsdl.impl.SAWSDLElementImpl((SchemaElement) elementSemantic);
                                        System.out.println("--dame el la anotacion del modelo-"+sawsdlElement.getModelReference());
                                    }else{
                                        System.out.println("que no es un tipo semantico"+nodeXML);//.getName());
                                    }
                                }
                            }
                     }
                     System.out.print("}Tipo Compuesto\n");
                }
            }
        }

No comments:

Post a Comment