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");
                }
            }
        }

Wednesday, November 10, 2010

Exportar e Importar plugins desde eclipse con sus dependencias

Llevo todo un día perdido intentando importar las dependencias de un bundle. Claro que no es un bundle que esta en un repositorio de eclipse con su xml de dependencias. Lo que quiero hacer es sacar solo la parte de un proyecto de un plugin de Eclipse.

La solucion la he encontrado en 
http://stackoverflow.com/questions/266935/deploying-a-newly-developed-eclipse-plugin

Lo bueno es que no sabia que con hacer un feature plugin y un site se soluciona. Una maravilla esto en eclipse.