Search in sources :

Example 26 with XmlElement

use of javax.xml.bind.annotation.XmlElement in project drools by kiegroup.

the class CommandSerializationTest method batchExecutionImplSerializationTest.

@Test
@Ignore
public void batchExecutionImplSerializationTest() throws Exception {
    DefaultFactHandle factHandle = new DefaultFactHandle(13, "entry-point-id", 42, 84, 400l, "fact");
    BatchExecutionCommandImpl batchCmd = new BatchExecutionCommandImpl();
    batchCmd.setLookup("lookup");
    {
        AbortWorkItemCommand cmd = new AbortWorkItemCommand(23l);
        batchCmd.addCommand(cmd);
    }
    {
        String externalForm = factHandle.toExternalForm();
        assertEquals("FactHandle string", externalForm, DisconnectedFactHandle.newFrom(factHandle).toExternalForm());
        DeleteCommand cmd = new DeleteCommand(factHandle);
        batchCmd.addCommand(cmd);
    }
    {
        GetGlobalCommand cmd = new GetGlobalCommand("global-id");
        cmd.setOutIdentifier("out-id");
        batchCmd.addCommand(cmd);
    }
    {
        SetGlobalCommand cmd = new SetGlobalCommand("global-id", new Integer(23));
        cmd.setOutIdentifier("out-id");
        batchCmd.addCommand(cmd);
    }
    {
        InsertElementsCommand cmd = new InsertElementsCommand();
        cmd.setEntryPoint("entry-point");
        cmd.setOutIdentifier("out-id");
        cmd.setReturnObject(true);
        Map<String, Object> mapObj = new HashMap<String, Object>();
        mapObj.put("key", "value");
        List<Object> objects = new ArrayList<Object>(1);
        objects.add(mapObj);
        cmd.setObjects(objects);
        batchCmd.addCommand(cmd);
    }
    {
        QueryCommand cmd = new QueryCommand();
        List<Object> args = new ArrayList<Object>(3);
        args.add("this");
        args.add(42);
        args.add("other");
        cmd.setArguments(args);
        cmd.setName("query-name");
        cmd.setOutIdentifier("out-id");
        batchCmd.addCommand(cmd);
    }
    {
        InsertObjectCommand cmd = new InsertObjectCommand();
        cmd.setEntryPoint("entry-point");
        cmd.setOutIdentifier("out-id");
        cmd.setReturnObject(true);
        cmd.setObject("object");
        batchCmd.addCommand(cmd);
    }
    {
        ModifyCommand cmd = new ModifyCommand();
        cmd.setFactHandle(DisconnectedFactHandle.newFrom(factHandle));
        List<Setter> setters = new ArrayList<Setter>(2);
        Setter setter = new Setter() {

            @Override
            public String getValue() {
                return "blue";
            }

            @Override
            public String getAccessor() {
                return "heart";
            }
        };
        setters.add(setter);
        setter = new Setter() {

            @Override
            public String getValue() {
                return "hot";
            }

            @Override
            public String getAccessor() {
                return "fingers";
            }
        };
        setters.add(setter);
        cmd.setSetters(setters);
        batchCmd.addCommand(cmd);
    }
    {
        GetObjectCommand cmd = new GetObjectCommand(factHandle, "out-id");
        batchCmd.addCommand(cmd);
    }
    // TODO: implement serialization for agenda filters
    {
        AgendaFilter[] filters = new AgendaFilter[4];
        filters[0] = new RuleNameEndsWithAgendaFilter("suffix", false);
        filters[1] = new RuleNameEqualsAgendaFilter("name", true);
        filters[2] = new RuleNameMatchesAgendaFilter("regexp", false);
        filters[3] = new RuleNameStartsWithAgendaFilter("prefix", false);
        for (AgendaFilter filter : filters) {
            FireAllRulesCommand cmd = new FireAllRulesCommand(randomString(), random.nextInt(1000), filter);
            batchCmd.addCommand(cmd);
        }
    }
    {
        AgendaFilter[] filters = new AgendaFilter[4];
        filters[0] = new RuleNameEndsWithAgendaFilter("suffix", false);
        filters[1] = new RuleNameEqualsAgendaFilter("name", true);
        filters[2] = new RuleNameMatchesAgendaFilter("regexp", false);
        filters[3] = new RuleNameStartsWithAgendaFilter("prefix", false);
        for (AgendaFilter filter : filters) {
            FireUntilHaltCommand cmd = new FireUntilHaltCommand(filter);
            batchCmd.addCommand(cmd);
        }
    }
    {
        Map<String, Object> results = new HashMap<String, Object>(1);
        List<String> resultValList = new ArrayList<String>(2);
        resultValList.add("yellow");
        resultValList.add("chances");
        results.put("list", resultValList);
        CompleteWorkItemCommand cmd = new CompleteWorkItemCommand(random.nextInt(1000), results);
        batchCmd.addCommand(cmd);
    }
    {
        ClassObjectFilter filter = new ClassObjectFilter(String.class);
        GetObjectsCommand cmd = new GetObjectsCommand(filter, "out-id");
        batchCmd.addCommand(cmd);
    }
    {
        AgendaGroupSetFocusCommand cmd = new AgendaGroupSetFocusCommand(randomString());
        batchCmd.addCommand(cmd);
    }
    {
        ClearActivationGroupCommand cmd = new ClearActivationGroupCommand(randomString());
        batchCmd.addCommand(cmd);
    }
    {
        ClearAgendaCommand cmd = new ClearAgendaCommand();
        batchCmd.addCommand(cmd);
    }
    {
        ClearAgendaGroupCommand cmd = new ClearAgendaGroupCommand(randomString());
        batchCmd.addCommand(cmd);
    }
    {
        ClearRuleFlowGroupCommand cmd = new ClearRuleFlowGroupCommand(randomString());
        batchCmd.addCommand(cmd);
    }
    BatchExecutionCommandImpl batchCmdCopy = roundTrip(batchCmd);
    assertEquals("Batch cmd lookup", batchCmd.getLookup(), batchCmdCopy.getLookup());
    assertEquals("Batch cmd num commands", batchCmd.getCommands().size(), batchCmdCopy.getCommands().size());
    // This code should use the utility in kie-test-util when it finally gets moved there..
    for (Command copyCmd : batchCmdCopy.getCommands()) {
        for (Command origCmd : batchCmd.getCommands()) {
            Class cmdClass = origCmd.getClass();
            if (copyCmd.getClass().equals(cmdClass)) {
                if (cmdClass.equals(DeleteCommand.class)) {
                    compareFactHandles(((DeleteCommand) origCmd).getFactHandle(), ((DeleteCommand) copyCmd).getFactHandle(), DeleteCommand.class);
                } else if (cmdClass.equals(FireAllRulesCommand.class)) {
                    AgendaFilter origFilter = ((FireAllRulesCommand) origCmd).getAgendaFilter();
                    AgendaFilter copyFilter = ((FireAllRulesCommand) copyCmd).getAgendaFilter();
                    if (!origFilter.getClass().equals(copyFilter.getClass())) {
                        continue;
                    }
                    Class agendaFilterClass = origFilter.getClass();
                    for (Field agendaFilterField : agendaFilterClass.getDeclaredFields()) {
                        agendaFilterField.setAccessible(true);
                        Object afFieldOrigVal = agendaFilterField.get(origFilter);
                        Object afFieldCopyVal = agendaFilterField.get(copyFilter);
                        if (afFieldOrigVal instanceof Pattern) {
                            afFieldOrigVal = ((Pattern) afFieldOrigVal).pattern();
                            afFieldCopyVal = ((Pattern) afFieldCopyVal).pattern();
                        }
                        assertEquals(agendaFilterClass.getSimpleName() + "." + agendaFilterField.getName(), afFieldOrigVal, afFieldCopyVal);
                    }
                    assertEquals(FireAllRulesCommand.class.getSimpleName() + ".max", ((FireAllRulesCommand) origCmd).getMax(), ((FireAllRulesCommand) copyCmd).getMax());
                    assertEquals(FireAllRulesCommand.class.getSimpleName() + ".outIdentifier", ((FireAllRulesCommand) origCmd).getOutIdentifier(), ((FireAllRulesCommand) copyCmd).getOutIdentifier());
                } else if (cmdClass.equals(FireUntilHaltCommand.class)) {
                    AgendaFilter origFilter = ((FireUntilHaltCommand) origCmd).getAgendaFilter();
                    AgendaFilter copyFilter = ((FireUntilHaltCommand) copyCmd).getAgendaFilter();
                    if (!origFilter.getClass().equals(copyFilter.getClass())) {
                        continue;
                    }
                    Class agendaFilterClass = origFilter.getClass();
                    for (Field agendaFilterField : agendaFilterClass.getDeclaredFields()) {
                        agendaFilterField.setAccessible(true);
                        Object afFieldOrigVal = agendaFilterField.get(origFilter);
                        Object afFieldCopyVal = agendaFilterField.get(copyFilter);
                        if (afFieldOrigVal instanceof Pattern) {
                            afFieldOrigVal = ((Pattern) afFieldOrigVal).pattern();
                            afFieldCopyVal = ((Pattern) afFieldCopyVal).pattern();
                        }
                        assertEquals(agendaFilterClass.getSimpleName() + "." + agendaFilterField.getName(), afFieldOrigVal, afFieldCopyVal);
                    }
                } else {
                    for (Field cmdField : cmdClass.getDeclaredFields()) {
                        cmdField.setAccessible(true);
                        if (Modifier.isTransient(cmdField.getModifiers())) {
                            continue;
                        }
                        Object origVal = cmdField.get(origCmd);
                        assertNotNull(cmdClass.getSimpleName() + "." + cmdField.getName(), origVal);
                        Object copyVal = cmdField.get(copyCmd);
                        assertNotNull("Round-tripped " + cmdClass.getSimpleName() + "." + cmdField.getName(), copyVal);
                        if (origVal instanceof FactHandle) {
                            compareFactHandles((FactHandle) origVal, (FactHandle) copyVal, cmdClass);
                        } else if (origVal instanceof ClassObjectSerializationFilter) {
                            assertEquals("Original compared to Round-tripped " + cmdClass.getSimpleName() + "." + cmdField.getName(), ((ClassObjectSerializationFilter) origVal).getClass(), ((ClassObjectSerializationFilter) copyVal).getClass());
                        } else if (origVal instanceof List) {
                            List origList = (List) origVal;
                            if (((List) copyVal).isEmpty()) {
                                assertTrue("Original compared to Round-tripped " + cmdClass.getSimpleName() + "." + cmdField.getName(), origList.isEmpty());
                            } else {
                                if (origList.get(0) instanceof Setter) {
                                    for (Object obj : (List) origVal) {
                                        assertTrue("Expected a " + Setter.class.getSimpleName() + " instance (not " + obj.getClass().getSimpleName() + " in " + cmdClass.getSimpleName() + "." + cmdField.getName(), obj instanceof Setter);
                                        Iterator<Object> iter = ((List) copyVal).iterator();
                                        while (iter.hasNext()) {
                                            Setter copySetter = (Setter) iter.next();
                                            if (((Setter) obj).getAccessor().equals(copySetter.getAccessor())) {
                                                assertEquals("Original compared to Round-tripped " + cmdClass.getSimpleName() + "." + cmdField.getName(), ((Setter) obj).getValue(), copySetter.getValue());
                                                iter.remove();
                                            }
                                        }
                                    }
                                    assertTrue("Original compared to Round-tripped " + cmdClass.getSimpleName() + "." + cmdField.getName(), ((List) copyVal).isEmpty());
                                } else if (origList.get(0) instanceof Map) {
                                    Map copyMap = (Map) ((List) copyVal).get(0);
                                    for (Object entry : ((Map) origList.get(0)).entrySet()) {
                                        assertTrue("Original compared to Round-tripped " + cmdClass.getSimpleName() + "." + cmdField.getName(), (copyMap).containsKey(((Entry) entry).getKey()));
                                    }
                                }
                            }
                        } else {
                            assertTrue("Original compared to Round-tripped " + cmdClass.getSimpleName() + "." + cmdField.getName(), origVal.equals(copyVal));
                        }
                    }
                }
            }
        }
    }
    // verify that BatchExecutionCommandImpl.commands has been filled with all
    // of the different types
    Field commandsField = BatchExecutionCommandImpl.class.getDeclaredField("commands");
    XmlElements xmlElemsAnno = commandsField.getAnnotation(XmlElements.class);
    List<Class> cmdTypes = new ArrayList<Class>(xmlElemsAnno.value().length);
    for (XmlElement xmlElem : xmlElemsAnno.value()) {
        cmdTypes.add(xmlElem.type());
    }
    // already thoroughly tested..
    cmdTypes.remove(SignalEventCommand.class);
    // already thoroughly tested..
    cmdTypes.remove(StartProcessCommand.class);
    for (Command cmd : batchCmd.getCommands()) {
        cmdTypes.remove(cmd.getClass());
    }
    String cmdInstName = cmdTypes.isEmpty() ? "null" : cmdTypes.get(0).getSimpleName();
    assertTrue("Please add a " + cmdInstName + " instance to the " + BatchExecutionCommandImpl.class.getSimpleName() + " commands!", cmdTypes.isEmpty());
// other tests for this as part of the REST integration tests..
}
Also used : DisconnectedFactHandle(org.drools.core.common.DisconnectedFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) ArrayList(java.util.ArrayList) GetGlobalCommand(org.drools.core.command.runtime.GetGlobalCommand) RuleNameEqualsAgendaFilter(org.drools.core.base.RuleNameEqualsAgendaFilter) RuleNameStartsWithAgendaFilter(org.drools.core.base.RuleNameStartsWithAgendaFilter) Field(java.lang.reflect.Field) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) XmlElements(javax.xml.bind.annotation.XmlElements) BatchExecutionCommandImpl(org.drools.core.command.runtime.BatchExecutionCommandImpl) AbortWorkItemCommand(org.drools.core.command.runtime.process.AbortWorkItemCommand) ArrayList(java.util.ArrayList) List(java.util.List) RuleNameEndsWithAgendaFilter(org.drools.core.base.RuleNameEndsWithAgendaFilter) RuleNameStartsWithAgendaFilter(org.drools.core.base.RuleNameStartsWithAgendaFilter) AgendaFilter(org.kie.api.runtime.rule.AgendaFilter) RuleNameMatchesAgendaFilter(org.drools.core.base.RuleNameMatchesAgendaFilter) RuleNameEqualsAgendaFilter(org.drools.core.base.RuleNameEqualsAgendaFilter) ClassObjectSerializationFilter(org.drools.core.ClassObjectSerializationFilter) RuleNameEndsWithAgendaFilter(org.drools.core.base.RuleNameEndsWithAgendaFilter) RuleNameMatchesAgendaFilter(org.drools.core.base.RuleNameMatchesAgendaFilter) Pattern(java.util.regex.Pattern) CompleteWorkItemCommand(org.drools.core.command.runtime.process.CompleteWorkItemCommand) SetGlobalCommand(org.drools.core.command.runtime.SetGlobalCommand) ClassObjectFilter(org.drools.core.ClassObjectFilter) AbortWorkItemCommand(org.drools.core.command.runtime.process.AbortWorkItemCommand) CompleteWorkItemCommand(org.drools.core.command.runtime.process.CompleteWorkItemCommand) Command(org.kie.api.command.Command) StartProcessCommand(org.drools.core.command.runtime.process.StartProcessCommand) SetGlobalCommand(org.drools.core.command.runtime.SetGlobalCommand) GetGlobalCommand(org.drools.core.command.runtime.GetGlobalCommand) SignalEventCommand(org.drools.core.command.runtime.process.SignalEventCommand) Setter(org.kie.api.command.Setter) XmlElement(javax.xml.bind.annotation.XmlElement) HashMap(java.util.HashMap) Map(java.util.Map) Ignore(org.junit.Ignore) Test(org.junit.Test)

Example 27 with XmlElement

use of javax.xml.bind.annotation.XmlElement in project camel by apache.

the class CoreEipAnnotationProcessor method processElements.

private void processElements(ProcessingEnvironment processingEnv, RoundEnvironment roundEnv, TypeElement classElement, XmlElements elements, VariableElement fieldElement, Set<EipOption> eipOptions, String prefix) {
    Elements elementUtils = processingEnv.getElementUtils();
    String fieldName;
    fieldName = fieldElement.getSimpleName().toString();
    if (elements != null) {
        String kind = "element";
        String name = fieldName;
        name = prefix + name;
        TypeMirror fieldType = fieldElement.asType();
        String fieldTypeName = fieldType.toString();
        String defaultValue = findDefaultValue(fieldElement, fieldTypeName);
        String docComment = findJavaDoc(elementUtils, fieldElement, fieldName, name, classElement, true);
        boolean required = true;
        required = findRequired(fieldElement, required);
        // gather oneOf of the elements
        Set<String> oneOfTypes = new TreeSet<String>();
        for (XmlElement element : elements.value()) {
            String child = element.name();
            oneOfTypes.add(child);
        }
        String displayName = null;
        Metadata metadata = fieldElement.getAnnotation(Metadata.class);
        if (metadata != null) {
            displayName = metadata.displayName();
        }
        EipOption ep = new EipOption(name, displayName, kind, fieldTypeName, required, defaultValue, docComment, false, false, null, true, oneOfTypes, false);
        eipOptions.add(ep);
    }
}
Also used : TypeMirror(javax.lang.model.type.TypeMirror) TreeSet(java.util.TreeSet) Metadata(org.apache.camel.spi.Metadata) XmlElement(javax.xml.bind.annotation.XmlElement) Elements(javax.lang.model.util.Elements) XmlElements(javax.xml.bind.annotation.XmlElements)

Example 28 with XmlElement

use of javax.xml.bind.annotation.XmlElement in project swagger-core by swagger-api.

the class ModelResolver method resolveProperty.

public Property resolveProperty(JavaType propType, ModelConverterContext context, Annotation[] annotations, Iterator<ModelConverter> next) {
    LOGGER.debug("resolveProperty {}", propType);
    Property property = null;
    if (propType.isContainerType()) {
        JavaType keyType = propType.getKeyType();
        JavaType valueType = propType.getContentType();
        if (keyType != null && valueType != null) {
            property = new MapProperty().additionalProperties(context.resolveProperty(valueType, new Annotation[] {}));
        } else if (valueType != null) {
            Property items = context.resolveProperty(valueType, new Annotation[] {});
            // If property is XmlElement annotated, then use the name provided by annotation | https://github.com/swagger-api/swagger-core/issues/2047
            if (annotations != null && annotations.length > 0) {
                for (Annotation annotation : annotations) {
                    if (annotation instanceof XmlElement) {
                        XmlElement xmlElement = (XmlElement) annotation;
                        if (xmlElement != null && xmlElement.name() != null && !"".equals(xmlElement.name()) && !"##default".equals(xmlElement.name())) {
                            Xml xml = items.getXml() != null ? items.getXml() : new Xml();
                            xml.setName(xmlElement.name());
                            items.setXml(xml);
                        }
                    }
                }
            }
            ArrayProperty arrayProperty = new ArrayProperty().items(items);
            if (_isSetType(propType.getRawClass())) {
                arrayProperty.setUniqueItems(true);
            }
            property = arrayProperty;
        }
    } else {
        property = PrimitiveType.createProperty(propType);
    }
    if (property == null) {
        if (propType.isEnumType()) {
            property = new StringProperty();
            _addEnumProps(propType.getRawClass(), property);
        } else if (_isOptionalType(propType)) {
            property = context.resolveProperty(propType.containedType(0), null);
        } else {
            // complex type
            Model innerModel = context.resolve(propType);
            if (innerModel instanceof ComposedModel) {
                innerModel = ((ComposedModel) innerModel).getChild();
            }
            if (innerModel instanceof ModelImpl) {
                ModelImpl mi = (ModelImpl) innerModel;
                property = new RefProperty(StringUtils.isNotEmpty(mi.getReference()) ? mi.getReference() : mi.getName());
            }
        }
    }
    return property;
}
Also used : JavaType(com.fasterxml.jackson.databind.JavaType) ArrayProperty(io.swagger.models.properties.ArrayProperty) Xml(io.swagger.models.Xml) ComposedModel(io.swagger.models.ComposedModel) MapProperty(io.swagger.models.properties.MapProperty) Model(io.swagger.models.Model) RefModel(io.swagger.models.RefModel) ComposedModel(io.swagger.models.ComposedModel) ApiModel(io.swagger.annotations.ApiModel) XmlElement(javax.xml.bind.annotation.XmlElement) StringProperty(io.swagger.models.properties.StringProperty) ModelImpl(io.swagger.models.ModelImpl) JsonProperty(com.fasterxml.jackson.annotation.JsonProperty) StringProperty(io.swagger.models.properties.StringProperty) ArrayProperty(io.swagger.models.properties.ArrayProperty) Property(io.swagger.models.properties.Property) MapProperty(io.swagger.models.properties.MapProperty) UUIDProperty(io.swagger.models.properties.UUIDProperty) ApiModelProperty(io.swagger.annotations.ApiModelProperty) AbstractNumericProperty(io.swagger.models.properties.AbstractNumericProperty) RefProperty(io.swagger.models.properties.RefProperty) IntegerProperty(io.swagger.models.properties.IntegerProperty) Annotation(java.lang.annotation.Annotation) RefProperty(io.swagger.models.properties.RefProperty)

Example 29 with XmlElement

use of javax.xml.bind.annotation.XmlElement in project swagger-core by swagger-api.

the class JAXBAnnotationsHelper method applyElement.

/**
     * Puts definitions for XML element.
     *
     * @param member   annotations provider
     * @param property property instance to be updated
     */
private static void applyElement(AnnotatedMember member, Property property) {
    final XmlElementWrapper wrapper = member.getAnnotation(XmlElementWrapper.class);
    if (wrapper != null) {
        final Xml xml = getXml(property);
        xml.setWrapped(true);
        // No need to set the xml name if the name provided by xmlelementwrapper annotation is ##default or equal to the property name | https://github.com/swagger-api/swagger-core/pull/2050
        if (!"##default".equals(wrapper.name()) && !wrapper.name().isEmpty() && !wrapper.name().equals(property.getName())) {
            xml.setName(wrapper.name());
        }
    } else {
        final XmlElement element = member.getAnnotation(XmlElement.class);
        if (element != null) {
            setName(element.namespace(), element.name(), property);
        }
    }
}
Also used : Xml(io.swagger.models.Xml) XmlElement(javax.xml.bind.annotation.XmlElement) XmlElementWrapper(javax.xml.bind.annotation.XmlElementWrapper)

Example 30 with XmlElement

