From: Patrick Schmitz Date: Thu, 26 May 2011 07:05:27 +0000 (+0000) Subject: CSPACE-3900 More support for invoking Batch processes. Added ResourceMap to injectabl... X-Git-Url: https://git.aero2k.de/?a=commitdiff_plain;h=2d46596711bd14599722a60aec0be0a404381c5d;p=tmp%2Fjakarta-migration.git CSPACE-3900 More support for invoking Batch processes. Added ResourceMap to injectable context, so BatchResource can set this into the Invocable interface. Added Invocable and related interfaces and classes for invoking and getting responses from Batch jobs (and other invocables, like reports). Still have to write real logic into the demo batch job. --- diff --git a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/batch/batch.xml b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/batch/batch.xml new file mode 100644 index 000000000..cce9951da --- /dev/null +++ b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/batch/batch.xml @@ -0,0 +1,42 @@ + + + + + YWRtaW5AY29sbGVjdGlvbnNwYWNlLm9yZzpBZG1pbmlzdHJhdG9y + YWRtaW5AY29sbGVjdGlvbnNwYWNlLm9yZzpBZG1pbmlzdHJhdG9y + + + + + POST + /cspace-services/batch/ + batch/batch1.xml + + + POST + /cspace-services/collectionobjects/ + batch/collObj1.xml + + + POST + /cspace-services/batch/${ba1.CSID} + batch/batch1InvContext.xml + + ${ba2.CSID} + + + + + + + DELETE + /cspace-services/batch/${ba1.CSID} + + + DELETE + /cspace-services/collectionobjects/${ba2.CSID} + + + + + diff --git a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/batch/batch1.xml b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/batch/batch1.xml new file mode 100644 index 000000000..e68dd183e --- /dev/null +++ b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/batch/batch1.xml @@ -0,0 +1,13 @@ + + + + TestCreateAndLinkLoanOutBatchJob + This should be interesting + CollectionObject + true + true + org.collectionspace.services.batch.nuxeo.CreateAndLinkLoanOutBatchJob + + diff --git a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/batch/batch1InvContext.xml b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/batch/batch1InvContext.xml new file mode 100644 index 000000000..fb3ac7bb6 --- /dev/null +++ b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/batch/batch1InvContext.xml @@ -0,0 +1,10 @@ + + + single + CollectionObject + ${CollObj1} + + + diff --git a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/batch/collObj1.xml b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/batch/collObj1.xml new file mode 100644 index 000000000..3d16f56d5 --- /dev/null +++ b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/batch/collObj1.xml @@ -0,0 +1,9 @@ + + + + objectNumber + XXX + otherNumberType + + + diff --git a/services/JaxRsServiceProvider/src/main/java/org/collectionspace/services/jaxrs/CSpaceResteasyBootstrap.java b/services/JaxRsServiceProvider/src/main/java/org/collectionspace/services/jaxrs/CSpaceResteasyBootstrap.java new file mode 100644 index 000000000..15dac1c78 --- /dev/null +++ b/services/JaxRsServiceProvider/src/main/java/org/collectionspace/services/jaxrs/CSpaceResteasyBootstrap.java @@ -0,0 +1,19 @@ +package org.collectionspace.services.jaxrs; + +import javax.servlet.ServletContextEvent; + +import org.jboss.resteasy.core.Dispatcher; +import org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap; +import org.collectionspace.services.common.ResourceMap; + +public class CSpaceResteasyBootstrap extends ResteasyBootstrap { + + public void contextInitialized(ServletContextEvent event) { + super.contextInitialized(event); + CollectionSpaceJaxRsApplication app = + (CollectionSpaceJaxRsApplication)deployment.getApplication(); + Dispatcher disp = deployment.getDispatcher(); + disp.getDefaultContextObjects().put(ResourceMap.class, app.getResourceMap()); + } + +} diff --git a/services/JaxRsServiceProvider/src/main/java/org/collectionspace/services/jaxrs/CollectionSpaceJaxRsApplication.java b/services/JaxRsServiceProvider/src/main/java/org/collectionspace/services/jaxrs/CollectionSpaceJaxRsApplication.java index 8f41d889e..a8d309c62 100644 --- a/services/JaxRsServiceProvider/src/main/java/org/collectionspace/services/jaxrs/CollectionSpaceJaxRsApplication.java +++ b/services/JaxRsServiceProvider/src/main/java/org/collectionspace/services/jaxrs/CollectionSpaceJaxRsApplication.java @@ -51,13 +51,22 @@ import org.collectionspace.services.workflow.WorkflowResource; //import org.collectionspace.services.query.QueryResource; import javax.ws.rs.core.Application; +import javax.ws.rs.core.Context; + +import java.util.HashMap; import java.util.HashSet; import java.util.Set; //import org.collectionspace.services.common.FileUtils; import org.collectionspace.services.authorization.PermissionResource; import org.collectionspace.services.authorization.RoleResource; +import org.collectionspace.services.common.ResourceBase; +import org.collectionspace.services.common.ResourceMap; +import org.collectionspace.services.common.ResourceMapHolder; +import org.collectionspace.services.common.ResourceMapImpl; import org.collectionspace.services.common.security.SecurityInterceptor; +import org.jboss.resteasy.core.Dispatcher; +import org.jboss.resteasy.spi.ResteasyProviderFactory; //import org.collectionspace.services.common.document.DocumentUtils; //import org.collectionspace.services.common.imaging.nuxeo.NuxeoImageUtils; //import org.collectionspace.services.common.profile.Profiler; @@ -70,41 +79,48 @@ import org.collectionspace.services.common.security.SecurityInterceptor; * $LastChangedRevision$ * $LastChangedDate$ */ -public class CollectionSpaceJaxRsApplication extends Application { +public class CollectionSpaceJaxRsApplication extends Application + implements ResourceMapHolder { private Set singletons = new HashSet(); private Set> empty = new HashSet>(); + private ResourceMap resourceMap = new ResourceMapImpl(); public CollectionSpaceJaxRsApplication() { // // Instantiate all our JaxRS resources // + ResourceBase resource; singletons.add(new SecurityInterceptor()); singletons.add(new AccountResource()); singletons.add(new RoleResource()); singletons.add(new PermissionResource()); + singletons.add(new VocabularyResource()); - singletons.add(new ContactResource()); singletons.add(new PersonAuthorityResource()); singletons.add(new OrgAuthorityResource()); - singletons.add(new CollectionObjectResource()); - singletons.add(new GroupResource()); - singletons.add(new IntakeResource()); - singletons.add(new DimensionResource()); - singletons.add(new RelationResource()); - singletons.add(new NoteResource()); - singletons.add(new LoaninResource()); - singletons.add(new LoanoutResource()); - singletons.add(new AcquisitionResource()); - singletons.add(new ObjectExitResource()); - singletons.add(new BatchResource()); - singletons.add(new ImportsResource()); - singletons.add(new MediaResource()); - singletons.add(new BlobResource()); - singletons.add(new MovementResource()); - singletons.add(new ReportResource()); singletons.add(new LocationAuthorityResource()); singletons.add(new TaxonomyAuthorityResource()); + + singletons.add(new AcquisitionResource()); + + addResourceToMapAndSingletons(new ContactResource()); + addResourceToMapAndSingletons(new CollectionObjectResource()); + addResourceToMapAndSingletons(new GroupResource()); + addResourceToMapAndSingletons(new IntakeResource()); + addResourceToMapAndSingletons(new DimensionResource()); + addResourceToMapAndSingletons(new RelationResource()); + addResourceToMapAndSingletons(new NoteResource()); + addResourceToMapAndSingletons(new LoaninResource()); + addResourceToMapAndSingletons(new LoanoutResource()); + addResourceToMapAndSingletons(new ObjectExitResource()); + addResourceToMapAndSingletons(new BatchResource()); + addResourceToMapAndSingletons(new ImportsResource()); + addResourceToMapAndSingletons(new MediaResource()); + addResourceToMapAndSingletons(new BlobResource()); + addResourceToMapAndSingletons(new MovementResource()); + addResourceToMapAndSingletons(new ReportResource()); + singletons.add(new IDResource()); /* singletons.add(new WorkflowResource()); @@ -113,6 +129,11 @@ public class CollectionSpaceJaxRsApplication extends Application { // singletons.add(new DomainIdentifierResource()); // singletons.add(new PingResource()); } + + private void addResourceToMapAndSingletons(ResourceBase resource) { + singletons.add(resource); + resourceMap.put(resource.getClass().getName(), resource); + } @Override public Set> getClasses() { @@ -123,5 +144,9 @@ public class CollectionSpaceJaxRsApplication extends Application { public Set getSingletons() { return singletons; } + + public ResourceMap getResourceMap() { + return resourceMap; + } } diff --git a/services/JaxRsServiceProvider/src/main/webapp/WEB-INF/web.xml b/services/JaxRsServiceProvider/src/main/webapp/WEB-INF/web.xml index c1395cf26..079bb6bc5 100644 --- a/services/JaxRsServiceProvider/src/main/webapp/WEB-INF/web.xml +++ b/services/JaxRsServiceProvider/src/main/webapp/WEB-INF/web.xml @@ -82,7 +82,7 @@ - org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap + org.collectionspace.services.jaxrs.CSpaceResteasyBootstrap diff --git a/services/batch/jaxb/src/main/java/org/collectionspace/services/BatchJAXBSchema.java b/services/batch/jaxb/src/main/java/org/collectionspace/services/BatchJAXBSchema.java index 99e817618..122e79eb0 100644 --- a/services/batch/jaxb/src/main/java/org/collectionspace/services/BatchJAXBSchema.java +++ b/services/batch/jaxb/src/main/java/org/collectionspace/services/BatchJAXBSchema.java @@ -5,5 +5,9 @@ package org.collectionspace.services; public interface BatchJAXBSchema { final static String BATCH_NAME = "name"; - final static String BATCH_FORDOCTYPE = "forDocType"; + final static String BATCH_NOTES = "notes"; + final static String BATCH_FOR_DOC_TYPE = "forDocType"; + final static String BATCH_FOR_SINGLE_DOC = "forSingleDoc"; + final static String BATCH_CREATES_NEW_FOCUS = "createsNewFocus"; + final static String BATCH_CLASS_NAME = "className"; } diff --git a/services/batch/service/pom.xml b/services/batch/service/pom.xml index 546385db7..a5726ef31 100644 --- a/services/batch/service/pom.xml +++ b/services/batch/service/pom.xml @@ -19,6 +19,11 @@ org.collectionspace.services.common ${project.version} + + org.collectionspace.services + org.collectionspace.services.jaxb + ${project.version} + org.collectionspace.services org.collectionspace.services.batch.client diff --git a/services/batch/service/src/main/java/org/collectionspace/services/batch/BatchInvocable.java b/services/batch/service/src/main/java/org/collectionspace/services/batch/BatchInvocable.java new file mode 100644 index 000000000..01274ea20 --- /dev/null +++ b/services/batch/service/src/main/java/org/collectionspace/services/batch/BatchInvocable.java @@ -0,0 +1,18 @@ +package org.collectionspace.services.batch; + +import java.util.HashMap; +import java.util.Set; + +import org.collectionspace.services.common.ResourceBase; +import org.collectionspace.services.common.ResourceMap; +import org.collectionspace.services.common.invocable.Invocable; + +public interface BatchInvocable extends Invocable { + + /** + * Sets the invocation context for the batch job. Called before run(). + * @param context an instance of InvocationContext. + */ + public void setResourceMap(ResourceMap resourceMap); + +} diff --git a/services/batch/service/src/main/java/org/collectionspace/services/batch/BatchResource.java b/services/batch/service/src/main/java/org/collectionspace/services/batch/BatchResource.java index cdf6f6a7b..3cf7b6751 100644 --- a/services/batch/service/src/main/java/org/collectionspace/services/batch/BatchResource.java +++ b/services/batch/service/src/main/java/org/collectionspace/services/batch/BatchResource.java @@ -23,12 +23,34 @@ */ package org.collectionspace.services.batch; +import java.util.List; + +import org.collectionspace.services.BatchJAXBSchema; import org.collectionspace.services.client.BatchClient; +import org.collectionspace.services.client.PoxPayloadIn; +import org.collectionspace.services.client.PoxPayloadOut; import org.collectionspace.services.common.ResourceBase; +import org.collectionspace.services.common.ResourceMap; +import org.collectionspace.services.common.ServiceMessages; +import org.collectionspace.services.common.context.ServiceContext; +import org.collectionspace.services.common.document.DocumentHandler; +import org.collectionspace.services.common.document.DocumentWrapper; +import org.collectionspace.services.common.document.ValidatorHandler; +import org.collectionspace.services.common.invocable.Invocable; +import org.collectionspace.services.common.invocable.InvocationContext; +import org.collectionspace.services.common.invocable.InvocationResults; +import org.jboss.resteasy.spi.ResteasyProviderFactory; +import org.nuxeo.ecm.core.api.DocumentModel; +import org.collectionspace.services.common.ResourceMapHolder; import javax.ws.rs.Consumes; +import javax.ws.rs.POST; import javax.ws.rs.Path; +import javax.ws.rs.PathParam; import javax.ws.rs.Produces; +import javax.ws.rs.core.Application; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.UriInfo; @Path(BatchClient.SERVICE_PATH) @Produces({"application/xml"}) @@ -56,4 +78,67 @@ public class BatchResource extends ResourceBase { } } + @POST + @Path("{csid}") + public InvocationResults invokeBatchJob( + @Context ResourceMap resourceMap, + @PathParam("csid") String csid, + InvocationContext invContext) { + try { + ServiceContext ctx = createServiceContext(); + DocumentHandler handler = createDocumentHandler(ctx); + DocumentWrapper wrapper = + getRepositoryClient(ctx).getDoc(ctx, csid); + DocumentModel docModel = wrapper.getWrappedObject(); + String className = + (String)docModel.getPropertyValue(BatchJAXBSchema.BATCH_CLASS_NAME); + className = className.trim(); + ClassLoader tccl = Thread.currentThread().getContextClassLoader(); + Class c = tccl.loadClass(className); + // enable validation assertions + tccl.setClassAssertionStatus(className, true); + if(!BatchInvocable.class.isAssignableFrom(c)) { + throw new RuntimeException("BatchResource: Class: " + +className+" does not implement BatchInvocable!"); + } else { + BatchInvocable batchInstance = (BatchInvocable)c.newInstance(); + List modes = batchInstance.getSupportedInvocationModes(); + if(!modes.contains(invContext.getMode())) { + throw new RuntimeException( + "BatchResource: Invoked with unsupported context mode: " + +invContext.getMode()); + } + String forDocType = + (String)docModel.getPropertyValue(BatchJAXBSchema.BATCH_FOR_DOC_TYPE); + if(!forDocType.equalsIgnoreCase(invContext.getDocType())) { + throw new RuntimeException( + "BatchResource: Invoked with unsupported document type: " + +invContext.getDocType()); + } + batchInstance.setInvocationContext(invContext); + //ResourceMapHolder csapp = (ResourceMapHolder)app; + if(resourceMap!=null) { + batchInstance.setResourceMap(resourceMap); + } else { + resourceMap = ResteasyProviderFactory.getContextData(ResourceMap.class); + if(resourceMap!=null) { + batchInstance.setResourceMap(resourceMap); + } else { + logger.warn("BatchResource.invoke did not get a resourceMapHolder in Context!"); + } + } + batchInstance.run(); + int status = batchInstance.getCompletionStatus(); + if(status == Invocable.STATUS_ERROR) { + throw new RuntimeException( + "BatchResouce: batchProcess encountered error: " + +batchInstance.getErrorInfo()); + } + InvocationResults results = batchInstance.getResults(); + return results; + } + } catch (Exception e) { + throw bigReThrow(e, ServiceMessages.POST_FAILED); + } + } } diff --git a/services/batch/service/src/main/java/org/collectionspace/services/batch/nuxeo/BatchValidatorHandler.java b/services/batch/service/src/main/java/org/collectionspace/services/batch/nuxeo/BatchValidatorHandler.java index 990094eb2..4598b146d 100644 --- a/services/batch/service/src/main/java/org/collectionspace/services/batch/nuxeo/BatchValidatorHandler.java +++ b/services/batch/service/src/main/java/org/collectionspace/services/batch/nuxeo/BatchValidatorHandler.java @@ -11,8 +11,7 @@ public class BatchValidatorHandler implements ValidatorHandler { public void validate(Action action, ServiceContext ctx) throws InvalidDocumentException { // TODO Auto-generated method stub - System.out.println("BatchValidatorHandler executed."); - + //System.out.println("BatchValidatorHandler executed."); } } diff --git a/services/batch/service/src/main/java/org/collectionspace/services/batch/nuxeo/CreateAndLinkLoanOutBatchJob.java b/services/batch/service/src/main/java/org/collectionspace/services/batch/nuxeo/CreateAndLinkLoanOutBatchJob.java new file mode 100644 index 000000000..b0f77f4e3 --- /dev/null +++ b/services/batch/service/src/main/java/org/collectionspace/services/batch/nuxeo/CreateAndLinkLoanOutBatchJob.java @@ -0,0 +1,101 @@ +package org.collectionspace.services.batch.nuxeo; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import org.collectionspace.services.batch.BatchInvocable; +import org.collectionspace.services.common.ResourceBase; +import org.collectionspace.services.common.ResourceMap; +import org.collectionspace.services.common.invocable.InvocationContext; +import org.collectionspace.services.common.invocable.InvocationResults; + +public class CreateAndLinkLoanOutBatchJob implements BatchInvocable { + + private static ArrayList invocationModes = null; + private InvocationContext context; + private int completionStatus; + private HashMap resourceMap; + private InvocationResults results; + private String errorInfo; + + public CreateAndLinkLoanOutBatchJob() { + CreateAndLinkLoanOutBatchJob.setupClassStatics(); + context = null; + completionStatus = STATUS_UNSTARTED; + resourceMap = null; + results = new InvocationResults(); + errorInfo = ""; + } + + private static void setupClassStatics() { + if(invocationModes == null ) { + invocationModes = new ArrayList(1); + invocationModes.add(INVOCATION_MODE_SINGLE); + } + } + + /** + * @return a set of modes that this plugin can support on invocation. Must be non-empty. + */ + public List getSupportedInvocationModes() { + return CreateAndLinkLoanOutBatchJob.invocationModes; + } + + /** + * Sets the invocation context for the batch job. Called before run(). + * @param context an instance of InvocationContext. + */ + public void setInvocationContext(InvocationContext context) { + this.context = context; + } + + /** + * Sets the invocation context for the batch job. Called before run(). + * @param context an instance of InvocationContext. + */ + public void setResourceMap(ResourceMap resourceMap) { + } + + /** + * The main work logic of the batch job. Will be called after setContext. + */ + public void run() { + completionStatus = STATUS_UNSTARTED; + try { + Thread.sleep(1000); + } catch(Exception e) {} + results.setPrimaryURICreated(null); + results.setNumAffected(0); + results.setUserNote("CreateAndLinkLoanOutBatchJob pretended to do work, and completed"); + completionStatus = STATUS_COMPLETE; + } + + /** + * @return one of the STATUS_* constants, or a value from 1-99 to indicate progress. + * Implementations need not support partial completion (progress) values, and can transition + * from STATUS_MIN_PROGRESS to STATUS_COMPLETE. + */ + public int getCompletionStatus() { + return completionStatus; + } + + /** + * @return information about the batch job actions and results + */ + public InvocationResults getResults() { + if(completionStatus != STATUS_COMPLETE) + return null; + return results; + } + + /** + * @return a user-presentable note when an error occurs in batch processing. Will only + * be called if getCompletionStatus() returns STATUS_ERROR. + */ + public String getErrorInfo() { + return errorInfo; + } + + +} diff --git a/services/common/src/main/java/org/collectionspace/services/common/ResourceMap.java b/services/common/src/main/java/org/collectionspace/services/common/ResourceMap.java new file mode 100644 index 000000000..2f98da3b7 --- /dev/null +++ b/services/common/src/main/java/org/collectionspace/services/common/ResourceMap.java @@ -0,0 +1,7 @@ +package org.collectionspace.services.common; + +import java.util.Map; + +public interface ResourceMap extends Map { + +} diff --git a/services/common/src/main/java/org/collectionspace/services/common/ResourceMapHolder.java b/services/common/src/main/java/org/collectionspace/services/common/ResourceMapHolder.java new file mode 100644 index 000000000..7bb298669 --- /dev/null +++ b/services/common/src/main/java/org/collectionspace/services/common/ResourceMapHolder.java @@ -0,0 +1,5 @@ +package org.collectionspace.services.common; + +public interface ResourceMapHolder { + public ResourceMap getResourceMap(); +} diff --git a/services/common/src/main/java/org/collectionspace/services/common/ResourceMapImpl.java b/services/common/src/main/java/org/collectionspace/services/common/ResourceMapImpl.java new file mode 100644 index 000000000..4845d9971 --- /dev/null +++ b/services/common/src/main/java/org/collectionspace/services/common/ResourceMapImpl.java @@ -0,0 +1,7 @@ +package org.collectionspace.services.common; + +import java.util.HashMap; + +public class ResourceMapImpl extends HashMap implements ResourceMap { + +} diff --git a/services/common/src/main/java/org/collectionspace/services/common/invocable/Invocable.java b/services/common/src/main/java/org/collectionspace/services/common/invocable/Invocable.java new file mode 100644 index 000000000..16212a812 --- /dev/null +++ b/services/common/src/main/java/org/collectionspace/services/common/invocable/Invocable.java @@ -0,0 +1,82 @@ +/** + * This document is a part of the source code and related artifacts + * for CollectionSpace, an open source collections management system + * for museums and related institutions: + + * http://www.collectionspace.org + * http://wiki.collectionspace.org + + * Copyright 2009 University of California at Berkeley + + * Licensed under the Educational Community License (ECL), Version 2.0. + * You may not use this file except in compliance with this License. + + * You may obtain a copy of the ECL 2.0 License at + + * https://source.collectionspace.org/collection-space/LICENSE.txt + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.collectionspace.services.common.invocable; + +import org.collectionspace.services.common.invocable.InvocationContext; +import java.util.List; + + +/** + * Invocation defines an interface for invocable jobs (batch, reports, exports, etc) + * + * $LastChangedRevision: $ + * $LastChangedDate: $ + */ +public interface Invocable { + + public String INVOCATION_MODE_SINGLE = "single"; + public String INVOCATION_MODE_GROUP = "group"; + public String INVOCATION_MODE_LIST = "list"; + //public String INVOCATION_MODE_QUERY = "query"; NYI + + public final int STATUS_ERROR = -1; + public final int STATUS_UNSTARTED = 0; + public final int STATUS_MIN_PROGRESS = 1; + public final int STATUS_COMPLETE = 100; + + /** + * @return a set of modes that this plugin can support on invocation. Must be non-empty. + */ + public List getSupportedInvocationModes(); + + /** + * Sets the invocation context for the batch job. Called before run(). + * @param context an instance of InvocationContext. + */ + public void setInvocationContext(InvocationContext context); + + /** + * The main work logic of the batch job. Will be called after setContext. + */ + public void run(); + + /** + * @return one of the STATUS_* constants, or a value from 1-99 to indicate progress. + * Implementations need not support partial completion (progress) values, and can transition + * from STATUS_MIN_PROGRESS to STATUS_COMPLETE. + */ + public int getCompletionStatus(); + + /** + * @return information about the batch job actions and results + */ + public InvocationResults getResults(); + + /** + * @return a user-presentable note when an error occurs in batch processing. Will only + * be called if getCompletionStatus() returns STATUS_ERROR. + */ + public String getErrorInfo(); + +} diff --git a/services/jaxb/src/main/resources/invocationContext.xsd b/services/jaxb/src/main/resources/invocationContext.xsd new file mode 100644 index 000000000..0f1c0b9bd --- /dev/null +++ b/services/jaxb/src/main/resources/invocationContext.xsd @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/services/jaxb/src/main/resources/invocationResults.xsd b/services/jaxb/src/main/resources/invocationResults.xsd new file mode 100644 index 000000000..7f7b732c0 --- /dev/null +++ b/services/jaxb/src/main/resources/invocationResults.xsd @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + +