/** * Finds nested XML schema definition and compiles it to a schema type system instance. * * @param wsdl * @return * @throws MojoExecutionException */ private SchemaTypeSystem compileXsd(XmlObject wsdl) throws MojoExecutionException { // extract namespaces defined on wsdl-level: String[] namespacesWsdl = extractNamespacesOnWsdlLevel(wsdl); // calc the namespace-prefix of the schema-tag, default "" String schemaNsPrefix = extractSchemaNamespacePrefix(wsdl); // extract each schema-element and add missing namespaces defined on wsdl-level String[] schemas = getNestedSchemas(wsdl, namespacesWsdl, schemaNsPrefix); XmlObject[] xsd = new XmlObject[schemas.length]; try { for (int i = 0; i < schemas.length; i++) { xsd[i] = XmlObject.Factory.parse( schemas[i], (new XmlOptions()) .setLoadLineNumbers() .setLoadMessageDigest() .setCompileDownloadUrls()); } } catch (Exception e) { throw new MojoExecutionException("Failed to parse XSD schema", e); } SchemaTypeSystem schemaTypeSystem = null; try { schemaTypeSystem = XmlBeans.compileXsd(xsd, XmlBeans.getContextTypeLoader(), new XmlOptions()); } catch (XmlException e) { for (Object error : e.getErrors()) { getLog().error("Line " + ((XmlError) error).getLine() + ": " + error.toString()); } throw new MojoExecutionException("Failed to compile XSD schema", e); } catch (Exception e) { throw new MojoExecutionException("Failed to compile XSD schema", e); } return schemaTypeSystem; }
/** * Compiles WSDL file resource to a XmlObject. * * @return * @throws MojoExecutionException * @throws IOException */ private XmlObject compileWsdl() throws MojoExecutionException, IOException { Resource wsdlFile = new PathMatchingResourcePatternResolver().getResource(pathToWsdl); if (!wsdlFile.exists()) { throw new MojoExecutionException( "Unable to read WSDL - does not exist in " + wsdlFile.getFile().getAbsolutePath()); } if (!wsdlFile.getFile().canRead()) { throw new MojoExecutionException("Unable to read WSDL - could not open in read mode"); } try { return XmlObject.Factory.parse( wsdlFile.getFile(), (new XmlOptions()).setLoadLineNumbers().setLoadMessageDigest().setCompileDownloadUrls()); } catch (XmlException e) { for (Object error : e.getErrors()) { getLog().error(((XmlError) error).getLine() + "" + error.toString()); } throw new MojoExecutionException("WSDL could not be parsed", e); } catch (Exception e) { throw new MojoExecutionException("WSDL could not be parsed", e); } }