use of javax.xml.bind.annotation.XmlElement in project spring-petclinic by spring-projects.

the class Vet method getSpecialties.

@XmlElement
public List<Specialty> getSpecialties() {
    List<Specialty> sortedSpecs = new ArrayList<>(getSpecialtiesInternal());
    PropertyComparator.sort(sortedSpecs, new MutableSortDefinition("name", true, true));
    return Collections.unmodifiableList(sortedSpecs);
}
Also used : MutableSortDefinition(org.springframework.beans.support.MutableSortDefinition) ArrayList(java.util.ArrayList) XmlElement(javax.xml.bind.annotation.XmlElement)

Aggregations

XmlElement (javax.xml.bind.annotation.XmlElement)51 XmlAnyElement (javax.xml.bind.annotation.XmlAnyElement)26 Element (com.zimbra.common.soap.Element)25 JSONElement (com.zimbra.common.soap.Element.JSONElement)25 XMLElement (com.zimbra.common.soap.Element.XMLElement)25 Test (org.junit.Test)25 FilterTest (com.zimbra.soap.mail.type.FilterTest)24 XmlAttribute (javax.xml.bind.annotation.XmlAttribute)8 Field (java.lang.reflect.Field)7 XmlElements (javax.xml.bind.annotation.XmlElements)7 KeyValuePair (com.zimbra.soap.type.KeyValuePair)5 XmlElementRef (javax.xml.bind.annotation.XmlElementRef)5 Method (java.lang.reflect.Method)4 ArrayList (java.util.ArrayList)4 StringAttribIntValue (com.zimbra.soap.jaxb.StringAttribIntValue)3 Annotation (java.lang.annotation.Annotation)3 TypeMirror (javax.lang.model.type.TypeMirror)3 XmlElementWrapper (javax.xml.bind.annotation.XmlElementWrapper)3 QName (javax.xml.namespace.QName)3 GetDistributionListResponse (com.zimbra.soap.account.message.GetDistributionListResponse)2