use of org.apache.ws.commons.schema.XmlSchemaComplexType in project cxf by apache.
the class BeanTest method testNillableInt.
@Test
public void testNillableInt() throws Exception {
defaultContext();
BeanTypeInfo info = new BeanTypeInfo(IntBean.class, "urn:Bean");
info.setTypeMapping(mapping);
BeanType type = new BeanType(info);
type.setTypeClass(IntBean.class);
type.setTypeMapping(mapping);
type.setSchemaType(new QName("urn:Bean", "bean"));
XmlSchema schema = newXmlSchema("urn:Bean");
type.writeSchema(schema);
XmlSchemaComplexType btype = (XmlSchemaComplexType) schema.getTypeByName("bean");
XmlSchemaSequence seq = (XmlSchemaSequence) btype.getParticle();
boolean int1ok = false;
boolean int2ok = false;
for (int x = 0; x < seq.getItems().size(); x++) {
XmlSchemaSequenceMember o = seq.getItems().get(x);
if (o instanceof XmlSchemaElement) {
XmlSchemaElement oe = (XmlSchemaElement) o;
if ("int1".equals(oe.getName())) {
int1ok = true;
assertTrue(oe.isNillable());
assertEquals(0, oe.getMinOccurs());
} else if ("int2".equals(oe.getName())) {
int2ok = true;
assertEquals(0, oe.getMinOccurs());
assertFalse(oe.isNillable());
}
}
}
assertTrue(int1ok);
assertTrue(int2ok);
}
use of org.apache.ws.commons.schema.XmlSchemaComplexType in project cxf by apache.
the class BeanTest method testNillableAnnotation.
@Test
public void testNillableAnnotation() throws Exception {
context = new AegisContext();
TypeCreationOptions config = new TypeCreationOptions();
config.setDefaultNillable(false);
config.setDefaultMinOccurs(1);
context.setTypeCreationOptions(config);
context.initialize();
mapping = context.getTypeMapping();
BeanType type = (BeanType) mapping.getTypeCreator().createType(BeanWithNillableItem.class);
type.setTypeClass(BeanWithNillableItem.class);
type.setTypeMapping(mapping);
XmlSchema schema = newXmlSchema("urn:Bean");
type.writeSchema(schema);
XmlSchemaComplexType btype = (XmlSchemaComplexType) schema.getTypeByName("BeanWithNillableItem");
XmlSchemaSequence seq = (XmlSchemaSequence) btype.getParticle();
boolean itemFound = false;
boolean itemNotNillableFound = false;
for (int x = 0; x < seq.getItems().size(); x++) {
XmlSchemaSequenceMember o = seq.getItems().get(x);
if (o instanceof XmlSchemaElement) {
XmlSchemaElement oe = (XmlSchemaElement) o;
if ("item".equals(oe.getName())) {
itemFound = true;
assertTrue(oe.isNillable());
assertEquals(0, oe.getMinOccurs());
} else if ("itemNotNillable".equals(oe.getName())) {
itemNotNillableFound = true;
assertFalse(oe.isNillable());
}
}
}
assertTrue(itemFound);
assertTrue(itemNotNillableFound);
}
use of org.apache.ws.commons.schema.XmlSchemaComplexType in project cxf by apache.
the class JAXBSchemaInitializer method buildGenericElements.
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);
}
}
use of org.apache.ws.commons.schema.XmlSchemaComplexType in project cxf by apache.
the class JAXBSchemaInitializer method end.
public void end(FaultInfo fault) {
MessagePartInfo part = fault.getFirstMessagePart();
Class<?> cls = part.getTypeClass();
Class<?> cl2 = (Class<?>) fault.getProperty(Class.class.getName());
if (cls != cl2) {
QName name = (QName) fault.getProperty("elementName");
part.setElementQName(name);
JAXBBeanInfo beanInfo = getBeanInfo(cls);
if (beanInfo == null) {
throw new Fault(new Message("NO_BEAN_INFO", LOG, cls.getName()));
}
SchemaInfo schemaInfo = serviceInfo.getSchema(part.getElementQName().getNamespaceURI());
if (schemaInfo != null && !isExistSchemaElement(schemaInfo.getSchema(), part.getElementQName())) {
XmlSchemaElement el = new XmlSchemaElement(schemaInfo.getSchema(), true);
el.setName(part.getElementQName().getLocalPart());
el.setNillable(true);
schemaInfo.setElement(null);
Iterator<QName> itr = beanInfo.getTypeNames().iterator();
if (!itr.hasNext()) {
return;
}
QName typeName = itr.next();
el.setSchemaTypeName(typeName);
}
} else if (part.getXmlSchema() == null) {
try {
cls.getConstructor(new Class[] { String.class });
} catch (Exception e) {
try {
cls.getConstructor(new Class[0]);
} catch (Exception e2) {
// no String or default constructor, we cannot use it
return;
}
}
// not mappable in JAXBContext directly, we'll have to do it manually :-(
SchemaInfo schemaInfo = serviceInfo.getSchema(part.getElementQName().getNamespaceURI());
if (schemaInfo == null || isExistSchemaElement(schemaInfo.getSchema(), part.getElementQName())) {
return;
}
XmlSchemaElement el = new XmlSchemaElement(schemaInfo.getSchema(), true);
el.setName(part.getElementQName().getLocalPart());
schemaInfo.setElement(null);
part.setXmlSchema(el);
XmlSchemaComplexType ct = new XmlSchemaComplexType(schemaInfo.getSchema(), false);
el.setSchemaType(ct);
XmlSchemaSequence seq = new XmlSchemaSequence();
ct.setParticle(seq);
Method[] methods = cls.getMethods();
for (Method m : methods) {
if (m.getName().startsWith("get") || m.getName().startsWith("is")) {
int beginIdx = m.getName().startsWith("get") ? 3 : 2;
try {
m.getDeclaringClass().getMethod("set" + m.getName().substring(beginIdx), m.getReturnType());
JAXBBeanInfo beanInfo = getBeanInfo(m.getReturnType());
if (beanInfo != null) {
el = new XmlSchemaElement(schemaInfo.getSchema(), false);
el.setName(m.getName().substring(beginIdx));
Iterator<QName> itr = beanInfo.getTypeNames().iterator();
if (!itr.hasNext()) {
return;
}
QName typeName = itr.next();
el.setSchemaTypeName(typeName);
}
seq.getItems().add(el);
} catch (Exception e) {
// not mappable
}
}
}
}
}
use of org.apache.ws.commons.schema.XmlSchemaComplexType in project cxf by apache.
the class ArrayType method writeSchema.
@Override
public void writeSchema(XmlSchema root) {
if (isFlat()) {
// there is no extra level of type.
return;
}
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());
}
Aggregations