package org.cagrid.gme.soapclient; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.exception.ExceptionUtils; import org.cagrid.gme.model.XMLSchema; import org.cagrid.gme.model.XMLSchemaDocument; import org.cagrid.gme.wsrf.stubs.InvalidSchemaSubmissionFaultFaultMessage; import org.cagrid.gme.wsrf.stubs.PublishXMLSchemasRequest; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.net.URI; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class PublishXMLSchema extends GMEClientBase { private PublishXMLSchema(String url) throws Exception { super(url); } public void publishXMLSchema(List<XMLSchema> schema) throws InvalidSchemaSubmissionFaultFaultMessage { PublishXMLSchemasRequest req = new PublishXMLSchemasRequest(); PublishXMLSchemasRequest.Schemas schemas = new PublishXMLSchemasRequest.Schemas(); schemas.getXMLSchema().addAll(schema); req.setSchemas(schemas); gme.publishXMLSchemas(req); } public static void main(String[] args) { try { PublishXMLSchema data = new PublishXMLSchema(LOCAL_URL); List<XMLSchema> schemas = new ArrayList<XMLSchema>(); schemas.add(PublishXMLSchema.createSchema(new URI("gme://a"), new File("cagrid-gme/cagrid-gme-soap-client/src/test/resources/A.xsd"))); schemas.add(PublishXMLSchema.createSchema(new URI("gme://b"), new File("cagrid-gme/cagrid-gme-soap-client/src/test/resources/B.xsd"))); data.publishXMLSchema(schemas); } catch(Exception e) { System.out.println(ExceptionUtils.getFullStackTrace(e)); } } public static XMLSchema createSchema(URI namespace, File schemaFile) throws FileNotFoundException, IOException { List<File> list = new ArrayList<File>(); list.add(schemaFile); return createSchema(namespace, list); } public static XMLSchema createSchema(URI namespace, List<File> schemaFiles) throws FileNotFoundException, IOException { if (schemaFiles == null || schemaFiles.size() == 0) { throw new IllegalArgumentException("schemaFiles must be a valid array of files."); } XMLSchemaDocument root = createSchemaDocument(schemaFiles.get(0)); Set<XMLSchemaDocument> docs = new HashSet<XMLSchemaDocument>(schemaFiles.size() - 1); for (int i = 1; i < schemaFiles.size(); i++) { docs.add(createSchemaDocument(schemaFiles.get(i))); } XMLSchema schema = new XMLSchema(); schema.setTargetNamespace(namespace); schema.setRootDocument(root); schema.getAdditionalDocuments().addAll(docs); return schema; } public static XMLSchemaDocument createSchemaDocument(File schemaFile) throws FileNotFoundException, IOException { if (schemaFile == null || !schemaFile.canRead()) { throw new IllegalArgumentException("schemaFile [" + schemaFile.getAbsolutePath() + "] must be a valid, readable file."); } FileInputStream fileInputStream = new FileInputStream(schemaFile); String fileContents = IOUtils.toString(fileInputStream); fileInputStream.close(); String systemID = schemaFile.getName(); XMLSchemaDocument sd = new XMLSchemaDocument(); sd.setSchemaText(fileContents); sd.setSystemID(systemID); return sd; } }