public boolean isRequired(int occurs) { return minOccurs > occurs && (!term.isModelGroup() || ((ModelGroupBinding)term).hasRequiredParticle()); }
private void startRepeatableParticle(QName startName, ParticleBinding particle) { //System.out.println(" start repeatable (" + stack.size() + "): " + particle.getTerm()); TermBinding term = particle.getTerm(); if(term.isSkip()) { return; } StackItem item = stack.peek(); if(item.o != null && !(item.o instanceof GenericValueContainer) && (item.o instanceof Collection == false) && term.getAddMethodMetaData() == null && term.getMapEntryMetaData() == null && term.getPutMethodMetaData() == null) { ValueListHandler handler = ValueListHandler.FACTORY.lazy(item.o); Class cls = item.o.getClass(); item.repeatableParticleValue = new ValueListInitializer().newValueList(handler, cls); } }
public String resolvePropertyName() { TermBinding term = particle.getTerm(); PropertyMetaData propertyMetaData = term.getPropertyMetaData(); String prop = propertyMetaData == null ? null : propertyMetaData.getName(); if(prop != null) { return prop; } if(term.isElement()) { QName name = ((ElementBinding)term).getQName(); prop = Util.xmlNameToFieldName(name.getLocalPart(), term.getSchema().isIgnoreLowLine()); } return prop; }
private boolean tryPut(Object owner, Object o, QName qName, TermBinding term, boolean trace) { if(term.getPutMethodMetaData() != null || term.getMapEntryMetaData() != null && owner instanceof Map) { if(trace) { log.trace("setParent " + qName + " mapPut"); } invokePut(qName, term, owner, o); return true; } return false; }
private static WildcardBinding getWildcard(TermBinding term) { if(term.isWildcard()) { return (WildcardBinding) term; } if(term.isModelGroup()) { ModelGroupBinding group = (ModelGroupBinding) term; for(Iterator i = group.getParticles().iterator(); i.hasNext();) { term = ((ParticleBinding)i.next()).getTerm(); if(term.isWildcard()) { return (WildcardBinding)term; } else if(term.isModelGroup()) { WildcardBinding wc = getWildcard(term); if (wc != null) return wc; } } } return null; } }
if(term.isModelGroup()) else if(term.isWildcard()) term.setClassMetaData(classMetaData); skip = Boolean.FALSE; String msg = term.isWildcard() || term.isModelGroup() ? term + " " : "element: name=" + ((ElementBinding)term).getQName() + ", "; msg += " property=" + term.setPropertyMetaData(propertyMetaData); (term.isModelGroup() ? term.toString() : ((ElementBinding)term).getQName().toString()); throw new JBossXBRuntimeException(msg); String msg = term.isWildcard() || term.isModelGroup() ? term.toString() : "element name=" + ((ElementBinding)term).getQName(); (term.isWildcard() || term.isModelGroup() ? term.toString() : ((ElementBinding)term).getQName().toString()); throw new JBossXBRuntimeException(msg); term.setMapEntryMetaData(mapEntryMetaData); skip = Boolean.FALSE; String msg = term.isWildcard() || term.isModelGroup() ? term.toString() : "element: name=" + ((ElementBinding)term).getQName() + ","; term.setPutMethodMetaData(putMethodMetaData);
if(term.isSkip()) if(term.isMapEntryKey()) else if(term.isMapEntryValue()) if(parentTerm != null && !parentTerm.isModelGroup()) if (propertyMetaData == null) propertyMetaData = term.getPropertyMetaData(); propName = Util.xmlNameToFieldName(qName.getLocalPart(), term.getSchema().isIgnoreLowLine()); term.getSchema().isIgnoreUnresolvedFieldOrClass(), term.getValueAdapter());
if(term.isSkip()) ClassMetaData classMetaData = term.getClassMetaData(); MapEntryMetaData mapEntryMetaData = term.getMapEntryMetaData(); if(!term.isModelGroup()) if(!term.isModelGroup()) term.getSchema().isIgnoreUnresolvedFieldOrClass(), elementName ); return newInstance(wrapperType, elementName, term.getSchema().isUseNoArgCtorIfFound()); term.getPropertyMetaData() : arrayItem.getPropertyMetaData(); term.getSchema().isIgnoreLowLine() ); Class cls = loadClassForTerm(mapEntryMetaData.getImpl(), term.getSchema().isIgnoreUnresolvedFieldOrClass(), elementName); o = newInstance(cls, elementName, term.getSchema().isUseNoArgCtorIfFound()); if (term.isModelGroup()) cls = loadClassForTerm(classMetaData.getImpl(), term.getSchema().isIgnoreUnresolvedFieldOrClass(), elementName); noArgCtor = term.getSchema().isUseNoArgCtorIfFound();
ctx.particle = particle; if(term.isModelGroup()) else if(term.isWildcard()) TermBeforeMarshallingCallback marshallingHandler = term.getBeforeMarshallingCallback();
private static MapEntryMetaData getMapEntryMetaData(TermBinding term, QName qName) { MapEntryMetaData mapEntryMetaData = term.getMapEntryMetaData(); if(mapEntryMetaData == null) { String msg; if(term.isModelGroup()) { msg = "Term " + qName + " bound as map entry key or value but map entry metadata is not available for its parent term."; } else { ElementBinding element = (ElementBinding)term; msg = "Element " + qName + " bound as map entry key or value but map entry metadata is not available for its parent element nor its " + (element.getType().getQName() == null ? "annonymous" : element.getType().getQName().toString() ) + " type."; } throw new JBossXBRuntimeException(msg); } return mapEntryMetaData; }
if(item.isElement()) else if(item.isModelGroup())
term.getAddMethodMetaData() == null && term.getMapEntryMetaData() == null && term.getPutMethodMetaData() == null)
private boolean tryAdd(Object owner, Object o, QName qName, TermBinding term, WildcardBinding wildcard, boolean trace) { AddMethodMetaData addMetaData = wildcard == null ? null : wildcard.getAddMethodMetaData(); if(addMetaData == null) { addMetaData = term.getAddMethodMetaData(); } if(addMetaData == null) { return false; } if(trace) { log.trace("setParent " + qName + " add"); } invokeAdd(qName, addMetaData, owner, o); return true; }
PropertyMetaData propMetaData = binding.getTerm().getPropertyMetaData(); if(propMetaData != null && propMetaData.getCollectionType() != null)
ParticleBinding parentParticle) TermBeforeSetParentCallback beforeSetParent = particle.getTerm().getBeforeSetParentCallback(); if(beforeSetParent != null)
ParticleBinding particle = item.particle; TermBinding term = particle.getTerm(); if(term.isModelGroup()) else if(term.isWildcard())
private void invokePut(QName qName, TermBinding term, Object owner, Object o) PutMethodMetaData putMethodMetaData = term.getPutMethodMetaData(); MapEntryMetaData mapEntryMetaData = term.getMapEntryMetaData(); if(mapEntryMetaData == null)
private ElementBinding findLocalPathElementInTypes(Iterator types, String[] path) { while (types.hasNext()) { TypeBinding type = (TypeBinding)types.next(); if (type.getQName().getLocalPart().equals(path[0])) { ParticleBinding particle = type.getParticle(); if (particle == null) continue; TermBinding term = particle.getTerm(); if (!term.isModelGroup()) continue; return findLocalPathElement(((ModelGroupBinding)term).getParticles().iterator(), path, 1); } } return null; }
private ElementBinding findLocalPathElement(ElementBinding element, String[] path, int pos) { String name = path[pos]; if (!name.equals(element.getQName().getLocalPart())) return null; // End of path if (path.length - 1 == pos) return element; ParticleBinding particle = element.getType().getParticle(); if (particle == null) return null; TermBinding term = particle.getTerm(); if (!term.isModelGroup()) return null; ModelGroupBinding group = (ModelGroupBinding)term; Iterator i = group.getParticles().iterator(); // Increase depth return findLocalPathElement(i, path, pos + 1); }
/** * TODO: it seems like for correct type resolution in startParticle * I should take into account the way the object is going to be added * to the parent in setParent (and, hence, do some steps that are done in setParticle). * In setParent then I should reuse the results of what has been done in startParticle. */ public Object startParticle(Object parent, QName elementName, ParticleBinding particle, Attributes attrs, NamespaceContext nsCtx) { TermBinding term = particle.getTerm(); Object o = startElement(parent, elementName, particle); if(!term.isModelGroup()) { ElementBinding element = (ElementBinding)term; if(o != null) { attrs = element.getType().expandWithDefaultAttributes(attrs); attributes(o, elementName, element, attrs, nsCtx); } } return o; }