IBM BPM, V8.0.1, All platforms > Authoring services in Integration Designer > Defining and transforming data > Transforming data > Transforming data using a business object map > Mapping with XSD wildcards > The <any> element > Create custom maps using <any> elements
Mapping xsd:any[]
A business object which has an xsd:any[] will have the maxOccurs = “unbounded” in the type declaration for the <any> element. This would imply that the <any> element can hold multiple values within the same property that was used to define it.
The map above shows a custom code snippet that iterates over each of the values set on the <any> element and copies specific values to the target <any> element which is also an array. There is no special condition defined here for the copying, but this can be easily done:
// Variable AnyElemAny is represented as AnyElemAny_1 ServiceManager serviceManager = new ServiceManager(); Bofactory bofactory = (BOFactory)serviceManager.locateService("com/ibm/websphere/bo/BOFactory"); BOXSDHelper xsdHelper = (BOXSDHelper)serviceManager.locateService("com/ibm/websphere/bo" ); // Retrieve the values in the xsd:any[] on the source and populate the target int instancePropertyCount = AnyMany.getInstanceProperties().size(); int definedPropertyCount = AnyMany.getType().getProperties().size(); // If equal, then the Source BO does not have data corresponding to xsd:any if (instancePropertyCount == definedPropertyCount) System.out.println("no open properties found"); // Iterate through each of the properties and get the value // set the target Property property = null; // target Sequence Sequence seq = AnyMany_1.getSequence(); Property targetAnyProperty = xsdHelper.getGlobalProperty("http://GlobalElems", "globalElement1", true); for (int i = definedPropertyCount; i < instancePropertyCount; i++) { property = (Property) AnyMany.getInstanceProperties().get(i); if (xsdHelper.isElement(property)) { Object data = AnyMany.get(property); // set this data on the target seq.add(targetAnyProperty,data); } }