private void buildGenericElements(XmlSchema schema, XmlSchemaSequence seq, Field f) { XmlSchemaComplexType generics = new XmlSchemaComplexType(schema, true); Type type = f.getGenericType(); String rawType = ((ParameterizedType)type).getRawType().toString(); String typeName = StringUtils.uncapitalize(rawType.substring(rawType.lastIndexOf(".") + 1)); generics.setName(typeName); Class<?> genericsClass = f.getType(); buildGenericSeq(schema, generics, genericsClass); String name = Character.toLowerCase(f.getName().charAt(0)) + f.getName().substring(1); XmlSchemaElement newel = new XmlSchemaElement(schema, false); newel.setName(name); newel.setSchemaTypeName(generics.getQName()); newel.setMinOccurs(0); if (!seq.getItems().contains(newel)) { seq.getItems().add(newel); } }
/** * Creates a element in a sequence for the key type and the value type. */ private void createElement(XmlSchema schema, XmlSchemaSequence seq, QName name, AegisType type, boolean optional) { XmlSchemaElement element = new XmlSchemaElement(schema, false); seq.getItems().add(element); element.setName(name.getLocalPart()); element.setSchemaTypeName(type.getSchemaType()); if (optional) { element.setMinOccurs(0); } else { element.setMinOccurs(1); } element.setMaxOccurs(1); }
/** * Creates a element in a sequence for the key type and the value type. */ private void createElement(XmlSchema schema, XmlSchemaSequence seq, QName name, AegisType type, boolean optional) { XmlSchemaElement element = new XmlSchemaElement(schema, false); seq.getItems().add(element); element.setName(name.getLocalPart()); element.setSchemaTypeName(type.getSchemaType()); if (optional) { element.setMinOccurs(0); } else { element.setMinOccurs(1); } element.setMaxOccurs(1); }
private void addExceptionMessage(Class<?> cls, XmlSchema schema, XmlSchemaSequence seq) { try { //a subclass could mark the message method as transient Method m = cls.getMethod("getMessage"); if (!m.isAnnotationPresent(XmlTransient.class) && m.getDeclaringClass().equals(Throwable.class)) { JAXBBeanInfo beanInfo = getBeanInfo(java.lang.String.class); XmlSchemaElement exEle = new XmlSchemaElement(schema, false); exEle.setName("message"); exEle.setSchemaTypeName(getTypeName(beanInfo)); exEle.setMinOccurs(0); seq.getItems().add(exEle); } } catch (Exception e) { //ignore, just won't have the message element } }
private void buildGenericElements(XmlSchema schema, XmlSchemaSequence seq, Method m, Type type) { String rawType = ((ParameterizedType)type).getRawType().toString(); String typeName = StringUtils.uncapitalize(rawType.substring(rawType.lastIndexOf(".") + 1)); XmlSchemaComplexType generics = (XmlSchemaComplexType)schema.getTypeByName(typeName); if (generics == null) { generics = new XmlSchemaComplexType(schema, true); generics.setName(typeName); } Class<?> genericsClass = m.getReturnType(); buildGenericSeq(schema, generics, genericsClass); int idx = m.getName().startsWith("get") ? 3 : 2; String name = m.getName().substring(idx); name = Character.toLowerCase(name.charAt(0)) + name.substring(1); XmlSchemaElement newel = new XmlSchemaElement(schema, false); newel.setName(name); newel.setSchemaTypeName(generics.getQName()); newel.setMinOccurs(0); if (!seq.getItems().contains(newel)) { seq.getItems().add(newel); } }
XmlSchemaElement genericEle = new XmlSchemaElement(schema, false); genericEle.setName(genericName); genericEle.setMinOccurs(0); JAXBBeanInfo anyBean = getBeanInfo(context, f.getType()); Iterator<QName> itr = anyBean.getTypeNames().iterator(); XmlSchemaElement genericEle = new XmlSchemaElement(schema, false); genericEle.setName(genericName); genericEle.setMinOccurs(0); JAXBBeanInfo anyBean = getBeanInfo(context, genericMethod.getReturnType()); Iterator<QName> itr = anyBean.getTypeNames().iterator();
private void addArrayCardinality(ArrayResolvedType arrayTypeDefinition, XmlSchemaElement transform) { if (arrayTypeDefinition.getMinItems() != null) { transform.setMinOccurs(arrayTypeDefinition.getMinItems()); } if (arrayTypeDefinition.getMaxItems() != null) { transform.setMaxOccurs(arrayTypeDefinition.getMaxItems()); } else { transform.setMaxOccurs(UNBOUNDED); } }
private void addArrayCardinality(ArrayResolvedType arrayTypeDefinition, XmlSchemaElement transform) { if (arrayTypeDefinition.getMinItems() != null) { transform.setMinOccurs(arrayTypeDefinition.getMinItems()); } if (arrayTypeDefinition.getMaxItems() != null) { transform.setMaxOccurs(arrayTypeDefinition.getMaxItems()); } else { transform.setMaxOccurs(UNBOUNDED); } }
/** * Create an element for an input parameter. * @param cparams The common parameters used in the schema generator * @param query The query which the parameter belongs to * @param queryParam The query parameter * @param withParam The operation parameter mapping * @return Newly created element */ private static XmlSchemaElement createInputEntryElement(CommonParams cparams, Query query, QueryParam queryParam, WithParam withParam) { XmlSchemaElement element = createElement(cparams, query.getInputNamespace(), withParam.getOriginalName(), false); element.setSchemaTypeName(DBUtils.getSimpleSchemaTypeName(cparams.getTypeTable(), DBUtils.getJavaTypeFromSQLType(queryParam.getSqlType()))); /* default is minOccurs=1, maxOccurs=1 */ if (DBConstants.QueryParamTypes.ARRAY.equals(queryParam.getParamType())) { element.setMaxOccurs(Long.MAX_VALUE); element.setMinOccurs(0); } else if (queryParam.getDefaultValue() != null) { element.setMinOccurs(0); } element.setNillable(true); return element; }
tmpElement = element; tmpElement.setMinOccurs(optional ? 0 : 1); sequence.getItems().add(tmpElement);
@Override public void writeSchema(XmlSchema root) { XmlSchemaComplexType complex = new XmlSchemaComplexType(root, true); complex.setName(getSchemaType().getLocalPart()); XmlSchemaSequence sequence = new XmlSchemaSequence(); complex.setParticle(sequence); AegisType kType = getKeyType(); AegisType vType = getValueType(); XmlSchemaElement element = new XmlSchemaElement(root, false); sequence.getItems().add(element); element.setName(getEntryName().getLocalPart()); element.setMinOccurs(0); element.setMaxOccurs(Long.MAX_VALUE); XmlSchemaComplexType evType = new XmlSchemaComplexType(root, false); element.setType(evType); XmlSchemaSequence evSequence = new XmlSchemaSequence(); evType.setParticle(evSequence); createElement(root, evSequence, getKeyName(), kType, false); createElement(root, evSequence, getValueName(), vType, true); }
private void writeTypeReference(QName name, XmlSchemaElement element, AegisType type, XmlSchema schemaRoot) { if (type.isAbstract()) { element.setName(name.getLocalPart()); element.setSchemaTypeName(type.getSchemaType()); XmlSchemaUtils.addImportIfNeeded(schemaRoot, type.getSchemaType().getNamespaceURI()); /* * Here we have a semi-giant mess. If a parameter has a minOccurs > 1, it ends * up in the type info. However, it really got used in the array type. * All we really want to do here is manage 'optional' elements. If we * ever implement flat arrays, this will change. For now, we ignore * maxOccurs and we only look for 0's in the minOccurs. */ long minOccurs = getTypeInfo().getMinOccurs(name); /* If it is 1, that's the default, and if it's greater than one, it means * that there is a real array at work here. So the only value we want to pay * attention to is 0. */ if (minOccurs == 0) { element.setMinOccurs(minOccurs); } element.setNillable(getTypeInfo().isNillable(name)); } else { element.getRef().setTargetQName(type.getSchemaType()); } }
@Override public void writeSchema(XmlSchema root) { if (isFlat()) { return; // there is no extra level of type. } if (hasDefinedArray(root)) { return; } XmlSchemaComplexType complex = new XmlSchemaComplexType(root, true); complex.setName(getSchemaType().getLocalPart()); XmlSchemaSequence seq = new XmlSchemaSequence(); complex.setParticle(seq); AegisType componentType = getComponentType(); XmlSchemaElement element = new XmlSchemaElement(root, false); element.setName(componentType.getSchemaType().getLocalPart()); element.setSchemaTypeName(componentType.getSchemaType()); seq.getItems().add(element); if (componentType.isNillable()) { element.setNillable(true); } element.setMinOccurs(getMinOccurs()); element.setMaxOccurs(getMaxOccurs()); }
private void writeTypeReference(QName name, XmlSchemaElement element, AegisType type, XmlSchema schemaRoot) { if (type.isAbstract()) { element.setName(name.getLocalPart()); element.setSchemaTypeName(type.getSchemaType()); XmlSchemaUtils.addImportIfNeeded(schemaRoot, type.getSchemaType().getNamespaceURI()); /* * Here we have a semi-giant mess. If a parameter has a minOccurs > 1, it ends * up in the type info. However, it really got used in the array type. * All we really want to do here is manage 'optional' elements. If we * ever implement flat arrays, this will change. For now, we ignore * maxOccurs and we only look for 0's in the minOccurs. */ long minOccurs = getTypeInfo().getMinOccurs(name); /* If it is 1, that's the default, and if it's greater than one, it means * that there is a real array at work here. So the only value we want to pay * attention to is 0. */ if (minOccurs == 0) { element.setMinOccurs(minOccurs); } element.setNillable(getTypeInfo().isNillable(name)); } else { element.getRef().setTargetQName(type.getSchemaType()); } }
@Override public void writeSchema(XmlSchema root) { XmlSchemaComplexType complex = new XmlSchemaComplexType(root, true); complex.setName(getSchemaType().getLocalPart()); XmlSchemaSequence sequence = new XmlSchemaSequence(); complex.setParticle(sequence); AegisType kType = getKeyType(); AegisType vType = getValueType(); XmlSchemaElement element = new XmlSchemaElement(root, false); sequence.getItems().add(element); element.setName(getEntryName().getLocalPart()); element.setMinOccurs(0); element.setMaxOccurs(Long.MAX_VALUE); XmlSchemaComplexType evType = new XmlSchemaComplexType(root, false); element.setType(evType); XmlSchemaSequence evSequence = new XmlSchemaSequence(); evType.setParticle(evSequence); createElement(root, evSequence, getKeyName(), kType, false); createElement(root, evSequence, getValueName(), vType, true); }
@Override public void writeSchema(XmlSchema root) { if (isFlat()) { return; // there is no extra level of type. } if (hasDefinedArray(root)) { return; } XmlSchemaComplexType complex = new XmlSchemaComplexType(root, true); complex.setName(getSchemaType().getLocalPart()); XmlSchemaSequence seq = new XmlSchemaSequence(); complex.setParticle(seq); AegisType componentType = getComponentType(); XmlSchemaElement element = new XmlSchemaElement(root, false); element.setName(componentType.getSchemaType().getLocalPart()); element.setSchemaTypeName(componentType.getSchemaType()); seq.getItems().add(element); if (componentType.isNillable()) { element.setNillable(true); } element.setMinOccurs(getMinOccurs()); element.setMaxOccurs(getMaxOccurs()); }
private XmlSchemaComplexType generateSchemaArray(Scope scopedName, Long size, XmlSchemaType type, Scope fQName) { XmlSchemaComplexType complexType = new XmlSchemaComplexType(schema, true); complexType.setName(mapper.mapToQName(scopedName)); XmlSchemaSequence sequence = new XmlSchemaSequence(); XmlSchemaElement element = new XmlSchemaElement(schema, false); element.setMinOccurs(size); element.setMaxOccurs(size); element.setName(ELEMENT_NAME); if (type != null) { element.setSchemaTypeName(type.getQName()); if (type.getQName().equals(ReferenceConstants.WSADDRESSING_TYPE)) { element.setNillable(true); } } else { ArrayDeferredAction arrayAction = new ArrayDeferredAction(element); wsdlVisitor.getDeferredActions().add(fQName, arrayAction); } sequence.getItems().add(element); complexType.setParticle(sequence); return complexType; }
private XmlSchemaType generateSchemaType(XmlSchemaType stype, Scope scopedName, long bound, Scope fullyQualifiedName) { XmlSchemaComplexType ct = new XmlSchemaComplexType(schema, true); ct.setName(mapper.mapToQName(scopedName)); XmlSchemaSequence sequence = new XmlSchemaSequence(); XmlSchemaElement el = new XmlSchemaElement(schema, false); el.setName(ELEMENT_NAME); el.setMinOccurs(0); if (bound != -1) { el.setMaxOccurs(bound); } else { el.setMaxOccurs(Long.MAX_VALUE); } if (stype != null) { el.setSchemaTypeName(stype.getQName()); if (stype.getQName().equals(ReferenceConstants.WSADDRESSING_TYPE)) { el.setNillable(true); } } else { SequenceDeferredAction elementAction = new SequenceDeferredAction(el); wsdlVisitor.getDeferredActions().add(fullyQualifiedName, elementAction); } sequence.getItems().add(el); ct.setParticle(sequence); return ct; }